rails new 時にDockerfileが追加されるようになる

rails commit log流し読み(2022/12/20) - なるようになるブログ を見ていたら、
なんとrails new 時にDockerfileが追加されるようになっていました。

rails newで新規アプリケーション作成時にDocker関連のファイル
(Dockerfile、.dockerignore、bin/docker-entrypoint)を生成するよう修正しています。
なお、このDockerfileはproduction向けで、development向けの設定にはなっていません。

Dockerfile.ttを眺めてみる

Dockerfile.tt

nodejs

nodejsはnodesourceを利用してinstallしているようです。

<% if using_node? -%>
# Install JavaScript dependencies and libvips for Active Storage
ARG NODE_MAJOR_VERSION=19
RUN curl -sL https://deb.nodesource.com/setup_$NODE_MAJOR_VERSION.x | bash -
RUN apt-get update -qq && \
    apt-get install -y build-essential libvips nodejs && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* /usr/share/doc /usr/share/man && \
    npm install -g yarn

余談ですが、productionならminor versionまで指定したいので、最近は公式のbinaryを使うようにしています。

RUN curl --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" > /tmp/node.tar.xz && \
  tar -xJf /tmp/node.tar.xz -C /usr/local --strip-components=1 && \
  rm /tmp/node.tar.xz

bootsnap

<% if depend_on_bootsnap? -%>
# Precompile bootsnap code for faster boot times
RUN bundle exec bootsnap precompile --gemfile app/ lib/

これ知らなかったのですが、 Shopify/bootsnap に載ってました。
開発時には自動で使われてるのは知っていたのですが、poductionでも使って良いのか気になります。 Rails Guide辺りに載ってると使いやすいのですが、、、ちょっと躊躇してしまいます。 gemのreadmeに記載されてますが、productionでも使って良さそうです。

SECRET_KEY_BASE_DUMMY

# Precompiling assets for production without requiring secret RAILS_MASTER_KEY
RUN SECRET_KEY_BASE_DUMMY=1 bundle exec rails assets:precompile

こちらも新機能ですが、secret_key_base 不要で precompileできるようになってるようです。

おまけ:mainブランチでrails new してみる

実際に最新のmainブランチを使ってrails newする方法です。

git clone https://github.com/rails/rails.git
cd rails/
bundle install
cd ../
./rails/railties/exe/rails new edge_rails --edge --dev

これ知りませんでした。便利。

参考)Rails 5, master branch, use generator - Stack Overflow