Railsチュートリアルをカスタマイズしてポートフォリオを作成する方法【Docker・Rails7・CircleCI対応】


 

こんにちは。Tomoyuki(@tomoyuki65)です。

別の記事にてRailsチュートリアルを完了したことはお伝えしましたが、次のステップとしてはRubyやRails、そしてGemのバージョンを上げたりしつつ、最新の技術も取り入れながら、Railsチュートリアルベースのアプリを作ってポートフォリオの一つとして使えたらと考えました。

そこでこの記事では、2022年7月時点で最新のRials7にアップグレードし、Railsチュートリアルベースのアプリをカスタムしていく方法をまとめておきます。

 

関連記事👇

35歳、Railsチュートリアルに挑む編【Web系エンジニア1年目】

2022年7月17日

 



目次

Railsチュートリアルをカスタマイズしてポートフォリオを作成する方法【Docker・Rails7・CircleCI対応】

Rails7からはアセット周りの仕様が色々変わっているため、まずは①Rails7のデフォルト設定でDockerによる開発環境を構築する方法と、②Rails7とBootstrapでDockerによる開発環境を構築する方法をまとめます。

※ある程度Dockerを使ったことがある人向けの内容なので、Dockerのことがよくわからない方はまずそちらを調べてみて下さい。

 

①Rails7のデフォルト設定でDockerによる開発環境を構築する方法

まず、以下のコマンドを実行し、必要なファイルを作成します。

$ mkdir ディレクトリ名
$ cd ディレクトリ名
$ touch Dockerfile
$ touch entrypoint.sh
$ touch Gemfile
$ touch Gemfile.lock
$ touch db.env
$ touch docker-compose.yml

※ディレクトリ名は任意の名前を付けて下さい(例:sample_appなど)

 

次に各ファイルの中身を記載します。

# 2022年7月時点の最新安定版のRuby
FROM ruby:3.1.2

# railsコンソール中で日本語入力するための設定
ENV LANG=C.UTF-8

# 本番環境用のRAILS_ENV設定
ENV RAILS_ENV=production
# bundlerのバージョンを固定するための設定
ENV BUNDLER_VERSION=2.3.10

# インストール可能なパッケージ一覧の更新
RUN apt-get update -qq \
    # パッケージのインストール(-yは全部yesにするオプション)
    # コンパイラに必要なパッケージ、PostgreSQLのクライアント
    # PostgreSQLの接続に必要なパッケージをインストール
    # chromium-driverはRSpecのシステムスペック用に必要
    # credentials.yml.encの編集用にvimが必要
    && apt-get install build-essential \
                       postgresql-client \
                       libpq-dev \
                       chromium-driver \
                    -y vim-gtk \
    # キャッシュを削除して容量を小さくする
    && rm -rf /var/lib/apt/lists/*

# 作業ディレクトリの指定
RUN mkdir /ディレクトリ名
WORKDIR /ディレクトリ名

# ローカルにあるGemfileとGemfile.lockを
# コンテナ内のディレクトリにコピー
COPY Gemfile /ディレクトリ名/Gemfile
COPY Gemfile.lock /ディレクトリ名/Gemfile.lock

# bundlerのバージョンを固定する
RUN gem install bundler -v $BUNDLER_VERSION
RUN bundle -v

# bunlde installを実行する
RUN bundle install --jobs=4
COPY . /ディレクトリ名

# コンテナ起動時に実行するスクリプト
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
CMD ["bundle", "exec", "puma", "-C", "config/puma.rb"]

※ディレクトリ名は任意の名前に修正して下さい。そして、RSpec用にchromium-driverもインストールしておきます。また、Rails7のデフォルト設定ではnodejs、npm、yarnなどは使わない仕様(インストール不要)になってます。そのほか、本番環境用の環境変数にRAILS_ENVを設定していますが、docker-composeを起動した場合はdocker-composeで定義した環境変数のRAILS_ENVの値が優先されます。最後に、本番環境用にCMDはpumaコマンドにしています。(rails sでもpumaは起動するが、本番環境のHerokuでpumaを使いたい場合、明示的にpumaを起動することが推薦されているため。)

 

#!/bin/bash
set -e
 
# Rails特有の問題を解決するためのコマンド
rm -f /ディレクトリ名/tmp/pids/server.pid

# production環境の場合のみJSとCSSをビルド
if [ "$RAILS_ENV" = "production" ]; then
  bundle exec rails assets:clobber
  bundle exec rails assets:precompile
fi

# サーバー実行(DockerfileのCMDをセット)
exec "$@"

※ディレクトリ名は任意の名前に修正して下さい。

 

source 'https://rubygems.org'
# 2022年7月時点の最新版Rails
gem 'rails', '7.0.3'

 

POSTGRES_USER=任意のユーザー名
POSTGRES_PASSWORD=任意のパスワード

※これはDBのPostgreSQLの環境変数になりますが、任意のユーザー名とパスワードを設定して下さい。また、このファイルは公開しないので「.gitignore」にファイル名を追加して下さい。

 

version: "3"
services:
  # DBの設定
  db:
    # コンテナ名の指定
    container_name: ディレクトリ名_db
    # 2022年7月時点の最新版PostgreSQL
    image: postgres:14.4
    # 環境変数の設定(db.envから読み込む)
    env_file:
      - ./db.env
    # データの永続化(ローカルのtmp/dbディレクトリにマウント)
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
  # アプリの設定
  web:
    # コンテナ名の指定
    container_name: ディレクトリ名_web
    # Dockerfileのあるディレクトリパスを指定
    build: .
    # 環境変数の設定(db.envから読み込む)
    env_file:
      - ./db.env
    # 開発環境のRAILS_ENVはdevelopmentを設定
    environment:
      - RAILS_ENV=development
    # コマンド実行(Rails特有の問題解決とRailsの立ち上げ)
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    # データの永続化(ローカルのカレントディレクトリにマウント)
    volumes:
      - .:/ディレクトリ名
    # ポートの指定(外部からアクセス時のポート:コンテナからアクセス時のポート)
    ports:
      - "3000:3000"
    # 標準入出力デバイスを設定(bin/devを使う場合は必須)
    tty: true
    stdin_open: true
    # 依存関係の指定(dbが起動した後に、webが起動する)
    depends_on:
      - db

※ディレクトリ名は任意の名前に修正して下さい。

 

次にRailsのアプリケーションの生成を行います。

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

※DBはPostgreSQLを使うオプションを付けてます。

 

次にconfig/database.ymlのデフォルト設定に、PostgreSQLのユーザー名とパスワードを環境変数(db.envで設定した値)から読み取るように修正します。

  ・
  ・
default: &default
  adapter: postgresql
  encoding: unicode
  # For details on connection pooling, see Rails configuration guide
  # https://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  # 以下の3行を追加
  username: <%= ENV["POSTGRES_USER"] %>
  password: <%= ENV["POSTGRES_PASSWORD"] %>
  host: db
  ・
  ・

 

次にイメージのビルドとコンテナの起動を行います。

$ docker-compose build --no-cache
$ docker-compose up -d
$ docker-compose ps

 

起動したコンテナのSTATUSが「running」になってればOKです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です