おはよう。
色々あってRuby on Railsに入門するので、環境づくりをしたよ。
Ruby on Railsって何?
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的なやつだと理解
https://pikawaka.com/ruby/how-gem-works
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
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
source 'https://rubygems.org'
gem 'rails', '~> 7.0', '>= 7.0.3'
Gemfile.lock
空で良いので下記のコマンドで作る。
touch Gemfile.lock
ファイル構成は下記の通り
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のアプリ開発に必要なもの)が作成される。
3. config/database.ymlの編集
デフォルトから画像の部分を修正し、docker上の設定に合わせる。
4.ビルド
docker-compose build
エラーがなく進んだらOK
5.mysqlのDBを作成する
docker-compose run web rails db:create
3.で編集したconfigファイルに沿ってDBが構築される
6.起動する
ここまで準備ができたら、やっと全部を起動するよ
docker-compose up
こんな感じでログが出て、http://0.0.0.0:3000/ にアクセスできればOK!
次は今回の環境を使って何か作ってみるよ
参考にさせていただいたサイト
[公式]
https://railsguides.jp/
https://railsdoc.com/rails
https://alterbo.jp/blog/ryu3-2106/
http://www.code-magagine.com/?p=8808