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 ComposeでRails + PostgreSQLの開発環境を構築する

Last updated at Posted at 2025-06-16

はじめに

本記事は、RailsプロジェクトにPostgreSQLを追加し、Docker Composeで開発環境を構築する手順について解説します。
Dockerを使うことでローカル環境に依存しない開発環境を用意することができ、チームでの共有にも役立ちます。
(手順はDocker公式サイトのクィックスタート: Compose と Railsを参考にしました)

この記事でできること

  • Docker Composeを使ってRails + PostgreSQL開発環境を構築
  • http://localhost:3000でRailsアプリにアクセスできる
  • ソースコードの変更をブラウザに即時反映させる

バージョン情報と動作環境

バージョン情報

  • Ruby: 3.2.2
  • Rails: 7.0.6
  • PostgreSQL: 12

動作環境

  • MacBook Air
  • チップ:Apple M3
  • メモリ 16GB

準備

Dockerを使用するには、Docker Desktopを起動しておく必要があります。
初めて使用する方は、以下のリンクからインストールしてください。

手順

1. Railsプロジェクトのディレクトリへ移動する

ターミナルを開き、cdコマンドでRailsプロジェクトのディレクトリへ移動します。

ターミナル
$ cd rails-docker

lsコマンドでディレクトリの中身を表示すると、以下のようになっています。
GemfileGemfile.lock はRailsの使用ライブラリを定義したファイルです。プロジェクトに含まれていることを確認してください。

ターミナル
$ ls
Gemfile		    Rakefile	config		lib		  storage	 vendor
Gemfile.lock	app		    config.ru	log		  test
README.md	    bin		    db		    public	  tmp

2. Dockerfileの作成

エディタを開き、Dockerfileを作成します。
以下のように記述します。

Dockerfile
FROM ruby:3.2.2
RUN apt-get update -qq && apt-get install -y \
    build-essential \
    libpq-dev \
    nodejs
WORKDIR /myapp
COPY Gemfile Gemfile.lock /myapp
RUN bundle install

3. docker-compose.ymlの作成

続けて、docker-compose.ymlファイルを作成します。
以下のように記述します。

docker-compose.yml
services:
  db:
    image: postgres:12
    # PostgreSQLの初期ユーザー名とパスワードを設定する(これが無いとエラーになる)
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
  web:
    build: .
    # docker-compose up実行時にDBを起動しブラウザにアクセスできるようにする
    command: >
      bash -c "
        bundle exec rails db:prepare &&
        bundle exec rails s -p 3000 -b '0.0.0.0'
      "
    # webからdbへ接続するためにdbと同じ値を環境変数に設定する(database.ymlに対応)
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
    # ホストのカレントディレクトリをコンテナの/myappディレクトリにマウントする
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    # dbの起動後にwebを起動する
    depends_on:
      - db

4. database.ymlの修正

データベース(PostgreSQL)との接続設定を行います。
configディレクトリ内のdatabase.ymlを以下のように書き換えます。

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
  
  # 以下はコメントアウトする
  # production:
  #   <<: *default
  #   database: myapp_production
  #   username: myapp
  #   password: <%= ENV["MYAPP_DATABASE_PASSWORD"] %>

5. アプリの起動とブラウザ表示

ファイルの設定が完了したので、以下のコマンドでアプリを起動します。

ターミナル
$ docker-compose up

docker-compose upの実行により、次の処理が自動で行われます。

  • Dockerイメージをビルドする(初回のみ)
  • db(PostgreSQL)のコンテナを作成・起動する
  • web(Rails)のコンテナを作成・起動する
  • Railsのコマンド(rails db:prepare, rails s)を実行し、アプリが起動する(ブラウザでhttp://localhost:3000にアクセスできるようになる)

起動が成功すると、ターミナルがログ出力中の状態になります。
96373445-9236-4FD1-A0FF-3EE4D77C6B7C.jpeg

ブラウザでhttp://localhost:3000にアクセスすると、アプリを表示することができました。

C23BE0F5-0DFA-40A6-85EE-E5C9A8B6E05B.jpeg

ホストとコンテナ間でファイルシステムを同期(マウント)しているため、ソースコードの変更がリアルタイムでブラウザに反映されることを確認できます。

ソースコード
4C5CEB8A-611F-4A5E-92F0-7CAC213570D5_4_5005_c.jpeg

ブラウザ(再読み込みをする)
DFDA55C8-723B-404D-AB2C-4074B7C869F2_1_201_a.jpeg

5. アプリの停止と削除

Ctrl+Cでアプリを停止することができます。
以下のコマンドを実行すると、コンテナや関連するネットワークが削除され、環境がクリーンな状態に戻ります。

ターミナル
$ docker-compose down

再度アプリを起動するにはdocker-compose upを実行します。


参考

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?