KaQiita

新米社会人が適当なことを書いてます。温かく見守ってやってください。

モダンな技術で Rails Tutorial の sample_app を作ってみる(環境構築編)

はじめに

GW ということで普段できないことがしたいなと思ったのと、ちょうど 2019 年卒の新卒エンジニア研修を担当していて、題材として Rails Tutorial を使っているので、Rails Tutorial の sample_app をチュートリアルにはないモダンな技術で作ってみることにしました。

今回は環境構築編で、Docker と Kubernetes を使って sample_app の環境構築を行いたいと思います。

この記事では「Yay! You’re on Rails!」の画面を表示させてデプロイするところまで行います。

環境

手順

  1. ルートディレクトリの作成
  2. Dockerfile の作成
  3. Gemfile と Gemfile.lock の作成
  4. docker-compose.yml の作成
  5. rails new する
  6. database.yml の設定
  7. DB の作成
  8. アプリの起動
  9. デプロイ

ルートディレクトリの作成

まずは、ルートディレクトリを作成してそのディレクトリに移動します。

$ mkdir rails_turorial_app
$ cd rails_turorial_app

Dockerfile の作成

次に Dockerfile を作成します。場所はルートディレクトリの直下に置くことにしました。

Dockerfile

FROM ruby:2.6.3
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /rails_tutorial_app
WORKDIR /rails_tutorial_app
ADD Gemfile /rails_tutorial_app/Gemfile
ADD Gemfile.lock /rails_tutorial_app/Gemfile.lock
RUN bundle install
ADD . /rails_tutorial_app

Gemfile と Gemfile.lock の作成

次に Gemfile と Gemfile.lock を作成します。 Gemfile.lock は空ファイルで大丈夫です。

Gemfile

source 'https://rubygems.org'
gem 'rails'
$ touch Gemfile.lock

docker-compose.yml の作成

次に docker-compose.yml を作成します。これもルートディレクトリの直下に置くことにしました。

docker-compose.yml

version: '3'
services:
  db:
    image: mysql:5.7.23
    environment:
      MYSQL_USER: root
      MYSQL_ROOT_PASSWORD: root
    ports:
    - '3316:3306'
    volumes:
    - ./db/mysql/volumes:/var/lib/mysql

  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
    - .:/rails_tutorial_app
    ports:
    - "3000:3000"
    depends_on:
    - db

ここで MySQL は明示的に 5.7 系にしています。指定しないと MySQL 8 系になってしまい、認証が色々と面倒になるので 5.7 系にしました。

rails new する

rails new します。ただ、Docker コンテナ内にスケルトンを作成することになるので、お馴染みのコマンドとは少し異なります。

$ docker-compose run web rails new . --force --database=mysql

database.yml の設定

config/database.yml の設定を少し書き換えます。

docker-compose.yml で MYSQL_ROOT_PASSWORDroot にしたので passwordroot にして、hostdb にします。

config/database.yml

・・・(略)・・・

default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: root
  host: db

・・・(略)・・・

DB の作成

DB の設定が終わったので、DB を作成します。

$ docker-compose run web rake db:create

アプリの起動

これでアプリが起動できるようになったので、実際に docker-compose up で起動してみます。

$ docker-compose up

f:id:KakkiiiiKyg:20190430093439p:plain

デプロイ

Kubernetes を用いてデプロイします。

こちらも一からやり方を書こうかと思いましたが、以下の記事に既にまとまっており、ほぼ同じ内容になりそうだったので割愛します。

qiita.com

終わりに

Docker を用いて rails のアプリを起動させて Kubernetes を用いてデプロイすることができました。

これから sample_app をフロントは TypeScript & React & CSS in JS で、テストは RSpec で書きながら TDD でサーバー側を書いていこうと思います。

参考文献