環境構築スクリプトを使ってRails + Dockerの構築時間を1/10に短縮する
ごきげんよう🙋♀️あっきー(@kuronekopunk)です。
ここ数年はEMとしての仕事が増えてコードを書く機会が減っていましたが、生成AIの活用により空いた時間で小さなタスクを効率的に実行できるようになりました。
小さいタスクを複数進めるなかで、git worktreeを使って環境を分けて開発をしています。
環境を分けるようになり必然的に環境構築をする回数が増えてきました。それまでは新しく入社した方や、PCを買い替えた方が環境構築をする程度であまり頻度が多くなかったため見過ごされていた環境構築の手間が大きくなってきました。
そこでセットアップのスクリプトを作り環境構築の手間の削減を図りました。
課題
従来の環境構築手順
従来は以下のような複数のコマンドを実行する必要がありました。
前のコマンドの終了を待ちコマンドを順次実行するためターミナルに張り付く必要があり、実行自体も全体で10分以上かかっていました。
また、必要なコマンドが増えるたびに順次コマンドが追加され全体最適されていなかったため、実行不要なコマンドも存在しました。
docker compose build
# 依存関係のインストール
docker compose run --rm app yarn install
docker compose run --rm app bundle install
# データベースのセットアップ
docker compose run --rm app rails db:create
docker compose run --rm app rails db:schema:load
docker compose run --rm app rails db:seed
# Elasticsearchのセットアップ
...
セットアップスクリプトを作成
スクリプトの命名
Rails環境では bin/setup が既に用意されています。
今回はRails以外のコンテナのセットアップも含むため bin/docker/setup と別でスクリプトを作成することにしました。
bin/docker/setupスクリプトの作成
コマンドの整理と疎通確認処理を追加して、すべての処理を1つのスクリプトにまとめました。
これにより bin/docker/setup コマンド1つで環境構築が可能になりました。
以下はサンプルです。
#!/bin/bash
set -e
echo "🏗️ Docker イメージのビルド中..."
docker compose build
echo "📦 依存関係のインストール中..."
echo "🔄 yarn install"
docker compose run --rm app yarn install
echo "🔄 bundle install"
docker compose run --rm app bundle install
echo "🗄️ データベースのセットアップ中..."
echo "🔄 rails db:prepare"
docker compose run --rm app bundle exec rails db:prepare
echo "🔍 Elasticsearch セットアップ中..."
echo "🔄 searchkick:reindex:all"
docker compose run --rm app bundle exec rails searchkick:reindex:all
# 続く
まとめ
効果として、環境構築にかかる実行が10分から1分に短縮され、コマンド実行ミスもなくなりました。git worktree 等を活用した並列での開発が加速する中でこの改善の効果は大きいです。
今回のコマンド作成も生成AIの活用しており、これまで後回しにしがちだった小さな改善を効率的に実行できるようになったと感じています。
今後も改善を通して開発生産性や開発者体験の向上を図っていければと思います。
Discussion