Railsチュートリアル(第7版)を進めるための Rails 7.0.4.3 + Ruby 3.2.9 環境 を、Docker + docker compose で簡単に構築できる構成を作ったのでメモとして残しときます。(2025年11月時点)
ローカルにRubyやNodeを直接入れずに、
docker compose up だけでRailsの初期画面表示までできる構成です。
この記事は、以下の記事を参考にしつつ、
Railsチュートリアル用にディレクトリ構成やバージョンを調整しています。
参考にした記事:
Ruby on Rails x Docker環境を超シンプルに構築してみた
最終的にできること
Railsチュートリアルと同じ
- Rubyバージョン 3.2.9
- Railsバージョン 7.0.4.3
-
environmentディレクトリ構成
そして
-
localhost:3000でRails起動確認まで完了
前提
- Docker Desktopインストール済み
- gitインストール済み、global設定等済み
1. プロジェクト用ディレクトリを作成
まず作業用ディレクトリを作って移動します。
例として今回は作業用ディレクトリを~/repos/rails7_tutorialとします。
mkdir ~/repos/rails7_tutorial
cd ~/repos/rails7_tutorial
ターミナル操作になれてない人はエディタをこのタイミングで開くと楽です。
cursor .
# または
code .
2. Gemfile を作成
プロジェクト直下に Gemfile を作成し、以下を貼り付けます。
source 'https://rubygems.org'
gem 'rails', '7.0.4.3'
3. Dockerfile を作成
同じくプロジェクト直下に Dockerfile を作成します。
FROM ruby:3.2.9
WORKDIR /environment
# GemfileとGemfile.lockファイルを
# イメージのenvironmentディレクトリ内にコピー
COPY Gemfile* /environment/
RUN bundle install
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
ポイント
- Rubyは 3.2.9 固定
- 作業ディレクトリを Railsチュートリアルに合わせて
/environmentに変更
4. compose.yml を作成
次に compose.yml を作成します。
version: '3.8'
services:
web:
build: .
ports:
- '3000:3000'
volumes:
- type: bind
source: ./environment
target: /environment
5. environment ディレクトリ作成
プロジェクト直下に environment フォルダを作成します。
mkdir environment
ここまででディレクトリ構成はこうなります。
rails7_tutorial
├── Dockerfile
├── Gemfile
├── compose.yml
└── environment/
6. Dockerイメージのビルド & Railsプロジェクト作成
まずビルドしますー。
docker compose build
次にコンテナ上で Rails プロジェクトを作成します。
docker compose run web sh -c "RUBYOPT='-rlogger' rails new . --database=sqlite3"
Ruby 3.2 + Rails 7 の組み合わせで logger 周りのエラーが出る場合があるため、その回避用に RUBYOPT を指定しています。
sqlite3を明示しなくてもデフォルトでsqliteになるっぽいですが、わかりやすくするため。
これで environment 配下に Rails プロジェクト一式が生成されます。
7. Gemfile を Railsチュートリアル仕様に変更
以下の内容に 2箇所のGemfileを両方とも置き換えます。
~/repos/rails7_tutorial/Gemfile~/repos/rails7_tutorial/environment/Gemfile
Dockerビルド時に使われるGemfileと、Railsアプリ側のGemfileが別れているため両方変更しています。
Railsチュートリアル 第1章 リスト1.7の内容です。
source "https://rubygems.org"
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
ruby "3.2.9"
gem "rails", "7.0.4.3"
gem "sassc-rails", "2.1.2"
gem "sprockets-rails", "3.4.2"
gem "importmap-rails", "1.1.5"
gem "turbo-rails", "1.4.0"
gem "stimulus-rails", "1.2.1"
gem "jbuilder", "2.11.5"
gem "puma", "5.6.8"
gem "bootsnap", "1.16.0", require: false
gem "sqlite3", "1.6.1"
gem "concurrent-ruby", "1.3.4"
group :development, :test do
gem 'reline', '0.5.10'
gem "debug", "1.7.1", platforms: %i[ mri mingw x64_mingw ]
end
group :development do
gem "web-console", "4.2.0"
gem "solargraph", "0.56.2"
gem "irb", "1.10.0"
gem "repl_type_completor", "0.1.10"
end
group :test do
gem "capybara", "3.38.0"
gem "selenium-webdriver", "4.8.3"
gem "webdrivers", "5.2.0"
gem "rails-controller-testing", "1.0.5"
gem "minitest", "5.18.0"
gem "minitest-reporters", "1.6.0"
gem "guard", "2.18.0"
gem "guard-minitest", "2.4.6"
end
8. Gemfile.lock を削除して再ビルド
一度古いlockファイルを削除。
rm ./environment/Gemfile.lock
再ビルド & 起動。
docker compose build
docker compose up
docker compose upでフォアグラウンド起動します。Ctrl+cで抜けます。
docker compose up -dだとバックグラウンド起動します。
両者の詳しい違いについてはお調べ下さい。
起動後、environment 配下に新しい Gemfile.lock が生成されるので、
それをプロジェクト直下にもコピーします。
cp ./environment/Gemfile.lock ./Gemfile.lock
9. Railsの起動確認
ブラウザで以下にアクセス。
http://localhost:3000
⭕️ Railsの初期画面(赤いロゴ)が出れば成功です。
10. Git の初期設定
(Gitのインストールやglobal設定などは終わっているものとして進めます。)
environment配下の .git を削除
Rails生成時に environment/.git が作られるので削除します。
rm -rf ./environment/.git
.gitignore 作成
プロジェクト直下に .gitignore を作成。
.DS_Store
今回は最低限 .DS_Store のみ入れています。
必要に応じて各自で追記してください。
11. GitHub にリポジトリを作成して push
GitHubで空のリポジトリを作成後、以下を実行します。
echo "# test_rails7_tutorial2" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/[アカウント名]/[リポジトリ名].git
git push -u origin main
まとめ
- Railsチュートリアルの環境は Dockerで作ると楽です。
- 一回作ってしまえば
docker compose upだけで開発開始できます(あとはdocker compose stop, docker compose startを繰り返すくらいだと思います。)
Gemfileをいじったらビルドしなおした方がいいかも。チュートリアル内で確かgemを追加することがあったと思うのでそこら辺も時間ができたら追記しようと思います。
ただしこの記事の内容が難しいという場合は素直にRailsチュートリアルの指示通りGitHub Codespacesを使った方が良いです。