💎

Ruby on rails チュートリアル Webテキスト(第7版)向けのdockerfile

2024/04/10に公開1

こんにちは。プログラミング初心者らしい話をします。
さいきん色々あって、RubyとRuby on Railsを書く機会が多くなったのですが、個人的には言語とフレームワークの両方が初めてで、本当に大混乱をしているのでRuby on rails チュートリアル( railstutorial.jp )をすることにしました。

Ruby on Railsは優秀なフレームワークです。個人的にこれを新規開発に使いたいとは一切思わないのですが、X(Twitter)やGitHubなどの巨大企業がRoRをベースに事業を伸ばしていたりで評価の高いフレームワークとなっています。
しかしやってみるとかなり暗黙的かつ動的なフレームワークとなっており、通常のフレームワークより学習が難しいです。
その中で難しくしている要素として、railstutorial.jpではDockerの記述をせずにdevcontainerを利用している点です。
チュートリアルなんだから最初からDockerfileぐらい書いたほうがよい気がするのですが(サービスとして出すときに結局書くことになるし)、ないので、用意しましょう。

Dockerfile

FROM ruby:3.2.2
ENV APP /app
ENV LANG C.UTF-8
ENV TZ Asia/Tokyo
RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash -
RUN apt update -qq \
 && apt install -y build-essential mariadb-client nodejs \
 && npm install --global yarn
RUN yarn add @fortawesome/fontawesome-free @fortawesome/fontawesome-svg-core @fortawesome/free-brands-svg-icons @fortawesome/free-regular-svg-icons @fortawesome/free-solid-svg-icons
WORKDIR $APP
COPY Gemfile $APP/Gemfile
COPY Gemfile.lock $APP/Gemfile.lock
RUN bundle install
ADD . $APP

compose.yml

services:
  rails:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - type: bind
        source: .
        target: /app
    ports:
      - "3000:3000"

起動するにはdocker compose up -dを実行しましょう。あとはチュートリアルを進めるだけです。

以下初心者向けのtips

devcontainerでないとホットリロードがされないと思われるかもしれませんが、compose.ymlのvolumesで/app以下をbind(コピーではなくreference的なものを取ってきている)ので問題ありません。ただし/app以下のファイル以外を編集したときは変更が反映されないので再度docker composeする必要があります。

DB関連の設定がありませんが、railstutorial.jpのDBはsqliteを使っているので問題ありません。mysqlやpostgresなどを代わりに使用したい場合は自分でcompose.ymlに追記する必要があります。

このDockerfileとcompose.ymlはテストなどを実行するにはまだ不十分です。ぜひ書き足してみてください。

Discussion

yasulabyasulab

Dockerfile の記事ありがとうございます!Railsチュートリアルの読者の方々と対話していると、多くは(ただでさえ学ぶことが多く複雑なWeb開発の知識に加えて)Docker でさらに混乱したり、Docker をそもそも動かせないスペックのマシンだったりするんですよね... 💦

一方で Dockerfile をご存知だったり、Docker を動かせる程度の高いスペックのマシンをお持ちの方は、おおむね自分で自分の目の前にある問題を解決できるレベルの方々が多いので、Railsチュートリアルでは GitHub Codespaces (devcontainer) を使ったクラウド IDE をデフォルトにしています!

とはいえ Dockerfile の記事もあればあるほど嬉しいので、こういった記事もとても助かります!ありがとうございます...!! (>人< )✨