LoginSignup
3
5

More than 1 year has passed since last update.

Ruby on Rails7.0.3 × MySQL8.0 のDocker環境構築

Posted at

おはよう。:relaxed:
色々あってRuby on Railsに入門するので、環境づくりをしたよ。

Ruby on Railsって何? :thinking:

Webアプリケーション開発フレームワーク。
特徴的だと思ったのは「最善の開発方法は1つ」という信念のもと設計されているところで、手法を学び、手法に則ることで生産性向上につながるとのこと。

哲学2つ
・Don't Repeat Yourself: DRY

  • 同じ意味や機能を持つ情報を複数に重複しておくことは避けましょうの考え方。
    ・Convention Over Configuration
  • 規約>設定:Rails側で既にWebアプリケーションの「最善の方法」を明確にし、各種設定にもデフォルト値を設定している。アプリケーションが迷走することを避けるために、規約の遵守を推奨しているらしい。

今回用意する環境

今回はRailsの現時点最新バージョン7を使用したいので、Rubyも公式推奨の3.0で設定するよ。
Ruby: 3.1
*https://hub.docker.com/_/ruby
Rails: 7.0.3
MySQL: 8.0

環境構築手順

1.必要なファイルを用意

railsの環境を作るのに日等ようなファイルは下記の四つ。

1.Dockerfile・・Dockerイメージを作成するための手順ファイル。
2.docker-compose.yml・・複数コンテナを定義して実行するため設定ファイル。
+
(Rails独自のファイル)
3.Gemfile ・・ 使用するgem一覧が書かれたファイル。
4.Gemfile.lock・・Gemfileでインストールしたgemのバージョンなどを記載するファイル。編集はしない。

gemとは、gem形式で作られたRubyの外部パッケージ(ライブラリ)のこと。
Ruby本体には標準ライブラリとしてRubyGemsが入っていて、これを使うことでgemのインストール等々ができる。
RubyGemsはpythonのpip的なやつだと理解:relaxed:
https://pikawaka.com/ruby/how-gem-works

Dockerfile

Dockerfile
FROM ruby:3.1

WORKDIR /rails_mysql_pj

COPY Gemfile /rails_mysql_pj/Gemfile
COPY Gemfile.lock /rails_mysql_pj/Gemfile.lock

RUN bundle lock --add-platform ruby
RUN bundle lock --add-platform x86_64-linux

RUN bundle install
RUN bundle update

COPY . /rails_mysql_pj

docker-compose.yml

docker-compose.yml
version: '3.9'
services:
  web:
    build: .
    command: bash -c "rm -f rails_mysql_pj/tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - '.:/rails_mysql_pj'
    ports:
      - '3000:3000'
    depends_on:
      - db
    tty: true
    stdin_open: true
    environment:
      MYSQL_PASSWORD: password
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: password
    ports:
      - '3306:3306'
    volumes:
      - './data:/var/lib/mysql'


Gemfile

Gemfile
source 'https://rubygems.org'
gem 'rails', '~> 7.0', '>= 7.0.3'

Gemfile.lock

空で良いので下記のコマンドで作る。

touch Gemfile.lock

ファイル構成は下記の通り

スクリーンショット 2022-05-29 21.12.16.png


2.railsのプロジェクトを作る

docker-compose run --no-deps web rails new . --force --database=mysql --skip-bundle

【rails newのオプションの説明】
-force : ファイルが存在する場合に上書き
–database : データベースの種類(デフォルト:sqlite3なので、それ以外の時は指定する。)
–skip-bundle : bundle installしない

ポイントは、 --skip-bundleを指定すること!
このタイミングではGemfileに記載された内容を読み込ませたくない(=この後、Gemfileが更新されるので、その後読み込ませたい)ので、一旦スキップする。

このコマンドが完了すると、ローカルに下記のようなファイル(railsのアプリ開発に必要なもの)が作成される。
スクリーンショット 2022-05-29 21.16.06.png

また Gemfileも更新される。
スクリーンショット 2022-06-05 21.48.26.png


3. config/database.ymlの編集

デフォルトから画像の部分を修正し、docker上の設定に合わせる。

スクリーンショット 2022-05-29 21.27.04.png


4.ビルド

docker-compose build

スクリーンショット 2022-05-29 21.39.51.png

エラーがなく進んだらOK


5.mysqlのDBを作成する

docker-compose run web rails db:create

スクリーンショット 2022-05-29 21.43.03.png

3.で編集したconfigファイルに沿ってDBが構築される


6.起動する

ここまで準備ができたら、やっと全部を起動するよ:relaxed:

docker-compose up

スクリーンショット 2022-05-29 21.45.15.png

こんな感じでログが出て、http://0.0.0.0:3000/ にアクセスできればOK!

次は今回の環境を使って何か作ってみるよ:relaxed:


参考にさせていただいたサイト

[公式]
https://railsguides.jp/
https://railsdoc.com/rails

https://alterbo.jp/blog/ryu3-2106/
http://www.code-magagine.com/?p=8808

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5