こんにちは、最近Ruby on Railsを勉強し始めているYamaC / ヤマシー です。
今回は、Dockerを使って、Ruby on Rails 7の開発環境を構築する方法について紹介します。
Webシステム開発については超初心者ですが、とりあえずこの方法で実施すれば、ローカルホストを立ち上げるところまではいけました。
この記事の前提条件
著者はMacBook Air(M1)を使用しています。
また、以下のソフトがインストールされていることが前提です。
Docker Desktop for Macのインストール
- Docker Desktopのダウンロードページにアクセスし、「Mac用のダウンロード マック – アップルチップ」を選択してダウンロードします。
- ダウンロードした
Docker.dmg
ファイルを開き、指示に従ってインストールします。 - インストール後、Docker Desktopを起動し、Dockerが正しく動作していることを確認します。
フォルダとファイルを作成する
どこでもいいので、プロジェクトのフォルダ、その中にファイルを作成します。強い人だとコマンドラインでパッと作るとは思いますが、よくわからないのでFinderを開いていい感じの場所に作っておきましょう。
my_rails_app/
├── Dockerfile
├── docker-compose.yml
├── Gemfile.lock
└── Gemfile
必要なファイルたちを作成する
作ったファイルたちに以下の内容を書き込みましょう。
Dockerfileの作成
my_rails_appディレクトリにあるDockerfileを編集し、以下の内容を記述します。
FROM ruby:3.1
ARG RUBYGEMS_VERSION=3.3.20
RUN mkdir /rails_practice
WORKDIR /rails_practice
COPY Gemfile /rails_practice/Gemfile
COPY Gemfile.lock /rails_practice/Gemfile.lock
RUN bundle install
COPY . /rails_practice
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
docker-compose.ymlの作成
同じくmy_rails_appディレクトリにあるdocker-compose.ymlを編集し、以下の内容を記述します。
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: password
ports:
- '3306:3306'
command: --default-authentication-plugin=mysql_native_password
volumes:
- mysql-data:/var/lib/mysql
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/rails_practice
ports:
- "3000:3000"
depends_on:
- db
stdin_open: true
tty: true
volumes:
mysql-data:
driver: local
Gemfile と Gemfile.lockの作成
Gemfileに以下の内容を記述します。(Gemfile .lockには何も書かなくて良いです)
source 'https://rubygems.org'
gem 'rails', '~>7.0.4'
Railsアプリの初期設定・作成
以下のコマンドを実行して、新しいRailsアプリケーションを作成します。
docker-compose run web rails new . --force --no-deps --database=mysql
docker-compose build
ターミナルでこれを実行すると、なんかファイルが急に生成されまくります。びっくりすると思いますが、これでRailsアプリの作成が完了してます。
データベースの設定と作成
config/database.ymlを以下のように修正します。
(元々色々書いてあると思いますが、全部消してOKです)
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: <%= ENV.fetch("MYSQL_USERNAME", "root") %>
password: <%= ENV.fetch("MYSQL_PASSWORD", "password") %>
host: <%= ENV.fetch("MYSQL_HOST", "db") %>
development:
<<: *default
database: rails_practice_development
これを修正したら以下のコマンドを実行します。
docker-compose run web rake db:create
Docker Compose でアプリケーションを起動
以下のコマンドを実行して、アプリケーションを起動します。
docker-compose up
色々調べると これに -dをつけて起動する記事もたくさん出てきますが、ログは見れた方がいいので、このまま-dは付けずに実行してください。
あとはこれを実行したら、http://localhost:3000/ に飛んでみましょう。
こんな感じの日の丸みたいなRAILSが見れたら成功です!
まとめと今作ってるもの
今回は、MacでDockerを使用してRuby on Rails 7 + MySQLの開発環境を構築する方法を紹介しました。初心者でもセットアップできた手順を紹介したので、ぜひ実践してみてください。
最近はRuby on Railsで家計簿を管理するアプリを作ってみてます。
ちゃんとWEBアプリが動くようになるまで、どう進めていったかも共有したいです。