この記事ではApple Silicon(M1, M2)を搭載したMacでDockerを使用し、Ruby on Rails 7の環境を構築する方法を解説しています。
前提となる環境とツール
今回使用する環境とツールはこちらです。
- M1 Mac
- Docker Desktop
- Ruby on Rails 7.0.5
- Ruby 3.1.4
DockerによるRails環境構築
まずはローカルにプロジェクトのディレクトリを作成します。
sh
mkdir myapp
cd myapp
以下のコマンドを実行して、必要なファイルを作成します
sh
touch Gemfile Gemfile.lock Dockerfile docker-compose.yml
Dockerfile
とdocker-compose.yml
を作成します。
わかりやすいようにDocker上にも同じ名前のディレクトリを作成しています。
Dockerfile
FROM ruby:3.1.4
ENV APP_ROOT /myapp
ENV LANG C.UTF-8
ENV GEM_HOME="/usr/local/bundle"
ENV PATH $GEM_HOME/bin:$GEM_HOME/gems/bin:$PATH
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
WORKDIR $APP_ROOT
ADD ./Gemfile $APP_ROOT/Gemfile
ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock
RUN bundle install
ADD . $APP_ROOT
docker-compose.yml
ではdocker-composeのバージョンやデータベース設定を記載しています。
今回は、entrypoint.sh
を利用せずにdocker-compose.yml
のcommand
の中に直接起動時のコマンドを書いています。
一時PIDファイルを削除してRailsを起動するコマンドになります。
docker-compose.yml
version: '3'
services:
db:
image: mysql:8.0
command: --default-authentication-plugin=mysql_native_password
volumes:
- ./mysql_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: realworld_development
MYSQL_USER: root
MYSQL_PASSWORD: root
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/myapp
ports:
- '3000:3000'
depends_on:
- db
Gemfile
source 'https://rubygems.org'
ruby '3.1.4'
gem 'rails', '7.0.5'
Gemfile.lock
は空のままで大丈夫です。
Railsアプリの立ち上げ
準備ができたのでRailsアプリを立ち上げていきます。
まず、Dockerイメージをビルドし、Dockerコンテナを作成するために次のコマンドを実行します。
sh
docker-compose build
イメージが正常にビルドされたら、Railsアプリケーションを新しく作成します。
*apiモードで起動しない場合は--api
を削除してください
sh
docker-compose run --rm web rails new . --force --database=mysql --api
Railsアプリの config/database.yml
ファイルを修正します。
yaml
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: user
password: password
host: db
development:
<<: *default
database: db
これでRailsアプリが作成されたので以下のコマンドで起動します。
sh
docker-compose up
ブラウザでlocalhost:3000
にアクセスし、Railsのデフォルトページが表示されることを確認します。
以上がDockerでRuby on Rails 7の開発環境構築する方法になります。