DockerでRails開発環境を一撃構築!初心者でも簡単にできるdocker-composeの使い方
生徒
「Railsの開発環境を作ろうとしたら、データベースとかRedisとか必要って言われて…パソコンにいろいろ入れるのが大変で困ってます。」
先生
「そんなときはDockerが便利ですよ。Dockerを使えば、パソコンに直接インストールしなくても、RailsやDBなどをまとめて使えるんです。」
生徒
「Dockerってなんだか難しそう…初めてでも使えるんですか?」
先生
「もちろんです!docker-composeを使えば、RailsもデータベースもRedisも一発で準備できますよ。順番に見ていきましょう!」
1. Dockerとdocker-composeとは?
Docker(ドッカー)とは、アプリを動かすための「小さな仮想パソコン」のようなものです。本当のパソコンに直接ソフトを入れるのではなく、Dockerの中に入れておくイメージです。
そしてdocker-compose(ドッカーコンポーズ)は、複数のDocker環境を一気に起動したり設定できる便利なツールです。
Railsアプリを動かすには、通常データベース(PostgreSQLやMySQL)やRedisなども必要ですが、docker-composeを使えばそれらをまとめて用意できます。
2. 必要なファイルを用意しよう(Dockerfileとdocker-compose.yml)
まずはDockerにRailsの環境を作るための「設計図」を書きます。これがDockerfileです。
FROM ruby:3.2
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client redis
WORKDIR /myapp
COPY Gemfile* ./
RUN bundle install
COPY . .
CMD ["rails", "server", "-b", "0.0.0.0"]
次に、docker-composeで複数のサービス(Rails、DB、Redis)をまとめて起動するためのファイルを作ります。
これがdocker-compose.ymlです。
version: '3'
services:
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- ".:/myapp"
ports:
- "3000:3000"
depends_on:
- db
- redis
db:
image: postgres
environment:
POSTGRES_PASSWORD: password
redis:
image: redis
このように書くことで、Rails・PostgreSQL・Redisが同時に立ち上がる環境が整います。
3. docker-composeでRails開発環境を起動しよう
ファイルを作ったら、以下のコマンドを実行します。
docker-compose up --build
このコマンドを実行することで、初めての人でも一発で以下の環境が起動します。
- Railsアプリ
- PostgreSQL(データベース)
- Redis(キャッシュやキュー管理)
もしRailsアプリがまだ生成されていない場合は、別途以下のコマンドを使って作成できます。
docker-compose run web rails new . --force --database=postgresql --skip-bundle
4. データベース設定のポイント
Railsアプリを作成したあとは、データベースの設定ファイルを少し修正する必要があります。
config/database.ymlファイルを開き、以下のように設定します。
default: &default
adapter: postgresql
encoding: unicode
host: db
username: postgres
password: password
ここで大事なのは、host: dbと書くことです。これはdocker-composeの中で指定したサービス名(db)と一致させる必要があります。
5. Redisって何?Railsで何に使うの?
Redis(レディス)は、情報を一時的に保存しておくための仕組みです。とても速くて軽いため、ログイン情報や通知、非同期処理などに使われます。
Railsでは、背景で何かを処理したり、キャッシュを使うようなときに活躍します。
たとえば、Sidekiq(サイドキック)というGemを使うときは、Redisが必須になります。
docker-composeにRedisを加えておけば、あとで何か必要になったときも安心です。
6. docker-composeのメリット
docker-composeを使うと、次のようなメリットがあります。
- Rails・DB・Redisなどを一発で起動できる
- 設定ファイルを使って環境を再現しやすい
- 自分のパソコンを汚さずに開発できる
- チームで同じ環境を使えるようになる
初心者でも、docker-compose.ymlを用意するだけでRails環境が簡単に構築できるのは、とても大きな魅力です。
まとめ
Dockerを使ったRails開発環境の構築は、はじめて学ぶ人にとって複雑に感じられる部分もありますが、docker-composeを活用することで、Rails、データベース、Redisといった複数のサービスを一括で起動できる便利さを実感できるようになります。とくにRails開発では、環境構築が整っていないとアプリケーションの動作確認やデータ操作がスムーズに進まないため、安定した環境を素早く作り出せるDockerの存在は非常に心強いものです。RailsとPostgreSQLやRedisを連携させながら確実に動かすためには、Dockerfileに必要なライブラリを追加し、docker-compose.ymlで各サービスの設定をまとめて記述するという仕組みがとても効率的です。こうした流れを身につけると、開発環境の再現性が高まり、プロジェクトの規模が大きくなっても柔軟に対応できる力が育ちます。
また、Dockerでは「コンテナ」という単位でRailsやDBを実行するため、自分のパソコンの環境に影響を与えず、必要なときに必要な構成でサービスを起動できるのが大きな利点です。docker-compose.ymlでサービス名を指定し、Rails側のdatabase.ymlと連携させることで、アプリケーション全体がひとつのまとまりとして動作します。とくにhost: dbのようにサービス名を一致させる部分は、Docker特有のポイントであり、理解しておくと環境構築のトラブルを減らせます。Redisもdocker-composeに組み込んでおくことで、後からSidekiqなどの非同期処理を導入するときにスムーズな連携ができ、拡張性の高い開発環境が準備できます。
さらに、Dockerfileを使ってRails環境をひとつの設計図として保存できるため、新しいメンバーが加わったときや別のパソコンで作業したい時でも、同じ設定を再現できるのが大きな強みです。開発チーム全体で同じ環境を共有できることで、Railsアプリケーションの動作差異が生まれにくくなり、開発効率の向上にもつながります。以下に、今回の学習内容を踏まえたサンプルコードを改めて掲載します。Rails開発環境の全体像を確認しながら、自分のプロジェクトにも応用できるように振り返ってみてください。
サンプルDockerfileとdocker-compose.yml
FROM ruby:3.2
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client redis
WORKDIR /myapp
COPY Gemfile* ./
RUN bundle install
COPY . .
CMD ["rails", "server", "-b", "0.0.0.0"]
version: '3'
services:
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- ".:/myapp"
ports:
- "3000:3000"
depends_on:
- db
- redis
db:
image: postgres
environment:
POSTGRES_PASSWORD: password
redis:
image: redis
Railsアプリにデータベースを接続するためのdatabase.ymlもDocker環境では非常に重要で、設定を誤るとアプリが起動しなかったり接続できなかったりするため、以下のようにDockerのサービス名と揃えて書くことが必要です。
default: &default
adapter: postgresql
encoding: unicode
host: db
username: postgres
password: password
このように、Rails開発環境をDockerとdocker-composeで整える方法を理解すると、環境構築の不安が減り、アプリ本体の開発に集中できるようになります。開発を続けていくなかで、さまざまなGemやサービスを追加したい場面が出てきますが、そのたびにDockerfileやdocker-compose.ymlを更新するだけで柔軟に対応できるため、学べば学ぶほど便利さを実感できるでしょう。今後のRails開発に必要不可欠な基礎として、今回の内容をしっかり身につけておくことが大切です。
生徒「DockerでRailsを動かす仕組みがだいぶわかってきました!docker-composeで全部まとめて起動できるのが本当に便利ですね。」
先生「そうでしょう。特にRailsはデータベースやRedisと一緒に動くことが多いので、その環境を一括で準備できるのはとても大きなメリットなんです。」
生徒「database.ymlのhostをサービス名にする理由もやっと理解できました。Docker同士が名前で通信してるんですね!」
先生「そのとおりです。Dockerのネットワークはサービス名で結びつく仕組みなので、ここを押さえておけば他のプロジェクトでも同じように応用できますよ。」
生徒「Redisを追加しておくと、あとでSidekiqも使いやすくなるのも便利ですね。必要になる前から準備しておけるなんて助かります!」
先生「良い視点ですね。開発環境が整っていると、次にやりたいことが増えてもスムーズに進められます。Dockerはそのための強力な支えになるんですよ。」
生徒「これからRailsアプリを作るときは、まずDocker環境を整えるところから始めてみます!」
先生「その調子です。環境構築を理解しておくと、開発の幅がぐっと広がりますからね。」