RubyonRails

Rails Dev Container の構築手順とベストプラクティス | Docker・VS Codeで環境を統一

ⓘ本ページはプロモーションが含まれています

スポンサードリンク

前提条件とインストール手順

このセクションでは、Dev Container を利用するために最低限必要なツールとそのインストール方法を示します。
Docker と VS Code がそれぞれ最新の安定版であることが前提ですので、バージョン番号は「公式サイトで提供されている最新版」と表記しています。

必要なソフトウェア

ツール 用途 推奨インストール形態
Docker Engine / Docker Desktop コンテナの実行基盤 macOS・Windows は Docker Desktop、Linux は Docker Engine(apt/yum でインストール)
Visual Studio Code エディタ兼 IDE 公式サイトからダウンロードし、最新版を使用
Remote‑Containers 拡張機能 VS Code とコンテナの連携 VS Code の拡張マーケットプレイスで Remote - Containers をインストール(バージョンは「最新」)

インストール手順(共通)

  1. Docker の導入
  2. 公式サイトから OS に合ったインストーラを取得し、画面の指示に従ってインストールします。
  3. ターミナル/コマンドプロンプトで docker version を実行し、サーバとクライアント両方が表示されれば成功です。

  4. VS Code の導入

  5. 公式サイトから最新の VS Code をダウンロードしてインストールします。
  6. 起動後に「ヘルプ」→「バージョン情報」を確認し、1.90.x 以上であることを確かめます。

  7. Remote‑Containers 拡張機能の追加

  8. VS Code の左サイドバーから拡張機能ビューを開き、検索欄に Remote - Containers と入力してインストールします。
  9. インストール完了後は再起動するか、コマンドパレットで Reload Window を実行してください。

ポイント:Docker Desktop の設定画面で「Use the WSL 2 based engine(Windows のみ)」や「Enable Kubernetes」など不要なオプションは無効化しておくとリソース消費が抑えられます。


Rails プロジェクト作成と .devcontainer ディレクトリ構築

この章では、Rails アプリ本体の生成から Dev Container 用設定ファイルを配置するまでの流れを示します。
rails-new は公式 CLI ではなく、コミュニティが提供しているテンプレートスクリプトであるため、本稿では標準 rails new コマンドをベースに説明します。

rails‑new スクリプトの取得とプロジェクト生成

「rails-new」は非公式のラッパーです。信頼性を担保するには、公式ドキュメントが示す rails new に必要なオプションだけ付与して実行します。

  • --skip-bundle により Gemfile の解決をコンテナ起動後の postCreateCommand に委譲します。
  • この時点で Gemfile.lock は空になるため、ローカル環境とコンテナ環境の差異が生じません。

.devcontainer ディレクトリ配下の構成

このディレクトリは VS Code が自動的に認識し、Dev Container のビルド・起動設定を保持します。
以下に最低限必要な 3 ファイルと補助ファイルの配置例を示します。

  • devcontainer.json は「どのサービスを開発コンテナとして扱うか」や「拡張機能の自動インストール」を宣言します。
  • Dockerfile では Ruby 本体に加えて Node.js(LTS)と Yarn を追加し、フロントエンド資産のビルドを可能にします。
  • docker-compose.yml は Rails アプリコンテナ (app) と PostgreSQL コンテナ (db) のネットワーク・永続化設定を行います。

Dockerfile と docker‑compose の設定詳細

この章では、実際に動作する Dockerfile と compose ファイルの記述ポイントを解説します。
冗長なインストールや競合リスクが生じないよう、Node.js は nodesource リポジトリからのみ取得し、apt-get install nodejs は省きます。

Dockerfile(Ruby・Node/Yarn 環境構築)

導入文:公式 Ruby イメージに必要なパッケージと Node.js/LTS を追加するだけで、Rails 開発に必要なツール一式が揃います。

  • ポイント
  • apt-get install nodejs を二度書かないことでパッケージ競合を防止。
  • corepack による Yarn のインストールは公式が推奨する手順です。
  • 最後の chown はコンテナ内で生成されるファイルがホスト側でも正しい所有者になるようにしています。

docker‑compose.yml(アプリ・DB の連携)

導入文:Rails コンテナ (app) と PostgreSQL コンテナ (db) を同一ネットワーク上に配置し、環境変数で接続情報を統一します。

  • 環境変数管理
  • POSTGRES_PASSWORDPOSTGRES_DB.env ファイルに定義し、.gitignore で除外します(後述)。
  • DATABASE_URL の構築は Rails が自動的に認識できる形にしています。

devcontainer.json の必須項目

導入文:VS Code がコンテナ起動時に参照するメタ情報を記述し、拡張機能の自動インストールや初回コマンド実行を設定します。

  • postCreateCommand はコンテナが起動した直後に実行され、Gem のインストールと DB 初期化を自動化します。
  • remoteUser により権限問題を回避し、作業は非 root ユーザーで行われます。

VS Code でコンテナ起動・アプリ実行・デバッグ

この章では、VS Code 上で Dev Container を立ち上げ、Rails サーバを起動し、ブレークポイント付きデバッグを行う手順を解説します。
各操作は GUI とショートカットの両方で実行できるように記載しています。

コンテナの起動手順

  1. VS Code で myapp フォルダを開く。
  2. コマンドパレット(Ctrl+Shift+P / ⇧⌘P)で Dev Containers: Reopen in Container を選択。
  3. 初回は Docker がイメージビルドとコンテナ作成に数分かかりますが、2 回目以降はキャッシュが利用されて数秒で完了します。

ヒント:起動中のログは VS Code の「出力」タブ → 「Dev Containers」で確認できます。

アプリの起動とブラウザでの確認

コンテナ内ターミナル(VS Code が自動的に接続)で以下を実行します。

ブラウザで http://localhost:3000 にアクセスすると、Rails のウェルカムページが表示されます。

VS Code デバッグ構成(launch.json)

導入文:Ruby 標準のデバッガー rdbg を利用すれば、ブレークポイント付きでサーバやテストを実行できます。

  • デバッグは VS Code の左サイドバーから「実行とデバッグ」を開き、上記構成のいずれかを選択すれば開始できます。
  • テスト実行時にブレークポイントが有効になるため、失敗したテストケースをその場で調査できます。

トラブルシューティングとベストプラクティス

ここでは、開発中によく遭遇するエラーとその対処法、さらにチームでの環境共有に役立つ設定例をまとめます。

代表的なエラーと対処法

エラー 主な原因 推奨対策
Docker Engine が起動しない Hyper‑V/WSL2 の無効化、古い Docker Desktop Docker Desktop を最新版に更新し、OS 再起動。Windows は「仮想マシンプラットフォーム」機能を有効化
ポート 3000 が競合 ホスト側で別プロセスが同ポート使用中 docker-compose.ymlports"3001:3000" に変更し、ブラウザは localhost:3001
Gemfile.lock の所有者が root コンテナ起動時に root がファイルを書き出す Dockerfile の最後で chown -R vscode:vscode /workspace を実行。postCreateCommand 前に sudo chown -R $(id -u):$(id -g) .
DB 接続エラー (PG::ConnectionBad) DATABASE_URL が正しく設定されていない .envPOSTGRES_PASSWORDPOSTGRES_DB を記述し、compose で env_file: .env を指定。docker compose exec app env | grep DATABASE_URL で確認

環境変数管理と .gitignore の設定

機密情報(DB パスワード等)はリポジトリに含めず、.env ファイルでローカルだけ管理します。
以下は推奨する .gitignore.env の例です。

.devcontainer/.env のサンプル(実際のリポジトリには含めない)

  • docker-compose.ymlenv_file: .env 行で自動的に読み込まれ、DATABASE_URL${POSTGRES_PASSWORD} 形式で参照できます。
  • CI 環境(GitHub Actions 等)では、シークレット変数を同名で設定し、.env の代わりに環境変数として渡すだけで同一構成が利用可能です。

チームへの共有手順

  1. リポジトリをクローン
    bash
    git clone https://github.com/your-org/myapp.git
    cd myapp
  2. VS Code でフォルダを開く → 自動的に「Reopen in Container」バナーが表示されるので実行。
  3. 初回起動後、postCreateCommand が走り bundle installrails db:create が完了するまで待つ。

ベストプラクティス.devcontainer ディレクトリは必ずバージョン管理し、Dockerfile・compose の変更は Pull Request でレビューすることで、環境のブレを防げます。


まとめ

  • Docker と VS Code(Remote‑Containers)さえ導入すれば、Rails 開発に必要な Ruby / Node.js / PostgreSQL がすべてコードベースで再現可能です。
  • 冗長なインストールは排除し、Node.js は nodesource のみから取得することで依存競合を防止しました。
  • 環境変数は .env ファイルに集約し .gitignore で除外すれば、機密情報の漏洩リスクも低減できます。
  • devcontainer.jsonpostCreateCommand と VS Code デバッグ設定 (launch.json) により、コンテナ起動からコード実行・ブレークポイントまでシームレスに行えます。

この手順をプロジェクトのテンプレートとして保存すれば、新規メンバーが数分で同一環境を構築でき、開発スピードと品質の向上につながります。 Happy coding!

スポンサードリンク

-RubyonRails