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 8 API × MySQL 環境構築手順まとめ

Last updated at Posted at 2025-05-27

Rails 8 × MySQL × Dockerで構築するTodo管理APIの開発環境(完全ガイド)

Rails 8(APIモード)と MySQL 8.0 を使用した開発環境「Todo管理API」をベースに、Dockerで構築する手順を自分なりに紹介します。

Ruby 3.2ベースの構成で、フロントエンドとAPIを分離した開発スタイルに最適なセットアップです。

✅ 環境構成

項目 内容
Ruby 3.2.0
Rails 8.0.2(APIモード)
MySQL 8.0
ポート構成 3001(ホスト) → 3000(Rails API)
DB名 todo_app_development
DBユーザー root / password
Dockerネットワーク app-network

✅ ディレクトリ構成

Todo-app

backend/
├── Dockerfile
├── docker-compose.yml
├── entrypoint.sh
├── Gemfile
├── Gemfile.lock
└── ...(rails new によって生成されるファイル群)


✅ 1. docker-compose.yml

以下は Rails API + MySQL 構成の心臓部です。コンテナ起動時のDB初期化、ポートフォワード、ボリューム永続化などを定義しています。

services:
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: todo_app_development
    command: --default-authentication-plugin=mysql_native_password
    volumes:
      - mysql-data:/var/lib/mysql
    ports:
      - "3306:3306"
    container_name: todo_db
    networks:
      - app-network

  api:
    build:
      context: .
      dockerfile: Dockerfile
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp
      - bundle-data:/usr/local/bundle
    environment:
      TZ: Asia/Tokyo
      RAILS_ENV: development
      RAILS_MAX_THREADS: 5
    ports:
      - "3001:3000"
    depends_on:
      - db
    container_name: todo_api
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

volumes:
  mysql-data:
  bundle-data:

💡 depends_on により DB 起動後にAPIが立ち上がるように制御しています。

✅ 2. Dockerfile

Dockerコンテナ内でRails APIアプリを動かすための構成です。Gemfile の依存をビルドし、アプリケーションコードを配置します。

FROM ruby:3.2.0

# 必要なパッケージのインストール
RUN apt-get update -qq && \
    apt-get install -y build-essential libpq-dev nodejs default-mysql-client

# アプリケーションディレクトリの作成
WORKDIR /myapp

# Gemfileのコピーとインストール
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install

# アプリケーションのコピー
COPY . /myapp

# エントリーポイントの設定
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]

# サーバーの起動
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]

✅ 3. entrypoint.sh

Railsの開発環境でよく起こる server.pid の残留問題に対処します。

#!/bin/bash
set -e

# 既存のPIDファイルがあれば削除
rm -f /myapp/tmp/pids/server.pid

# コンテナ起動後にコマンド実行
exec "$@"

✅ 4. GemfileとGemfile.lock(空)

Gemfile

Rails 8.0.2 を使用します。

source 'https://rubygems.org'
gem 'rails', '~> 8.0.2'

Gemfile.lock(空)--作成のみ

初期状態では空でOKです。以下のコマンドで作成します:

touch Gemfile.lock

✅ 5. データベース設定(config/database.yml)

rails new によって生成された config/database.yml を以下のようにMySQL向けに編集します。

default: &default
  adapter: mysql2
  encoding: utf8mb4
  host: db
  username: root
  password: <個人で設定>
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: todo_app_development

test:
  <<: *default
  database: todo_app_test

production:
  <<: *default
  database: todo_app_production

✅ 6. 実行手順

以下の手順で環境を立ち上げます。🚧

① コンテナのビルドと起動

docker compose up -d

② データベース作成

docker compose exec api bundle exec rails db:create

✅ 7. 現在の状態(確認)

✅ todo_db コンテナが起動中(MySQL)

✅ todo_api コンテナが起動中(Rails API)

http://localhost:3001 にアクセスすると Rails API が応答

✅ データベース todo_app_development が作成済みという環境構築ができます!!

おわりに

これで Todoアプリ(仮)のRails API開発環境が Docker 上で完成しました!

今後は以下のようなステップに進めます:

・CORS設定を加えてフロントエンドとの連携

・todos リソースの scaffold を追加してCRUD構築

・本番環境向けのDockerfile(multi-stage build)への発展

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?