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?

Rails 8の開発環境をDocker化してみた

0
Posted at

はじめに

Railsアプリを開発していると、

  • Rubyのバージョンが違う
  • PostgreSQLの設定が違う
  • 開発環境を再構築したい

といった問題に遭遇することがあります。

今回、個人開発アプリ「TaskLink」の開発環境をDocker化したので、その手順と学んだことをまとめます。

Docker化した理由

Docker導入前はローカル環境で直接Railsを実行していました。

しかし、

  • Rubyのバージョン管理
  • PostgreSQLのセットアップ
  • 環境差異

が気になっていました。

Dockerを利用することで、

「誰が起動しても同じ環境になる」

というメリットがあります。

開発環境

今回の構成です。

Docker Compose
├── web (Rails 8)
└── db (PostgreSQL 16)

使用技術

  • Ruby 3.3
  • Rails 8
  • PostgreSQL 16
  • Docker
  • Docker Compose

ディレクトリ構成

tasklink/
├── Dockerfile
├── docker-compose.yml
├── Gemfile
├── Gemfile.lock
└── app/

Dockerfile

Railsアプリ用コンテナです。

FROM ruby:3.3

WORKDIR /app

COPY Gemfile Gemfile.lock ./

RUN bundle install

COPY . .

CMD ["bin/dev"]

docker-compose.yml

RailsとPostgreSQLを起動します。

services:
  web:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db

  db:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: password

コンテナ起動

ビルド。

docker compose build

起動。

docker compose up

ブラウザでアクセス。

http://localhost:3000

Railsアプリが起動しました。

DB作成

コンテナ内で実行します。

docker compose run web rails db:create
docker compose run web rails db:migrate

Docker化して良かったこと

1. 環境差異がなくなった

Dockerイメージに依存関係をまとめられるため、

RubyやPostgreSQLのバージョン差異を気にしなくて済むようになりました。

2. 再構築が簡単

コンテナを削除しても、

docker compose build
docker compose up

だけで復旧できます。

3. 本番環境を意識できる

本番環境では複数のサービスが連携して動作します。

Dockerを利用することで、

  • Rails
  • PostgreSQL

を分離して管理する考え方を学ぶことができました。

ハマったポイント

Gemが反映されない

Gemfileを変更したのに反映されないことがありました。

原因はイメージを再ビルドしていなかったことです。

以下で解決しました。

docker compose build

DB接続エラー

PostgreSQLコンテナ名とdatabase.ymlの設定が一致していないと接続できません。

Docker Composeのサービス名と合わせる必要があります。

db
host: db

学んだこと

Docker導入によって、

  • コンテナの考え方
  • RailsとDBの分離
  • 環境構築の再現性

を学ぶことができました。

また、今後チーム開発を行う際にもDockerの知識は役立つと感じています。

おわりに

Rails学習中はローカル環境で開発することが多いですが、Dockerを導入することで環境構築の再現性が大きく向上しました。

個人開発でもDockerを利用することで、実務に近い構成を経験できるのでおすすめです。

現在開発中のTaskLinkでは、

  • Docker
  • GitHub Actions
  • AWS EC2
  • Nginx
  • Puma

を利用した構成で運用しています。

今後はさらにCI/CDや監視周りについても学習していきたいと思います。

GitHub
https://github.com/katsu-ya/tasklink

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?