🐰

【RubyonRails】Dockerを利用してRails7+PostgreSQLの開発環境を構築する方法

2024/08/08に公開

はじめに

Dockerを利用してRails7とPostgreSQLの開発環境を構築するまでのチュートリアルを提供します。
具体的には、以下のような内容で進めます。

  1. 技術構成
  2. 必要なファイルの準備
  3. Railsアプリケーションの作成
  4. データベース設定の更新
  5. コンテナの起動
  6. データベースの作成
  7. Railsアプリケーションの確認

1. 技術構成

カテゴリ 技術
フロントエンド JavaScript/Sprockets-Rails/Importmap-Rails/Turbo-Rails/Stimulus-Rails
バックエンド Ruby 3.1.6/Rails 7.0.8.4
データベース PostgreSQL 14.12
環境構築 Docker/docker-compose

2. 必要なファイルの準備

以下のディレクトリ構成とファイルを作成します。

 myapp/
   ├── Dockerfile
   ├── docker-compose.yml
   ├── Gemfile
   ├── Gemfile.lock
   └── entrypoint.sh

Gemfile

Railsと必要なgemを指定します。

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

Dockerfile

Railsアプリケーション用のDockerイメージを作成します。

FROM ruby:3.1

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

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

# GemfileとGemfile.lockをコピー
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock

# gemをインストール
RUN bundle install

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

# エントリポイントスクリプトをコピーして実行権限を付与
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]

# ポート3000を公開
EXPOSE 3000

# デフォルトコマンド
CMD ["rails", "server", "-b", "0.0.0.0"]

docker-compose.yml

複数のコンテナを定義し、連携させます。

services:
  db:
    image: postgres
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
    volumes:
      - postgres_volume:/var/lib/postgresql/data

  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

volumes:
  postgres_volume:

entrypoint.sh

コンテナ起動時に実行されるスクリプトを作成します。

#!/bin/bash
set -e

# サーバPIDファイルを削除
rm -f /myapp/tmp/pids/server.pid

# コンテナのメインプロセスを実行
exec "$@"

3. Railsアプリケーションの作成

Docker Composeを使ってRailsアプリケーションを作成します。
webサービスのコンテナを起動し、rails newコマンドを実行します。

docker-compose run web rails new . --force --database=postgresql

4. データベース設定の更新

config/database.ymlを以下のように編集します。

default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  username: postgres
  password: password
  pool: 5

development:
  <<: *default
  database: myapp_development

test:
  <<: *default
  database: myapp_test

5. コンテナの起動

以下コマンドを実行し、コンテナを起動します。

docker-compose build
docker-compose up

6. データベースの作成

新しくターミナルを開き、以下コマンドを実行し、データベースを作成します。

docker-compose exec web rails db:create

7. Railsアプリケーションの確認

最後に、ブラウザでhttp://localhost:3000 にアクセスし、Railsのウェルカムページが表示されれば成功です。
Image from Gyazo

最後に

以上が、Dockerを利用してRails7とPostgreSQLの開発環境を構築するまでのチュートリアルです。
ここからwebアプリケーションの作成を進めていきます。

Discussion