😊

Railsの開発環境を作成するメモ

2022/03/24に公開

急遽Railsの開発環境を作る必要があり、最近の構築方法を探ってたところクジラに乗った Ruby: Evil Martians 流 Docker+Ruby/Rails 開発環境構築(翻訳)| TechRacho by BPS 株式会社という記事を見つけた。サラッと読んでみたところ非常に良さそうだったので自分用に最小限のリポジトリへとDocker周りを切り出し、その他再利用できるように作成手順を自分用にまとめておく。内容としてはほぼ元記事。

今後Railsで開発する時はこれをベースに必要なもの/不要なものを Dockerfile や docker-compose から足し引きするだけになりそう。Rails7系からはWebpackerが不要になると思うのでその辺りは都度調整が必要かも。

Clone

とりあえずはDockerfile等の入ったリポジトリをcloneしておく。

sh
git clone git@github.com:YuheiNakasaka/docker-rails-basis.git
cd docker-rails-basis

デフォルトの構成

この環境では下記の構成がデフォルトで作成される。

  • PostgreSQL + Redis
  • Rails + Webpacker + sidekiq

基本方針

この環境はdocker-compose upは使わずにdocker-compose up railsなどと具体的に指定して実行する。bundle exec などのコマンドは runner コンテナ内で行う想定。

開発環境の立ち上げ

docker-compose.ymlの Ruby のバージョンを変更しておく。https://hub.docker.com/_/rubyにある-slim-busterの tag を参考に。

docker-compose.yml
args:
  RUBY_VERSION: '2.6.3'

runner を立ち上げる。

docker-compose run --rm runner

これで runner 環境にログイン。以下 bundle コマンドの実行は runner 内のシェルで行うものとする。

Rails アプリの作成(初回のみ)

version は適宜変更する。

Gemfile
source 'https://rubygems.org'
gem 'rails', '~> 6.1.4'
sh
bundle install
bundle exec rails new . --force --no-deps --database=postgresql --webpack=typescript
rails db:create

Rails アプリの起動

sh
docker-compose up rails

http://0.0.0.0:3000/

gem や db の作成は cache されているので 2 回目以降はいきなりこのコマンドを叩くだけでアプリが立ち上がる。

削除

sh
docker-compose down

以下は任意の作業

JS ファイルの置き場所

app/javascript/packs配下にファイルを置くとコンパイルのオーバーヘッドが大きくなり時間がかかるのでファイルは基本的にapp/javascript/srcに配置する。

sh
mkdir app/javascript/src

Slim 対応

Gemfile
gem 'slim-rails' # 追加
sh
bundle install

app/views/layouts配下のファイルを slim に変更

application.html.slim
doctype html
 html
   head
     title
       | Myapp
     meta[name="viewport" content="width=device-width,initial-scale=1"]
     = csrf_meta_tags
     = csp_meta_tag
     = stylesheet_pack_tag 'application', media: 'all', 'data-turbolinks-track': 'reload'
     = javascript_pack_tag 'application', 'data-turbolinks-track': 'reload'
   body
     = yield
mailer.html
doctype html
 html
   head
     meta[http-equiv="Content-Type" content="text/html; charset=utf-8"]
     style
       |  /* Email styles need to be inline */
   body
     = yield
mailer.text
= yield

リンク

Discussion