Ubuntu 26.04 へベースボックス更新とセットアップスクリプトの改良
この PR は開発環境のベースイメージを Ubuntu 26.04 に切り替え、ChromeDriver の導入、Yarn リポジトリ鍵の signed‑by 形式への移行、VirtualBox Guest Additions 更新後の自動再起動設定を追加します。これらの変更により、環境構築時の手順が簡略化され、最新ツールチェーンが利用可能になります。
背景
ベースボックスを bento/ubuntu-24.04 から bento/ubuntu-26.04 へ変更することで、開発者は最新の Ubuntu イメージ上でテストを実行できます。加えて、システムテストで必要な ChromeDriver が自動的にインストールされるようにした点が主な目的です。さらに、apt-key の非推奨に伴い Yarn のリポジトリ鍵取得方法をモダンな signed‑by 方式へ置き換えました。最後に、VirtualBox Guest Additions の更新後にプロビジョニングがハングするケースを防止するため、vagrant-vbguest の自動再起動フラグを有効化しています。
技術的な変更
Vagrantfile の変更点はベースボックスの参照先とコメントの更新、そして Guest Additions 更新後の自動再起動ロジックの追加です。条件付きでプラグインが存在する場合に config.vbguest.auto_reboot = true を設定することで、再起動が必要なタイミングを自動化しています。
@@
- config.vm.box = 'bento/ubuntu-24.04' # 24.04 LTS
+ config.vm.box = 'bento/ubuntu-26.04' # 26.04 LTS
@@
config.vm.provider "virtualbox" do |v|
@@
end
+
+ # Reboot after updating VirtualBox Guest Additions to avoid hanging during provision.
+ if Vagrant.has_plugin?("vagrant-vbguest")
+ config.vbguest.auto_reboot = true
+ end
end
README.md では VM に接続した際のウェルカムメッセージを新しい Ubuntu バージョンに合わせて修正し、JavaScript 依存パッケージのインストール手順を明示しました。これにより、利用者が正しい手順で環境を立ち上げられるようになります。
@@
- Welcome to Ubuntu 24.04.2 LTS (GNU/Linux 6.8.0-86-generic x86_64)
+ Welcome to Ubuntu 26.04 LTS (GNU/Linux 7.0.0-22-generic x86_64)
@@
- Some Rails components (e.g. Action Cable) include JavaScript packages. Install their dependencies before running tests:
-
- vagrant@rails-dev-box:/vagrant/rails$ cd actioncable && yarn install
+ Some Rails components (e.g. Action Cable) include JavaScript packages. Install their dependencies before running tests:
+
+ vagrant@rails-dev-box:/vagrant/rails$ cd actioncable && yarn install
bootstrap.sh では 4 か所を改修しています。まず Yarn の GPG 鍵取得を apt-key から signed‑by 形式へ置き換え、鍵リングファイルを /usr/share/keyrings/yarn-archive-keyring.gpg に保存しました。次に mise のインストールを一時スクリプトで行い、ダウンロードファイルを削除して残存物を防止しています。MySQL テスト用環境変数に MYSQL_CODESPACES=1 を追記し、Nokogiri の依存パッケージを軽量化しました。最後に Google Chrome のリポジトリ設定も signed‑by 方式に統一し、ChromeDriver が利用できる基盤を整えました。
@@
-curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo -E apt-key add -
-echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
+curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor -o /usr/share/keyrings/yarn-archive-keyring.gpg
+echo "deb [signed-by=/usr/share/keyrings/yarn-archive-keyring.gpg] https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
@@
-curl -fsSL https://mise.run | HOME=/home/vagrant sudo -u vagrant bash
+curl -fsSL --retry 5 --retry-delay 3 --retry-connrefused -o /tmp/mise-install.sh https://mise.run
+HOME=/home/vagrant sudo -u vagrant bash /tmp/mise-install.sh
+rm -f /tmp/mise-install.sh
@@
-# /etc/environment is parsed by PAM for login sessions to expose these variables broadly.
+# /etc/environment is parsed by PAM for all sessions to expose these variables broadly.
+# MYSQL_CODESPACES=1 tells railties tests to use 'root' as the MySQL root password.
cat >> /etc/environment <<'ENV'
@@
-install 'Nokogiri dependencies' libxml2 libxml2-dev libxslt1-dev
+install 'Nokogiri dependencies' libxml2-dev libxslt1-dev
@@
-echo installing Google Chrome
curl -fsSL https://dl.google.com/linux/linux_signing_key.pub | gpg --dearmor -o /usr/share/keyrings/googlechrome-linux-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/googlechrome-linux-keyring.gpg] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list
apt-get -y update >/dev/null 2>&1
install 'Google Chrome' google-chrome-stable
設計判断
ベースボックスのバージョン変更は、ファイル名やコメントを更新するだけのシンプルな置換で実装されています。これにより既存の Vagrant 設定ロジックはそのまま維持され、互換性が保たれます。vagrant-vbguest の自動再起動は、プラグインがインストールされている場合に限定した条件分岐で実装され、不要な再起動を防ぎつつ更新後の安定性を確保しています。
apt-key から signed‑by への移行は、鍵取得とリポジトリ登録を 1 行のコマンドに統合し、スクリプトの冪等性と保守性を向上させています。mise のインストールを一時ファイル経由にした点は、ダウンロードのリトライロジックを追加しつつ、実行後に残存ファイルを削除することでクリーンなプロビジョニングを実現しています。これらの判断は、最小変更で安全性・可搬性を高めるという設計方針に沿ったものです。
まとめ
PR はベースボックスを Ubuntu 26.04 に更新し、ChromeDriver の導入、Yarn 鍵の signed‑by 方式化、VirtualBox Guest Additions 更新後の自動再起動設定を追加しました。スクリプトの改良によりパッケージ取得の安全性とプロビジョニングの冪等性が向上し、開発者は最新環境を手間なく利用できるようになります。