🚊

コピペでrails開発環境の構築をする

に公開

構築手順

1.プロジェクトディレクトリを作成する

mkdir minimum-rails-kit
cd minimum-rails-kit

2.GemfileとGemfile.lockを作成する

touch Gemfile Gemfile.lock
vi Gemfile
Gemfile
source 'https://rubygems.org'
gem 'rails', '~>7.0.0'

3.Dockerfileを作成する

Dockerfile
FROM ruby:3.1

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

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

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

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

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

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

4.docker-compose.ymlを作成する

docker-compose.yml
version: '3'
services:
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: password
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
  web:
    build: .
    command: bundle exec rails server -b 0.0.0.0
    volumes:
      - {STEP1で作成したプロジェクトディレクトリの絶対パス}/minimum-rails-kit:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

※ちなみにwebのvolumesでローカルのディレクトリをコンテナに反映させているので実質ホットリロード
※ファイルは絶対パスで書いておこう(環境変数を使ってシンプルに書いておくと◯)

5.新しいRailsアプリケーションを生成

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

※正しくrails newされないとデータベースの設定を更新できない

6.データベース設定を更新

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

7.Dockerイメージをビルドする

docker-compose build

※rails newした後でイメージをビルドすることで、最新のGemfileに基づいて依存関係をクリアできる

8.データベースを作成

docker-compose run web rake db:create

9.アプリケーション起動

docker-compose up

10.アプリケーションにアクセス

http://localhost:3000

まとめ

今回は最小限の開発環境のため、rails特有の依存関係のもつれみたいなものは発生しません。
しかし、こちらをベースに環境を何度もスクラップ&ビルドしてみてください。
Dockerはこの気軽さが開発者のストレスを少しばかりか軽減していますよね〜

GitHubで編集を提案

Discussion