前回は、「Ruby on Rails 5」のDocker環境を構築したのですが、「Ruby on Rails 6」も最近使われるようになったので、手順を記載しておきます。
環境構築と事前準備
早速、環境を構築していきます。
「Docker Desktop」 ダウンロード
最初に「Docker Desktop for Apple Silicon」をダウンロード、インストールします。
Intel版とMac M1 版があるため、注意です。
https://hub.docker.com/editions/community/docker-ce-desktop-mac
「Rosetta 2」インストール
ターミナルで実行します。
softwareupdate --install-rosetta
実際にやってみる
「作業ディレクトリ」の準備
ディレクトリ名は制作する「アプリ名(ここではnllllll_appになっています)」にしておく方が分かりやすいです。
「mkdir」でディレクトリを作成して、「cd」でディレクトリに移動しています。
mkdir app
cd app
ディレクトリに移動したら、コマンドを実行してファイルをまとめて作成しちゃいます。
touch {Dockerfile,Gemfile,Gemfile.lock,entrypoint.sh,docker-compose.yml}
以下の5つのファイルが出来上がるのを確認します。
- Dockerfile
- Gemfile
- Gemfile.lock
- entrypoint.sh
- docker-compose.yml
そして、各ファイルを編集してペーストしていきます。
(一部編集が必要な部分があります。気をつけてください。)
FROM ruby:3.0.2
RUN wget --quiet -O - /tmp/pubkey.gpg https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
echo 'deb http://dl.yarnpkg.com/debian/ stable main' > /etc/apt/sources.list.d/yarn.list
RUN set -x && apt-get update -y -qq && apt-get install -yq nodejs yarn
# 「app」と書かれている部分はディレクトリ名に応じて変更します。
RUN mkdir /app
WORKDIR /app
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
RUN bundle install
COPY . /app
source 'https://rubygems.org'
gem 'rails', '6.1.4'
#!/bin/bash
set -e
# 「app」と書かれている部分はディレクトリ名に応じて変更します。
rm -f /app/tmp/pids/server.pid
exec "$@"
version: '3'
services:
app:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
# 「app」と書かれている部分はディレクトリ名に応じて変更します。
- .:/app
ports:
- 3000:3000
depends_on:
- db
tty: true
stdin_open: true
db:
platform: linux/x86_64
image: mysql:5.7
volumes:
- db-volume:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password
volumes:
db-volume:
プロジェクトの立ち上げ
下準備が終了したので、アプリをビルドしてきます。
「Docker版」の rails new コマンドをターミナル上で実行していきます。
# 「app」の部分はサービス名に応じて変更します。基本的にはappでOKです!
docker-compose run app rails new . --force --database=mysql
コマンドを実行すると何やらインストールが始hoまりました。
完了するのを待ちます。
インストールが完了したら、「docker-compose.yml」を開き、
「db:」>「environment:」>「MYSQL_ROOT_PASSWORD:」 の値を確認。
(デフォルトは「password」になっているはずです。変更しておきたい場合はビルドする前に変更しておきます。)
・・・
db:
platform: linux/x86_64
image: mysql:5.7
volumes:
- db-volume:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password #ここの値を確認!!!!!!!
volumes:
db-volume:
そして、「config/database.yml」の一部を修正します。
1. 「password」の項目に先ほど「docker-compose.yml」で確認した「MYSQL_ROOT_PASSWORD:」の値を入力します。
2. 「host: localhost」の項目を「host: db」に変更します。
変更前はこんな感じ。
・・・
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password:
host: localhost
development:
<<: *default
database: app_development
・・・
変更後がこちら。
・・・
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: password #ここを入力してあげる!
host: db #ここを変更してあげる!
development:
<<: *default
database: app_development
・・・
処理が終わったら、「Gemfile」が更新されているので再度ビルドをかけます。
docker-compose build
これで構築完了です。
アプリの起動の確認とデータベースの作成
一度、アプリケーションを立ち上げて動作することをチェックします。
アプリを立ち上げるときは、
docker-compose up
逆にアプリを止めたい時は、「Ctrl」+「C」もしくは
docker-compose down
で「起動」と「停止」ができます。
起動と停止が確認できれば、最後に「データベース」を作成していきます。
以下のコマンドを実行。
docker-compose run app rake db:create
最終確認
コマンドが正常に完了したのを確認したら、再度アプリを「起動」します。
docker-compose up
「localhost:3000」にアクセスして、
「Yay! You’re on Rails!」のメイン画面が表示されるのをチェックします。
おわり
以上で、「M1チップ搭載MacでDockerを使ったRuby on Railsの開発環境を作る」作業が完了です。
今まで、ローカルの「Vagrant」環境で行っていましたが、これを機に「Docker」を使っていきたいと思います。
注意点としては、「ディレクトリ名(アプリ名)」に応じて、記述を変更しなければいけない部分がいくつかあるので、
そこを間違えなければ30分ほどで完了できるのでは無いかなと感じました。