【Ruby on Rails】M1チップ搭載のMacで「Docker」を使った「Ruby on Rails 6」の開発環境を作る

前回は、「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つのファイルが出来上がるのを確認します。

  1. Dockerfile
  2. Gemfile
  3. Gemfile.lock
  4. entrypoint.sh
  5. 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!」のメイン画面が表示されるのをチェックします。

localhost:3000

おわり

以上で、「M1チップ搭載MacでDockerを使ったRuby on Railsの開発環境を作る」作業が完了です。
今まで、ローカルの「Vagrant」環境で行っていましたが、これを機に「Docker」を使っていきたいと思います。

注意点としては、「ディレクトリ名(アプリ名)」に応じて、記述を変更しなければいけない部分がいくつかあるので、
そこを間違えなければ30分ほどで完了できるのでは無いかなと感じました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次