【2025年版】WindowsでDocker + Rails 8 + MySQL 8 環境構築完全ガイド
Windows (PowerShell) 環境で、最新の Rails 8 と MySQL 8 を Docker Compose を使って構築する手順の備忘録です。 rails new 時に Dockerfile が本番用に上書きされる問題や、Windows 特有の Git 改行コード問題への対処も含めています。
環境
- OS: Windows 10 / 11
- Shell: PowerShell
- Docker: Docker Desktop for Windows
- Ruby: 3.3
- Rails: 8.0
- MySQL: 8.0
1. プロジェクトディレクトリの作成
まずはプロジェクト用のディレクトリを作成し、移動します。
mkdir sample_app
cd sample_app
2. 設定ファイルの作成
以下の3つのファイルをプロジェクトルートに作成します。 WindowsのPowerShellでは touch コマンドがないため、New-Item (エイリアス ni) を使うか、エディタで作成します。
開発環境用にシンプルにした Dockerfile です。
FROM ruby:3.3
RUN apt-get update -qq && apt-get install -y build-essential default-libmysqlclient-dev nodejs
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp
MySQL 8.0 を使用し、データを永続化する設定です。
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: password
ports:
- "3306:3306"
volumes:
- ./db/mysql/volumes:/var/lib/mysql
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/myapp
- gem_data:/usr/local/bundle
ports:
- 3000:3000
depends_on:
- db
tty: true
stdin_open: true
volumes:
gem_data:
rails new を実行するための仮の Gemfile です。
source 'https://rubygems.org'
gem 'rails', '~> 8.0'
ビルドエラーを防ぐために空のファイルを作成しておきます。
ni Gemfile.lock
3. Rails アプリケーションの新規作成
初回ビルド
まずは仮の Gemfile を元にイメージをビルドします。
docker compose build
rails new の実行
コンテナ越しに rails new を実行してファイルを生成します。
--force: 既存のファイルを上書きします。
--database=mysql: DBをMySQLに指定します。
--skip-bundle: ここではbundle installをスキップします(後でコンテナ内でやるため)。
docker compose run --rm web rails new . --force --database=mysql --skip-bundle
4. 設定の修正 (重要)
rails new を実行すると、いくつかのファイルが上書き・生成されるため、開発環境用に修正が必要です。
Dockerfile を元に戻す
Rails 8 の rails new は、本番環境向け(Kamal用)の複雑な Dockerfile を自動生成し、元のファイルを上書きしてしまいます。 開発環境では扱いづらいため、手順2で作成したシンプルな Dockerfile の内容にもう一度書き戻します。
config/database.yml の修正
生成された config/database.yml は localhost を向いているため、Docker Compose のサービス名 db に書き換えます。また、パスワードも設定します。
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: password # docker-compose.ymlで設定したパスワード
host: db # サービス名に変更
5. 再ビルドと起動
Gemfile が更新されたため、イメージを再ビルドします。
docker compose build
コンテナを起動します。
docker compose up -d
データベースを作成します。
docker compose run --rm web rails db:create db:migrate
これで http://localhost:3000 (または http://127.0.0.1:3000) にアクセスすると、Railsのデフォルト画面が表示されます。
6. Git の設定 (Windows向け)
'Windows' で開発する場合、改行コードの問題や、Docker の DB ファイルを除外する設定が必要です。
.gitignore の追記
docker-compose.yml で指定した DB のボリューム保存先を Git 管理外にします。 .gitignore の末尾に以下を追記します。
# Docker database volume
/db/mysql/volumes
.gitattributes の作成
Windows (CRLF) と Linux コンテナ (LF) の改行コードの違いによる警告を防ぐため、.gitattributes ファイルを作成し、Git 上では LF に統一します。
ファイル名: .gitattributes
* text=auto eol=lf
Git 初期化とコミット
git init
git add .
git commit -m "first commit"
git branch -M main
# リモートリポジトリがある場合
# git remote add origin https://github.com/USERNAME/REPO.git
# git push -u origin main
7. Scaffold で機能作成
動作確認として Scaffold で記事投稿機能を作成してみます。
# Scaffold 生成
docker compose run --rm web rails g scaffold Post title:string body:text
マイグレーション実行
docker compose run --rm web rails db:migrate
http://127.0.0.1:3000/posts にアクセスして、投稿機能が動けば構築完了です!