0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Docker で既存の Rails プロジェクトをマウントする開発環境を構築する

Posted at

背景

  • 普段はローカル環境で Rails プロジェクトを開発していた
  • しかし「ローカル環境がどんどん汚れてしまうのでは?」という不安があった
  • Docker を使えば環境を隔離できるし、Docker の練習にもなると思い立った
  • そこで 既存の Rails プロジェクトを VSCode Dev Container 上で開発する ことにした

今回満たしたい要件

  • Ruby 3.3.9
  • Ruby on Rails
  • GitHub との SSH 接続(ホストに登録済みの SSH 鍵をそのまま利用)
  • SQLite3 環境
  • VSCode での開発

手順

  1. プロジェクトディレクトリに移動
  2. 既存の Rails プロジェクトのディレクトリに移動
  3. cd my-rails-project
  4. .devcontainer/ を作成

Rails プロジェクトにはすでに 本番環境用の Dockerfile が生成されているため、開発用には別の設定を用意する。プロジェクト直下に .devcontainer/ ディレクトリを作成し、その中に Dockerfile.dev と devcontainer.json を作成。

Dockerfile.dev


# .devcontainer/Dockerfile.dev

FROM ruby:3.3.9

# 開発に必要なパッケージ
# - openssh-client: GitHub に SSH 接続するため
# - nodejs: Rails が必要とする
# - sqlite3, libsqlite3-dev: Rails で SQLite を使うため
RUN apt-get update -qq && \
    apt-get install --no-install-recommends -y \
    build-essential \
    openssh-client \
    git \
    nodejs \
    sqlite3 \
    libsqlite3-dev \
    && rm -rf /var/lib/apt/lists/*

# 開発用ユーザを作成
# これにより VSCode で開いたときに `vscode` ユーザでログインでき、安全
RUN useradd -m -s /bin/bash vscode
USER vscode
WORKDIR /rails

devcontainer.json


// .devcontainer/devcontainer.json

{
  "name": "Rails Dev Project",
  "dockerFile": "Dockerfile.dev",
  "mounts": [
    "source=${localWorkspaceFolder},target=/rails,type=bind"
  ],
  "runArgs": [
    "-v", "${env:SSH_AUTH_SOCK}:/ssh-agent",
    "-e", "SSH_AUTH_SOCK=/ssh-agent"
  ],
  "remoteUser": "vscode"
}

ポイント

mounts:
ホストのディレクトリを /rails にマウント。
→ ファイルをホストに残したまま編集でき、コンテナ削除してもコードは消えない

runArgs:
ホストの ssh-agent をコンテナに転送。
→ コンテナから GitHub に SSH 接続する際、ホストの鍵をそのまま利用できる

VSCode で開く

VSCode でプロジェクトを開く。Dev Containers 拡張機能がインストール済みなら「コンテナ環境で開きますか?」と聞かれる。「はい」を選択すると自動でビルドが始まり、コンテナにアタッチされる。

GitHub SSH 接続確認

コンテナのターミナルから以下を実行:


ssh -T git@github.com

成功すると次のようなメッセージが出る:


Hi User-Name! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.

これで GitHub リポジトリの clone / push が可能になる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?