【Hello World②】Rails @ Ruby
Javaの次は、言語の発表時期はJavaと同じく90年代中盤と意外と古いが、2000年代後半の「Ruby on Rails」の登場まで日の目を見ることが少なかったRuby言語でHello Worldアプリを作ります。フレームワークは「Ruby on Rails」を使います。
Ruby on RailsでRubyのWebアプリを作ります
①フォルダ・ファイルを作成
以下の構成でフォルダとファイルを作ります。
rails
├─app # 空のフォルダ(ここにrailsのアプリを作ります)
├─compose.yaml # コンテナ作成時の指示を記載したファイル
├─Dockerfile # イメージ作成時の指示を記載したファイル
├─Gemfile # インストールするgemを記載したファイル(仮のファイル)
└─Gemfile.lock # インストールされたgemが記載されたファイル
PowerShellで以下のコマンドを実行し、フォルダと空のファイルを作ります。
※以降のコマンドは「rails」フォルダで実行します。
mkdir rails; `
cd rails; `
New-Item Dockerfile; `
New-Item compose.yaml; `
New-Item Gemfile; `
New-Item Gemfile.lock; `
code Dockerfile; `
code compose.yaml; `
code Gemfile
「Dockerfile」、「compose.yaml」、「Gemfile」には以下の内容を記述します。
FROM ruby:3.2.0
WORKDIR /app
COPY ./app/Gemfile ./app/Gemfile.lock /app/
RUN apt-get update -qq \
&& apt-get install -y build-essential nodejs \
&& bundle install
services:
web:
build: .
command: /bin/sh -c "rm -f tmp/pids/server.pid && rails server -b '0.0.0.0'"
depends_on:
- db
ports:
- "3000:3000"
volumes:
- ./app:/app
db:
container_name : postgres
image : postgres:14.2
ports:
- "5432:5432"
volumes:
- ./db:/var/lib/postgresql/data
environment:
POSTGRES_DB : testdb
POSTGRES_USER : testuser
POSTGRES_PASSWORD : testpass
source 'https://rubygems.org'
gem "rails", "7.1.2"
※「Gemfile」はrailsをインストールするだけの最低限の記述にしています。
②Gemfile取得
以下のコマンドを実行し、コンテナ内でRailsのプロジェクトを作成して、その際に作られる「Gemfile」をパソコンにコピーします。
docker run -it --rm -v .:/host ruby:3.2.0 `
bash -c "mkdir /app && `
cp /host/Gem* /app && `
apt-get update -qq && `
apt-get install -y build-essential nodejs && `
cd /app && `
bundle install && `
rm /app/Gem* && `
rails new . -d postgresql && `
cp /app/Gem* /host/app/"
コマンドを実行するとappフォルダに「Gemfile」と「Gemfile.lock」がコピーされます。
rails
└─app
├─Gemfile # インストールするgemを記載したファイル
└─Gemfile.lock # インストールされたgemが記載されたファイル
③Railsのプロジェクトを作成
以下のコマンドを実行してRailsのプロジェクトを作成します。
docker compose run --rm web sh -c 'rails new . -d postgresql'
※実行中にOverwrite /app/Gemfile? (enter "h" for help) [Ynaqdhm]
と聞かれた場合はyを応答
コマンドを実行するとappフォルダの下にrailsのフォルダ・ファイルが作成されます。
④データベースを作成
データベース接続の設定ファイル(database.yml)の内容を修正します。
rails
└─app
└─config
└─database.yml
15行目からdefaultについて記述されているので、poolの下にusername、password、hostの記述を追加します。
default: &default
adapter: postgresql
encoding: unicode
# For details on connection pooling, see Rails configuration guide
# https://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: testuser #追加
password: testpass #追加
host: db #追加
設定ファイルの修正が完了したら、以下のコマンドを実行し、データベースを作成します。
docker compose run --rm web rails db:create
⑤コンテナを起動
以下のコマンドを実行して、コンテナを起動します。
docker compose up -d
WebブラウザでルートURL(http://localhost:3000)に接続して、railsのデフォルトページが表示されることを確認します。
⑥コントローラとビューを作成
以下のコマンドを実行して、hello
というコントローラとビューを作成します。
docker compose exec web rails g controller hello index
コマンドを実行すると、コントローラ「hello_controller.rb」、ビュー「index.html.erb」が作成され、ルート定義ファイル「routes.rb」にhello/index
の定義が追加されます。
rails
└─app
├─app
│ └─controllers
│ │ └─hello_controller.rb
│ └─views
│ └─hello
│ └─index.html.erb
└─config
└─routes.rb
Webブラウザから/hello/index(http://localhost:3000/hello/index)に接続すると、ビューのデフォルトの内容が表示されます。
⑦コントローラとビューの内容を変更
「hello_controller.rb」と「index.html.erb」を以下の内容に変更します。
class HelloController < ApplicationController
def index
end
end
class HelloController < ApplicationController
def index
@msg = 'Rails on Docker'; #追加
end
end
<h1>Hello#index</h1>
<p>Find me in app/views/hello/index.html.erb</p>
<h1>Hello World <%= @msg %></h1>
Webブラウザから/hello/index(http://localhost:3000/hello/index)に接続して、以下の画面が表示されれば完成です。
Discussion