rails7 で node.js への依存が減ったので環境構築を見直した


概要

rails7 からデフォルトでは node.js へ依存しなくなったので docker での環境構築を見直してみました。

なお、旧版の環境構築はこちら。

rails のプロジェクトを作成する

Dockerfile

前述の通りデフォルトでは node.js へ依存しなくなったので削除しました。

compose.yaml

compose.yaml はこんな感じです。

ちなみに docker-compose の v2 から docker-compose.yml よりも compose.yaml というファイルが優先されるそうです。

compose.yaml

services:
  rails:
    image: ruby
    command: sh -c "rm -f tmp/pids/server.pid && ./bin/rails s"
    depends_on:
      - postgres
    environment:
      BINDING: 0.0.0.0
      DATABASE_URL: postgres://postgres@postgres
      LANG: C.UTF-8
    ports:
      - "3000:3000"
    tty: true
    volumes:
      - .:/workspace
      - gem-data:/usr/local/bundle
    working_dir: /workspace
  postgres:
    image: postgres:alpine
    environment:
      POSTGRES_HOST_AUTH_METHOD: trust
    ports:
      - "5432:5432"
    volumes:
      - pg-data:/var/lib/postgresql/data

volumes:
  gem-data:
  pg-data:

webpacker はデフォルトではなくなったので設定を削除しました。

また、環境変数の BINDING 設定するようにしました。こうすると Procfile.dev が作成される場合でも command を変更するだけで良いので便利です。

プロジェクト作成

プロジェクトを作成します。

旧版では template を使って色々やっていましたが今回は割愛します。

rails をインストールします。

docker compose run rails gem i rails

rails new を実行します。

docker compose run rails rails new . -d postgresql

database を作成します。

docker compose run rails rails db:create
docker compose run -e RAILS_ENV=test rails rails db:create

development と test の database を作成するので 2 回コマンドを実行しています。

環境変数で database の設定する場合は compose.yaml で完結するのがメリットですが database の作成の時だけはちょっと面倒です。

rails server を起動してみます。

docker compose up

下記の url にアクセスして server が起動しているか確認します。

http://localhost:3000/

感想

デフォルトで node.js に依存しなくなったので環境構築が楽になりました。

また sassc-rails もデフォルトから外れたようで、インストールが速くなったのも地味にうれしいです。