Rails 6 + MySQL on Dockerの環境を秒速で構築する

こんにちは、masakiです。

本記事は、Ruby On Railsの環境を速攻構築したい人向けの記事です。

最近、Ruby On Rails 6がリリースされました。

Rails自体の成熟化とLaravel等の他フレームワークの人気、TwitterがRailsからScalaに移植してRails自体が大規模開発に不向きと言われるようになって少し下火のRailsですが、ゆっくりとではありますが着実に進化を遂げています。

今回のバージョンアップで、正式にRails6からマルチDB(一つのアプリケーションから複数のデータベースを操作できる)に対応し、Railsの弱点の一つであるスケーリングのしずらさも今後少しずつ改善していくように思われます。

Rubyもバージョン2.6が公開されました。Ruby2.6の目玉はJITコンパイラが実験的に搭載されたことです。

簡単に言うと、Rubyはスクリプト言語ですがコンパイルして実行できるようになりました。

現在まだ、実験的実装で完璧ではありませんが、近い将来RubyやRailsの実行速度が数倍になる可能性を秘めています。

また、Rubyバージョン3は『Ruby2の3倍の速度』を目指しているらしく、今後Rubyの高速化が期待されます。

  • RubyやRailsは遅すぎる。
  • 大規模開発に向かない。スケールしにくいし。

と言われて、最近人気が下がってきたRubyが、再び人気の言語に返り咲く可能性を感じます。

では、これからRailsをはじめる人、Rails6をとりあえず自分の環境にインストールしたい人向けに解説します。

スポンサーリンク

Rails 6 + MySQL on Dockerの環境を秒速で構築するShellスクリプト

この記事を参考にコマンド一発でDocker上でRails6 + MySQLを動作させるShellスクリプトを作りました。

※いくつかバグを修正しました。(2019/10/20)


#!/bin/bash

#[参考記事]
#丁寧すぎるDocker-composeによるrails + MySQL on Dockerの環境構築(Docker for Mac)
#https://qiita.com/azul915/items/5b7063cbc80192343fc0

# webpackerのインストールがDockerfileの中にあるとうまくいかなかったので、外に出した。
# app nameを変更できるようにした

#config setting#############
MYSQL_PASSWORD="hogehoge"
APP_NAME="app_name"
###########################

echo "docker pull ruby2.6.4"
docker pull ruby:2.6.4

echo "docker pull mysql:5.7"
docker pull mysql:5.7

echo "docker images"
docker images

echo "make Dockerfile"

cat < Dockerfile
FROM ruby:2.6.4

ENV LANG C.UTF-8
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs

#yarnのセットアップ
RUN curl -o- -L https://yarnpkg.com/install.sh | bash
ENV PATH /root/.yarn/bin:/root/.config/yarn/global/node_modules/.bin:\$PATH

# 作業ディレクトリの作成、設定
RUN mkdir /${APP_NAME} 
ENV APP_ROOT /${APP_NAME}
WORKDIR \$APP_ROOT

# ホスト側(ローカル)のGemfileを追加する
ADD ./Gemfile \$APP_ROOT/Gemfile
ADD ./Gemfile.lock \$APP_ROOT/Gemfile.lock

# Gemfileのbundle install
RUN bundle install
ADD . \$APP_ROOT

# gem版yarnのuninstall rails6でエラーになるため
RUN gem uninstall yarn -aIx

#webpackerの設定
#RUN rails webpacker:install
EOF

echo "make Gemfile"
cat < Gemfile
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

gem 'rails', '~> 6.0.0'
EOF

echo "make Gemfile.lock"
touch Gemfile.lock

echo "make docker-compose.yml"
cat < docker-compose.yml
version: '3'
services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD}
      MYSQL_DATABASE: root
    ports:
      - '3306:3306'

  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/${APP_NAME}
    ports:
      - '3000:3000'
    links:
      - db
EOF

echo "docker-compose run web rails new . --force --database=mysql --skip-bundle"
docker-compose run web rails new . --force --database=mysql --skip-bundle

echo "docker-compose run web rails webpacker:install"
docker-compose run web rails webpacker:install

docker-compose build

# fix config/database.yml
echo "fix config/database.yml"
cat config/database.yml | sed "s/password:$/password: ${MYSQL_PASSWORD}/" | sed "s/host: localhost/host: db/" > __tmpfile__
cat __tmpfile__ > config/database.yml
rm __tmpfile__

echo "docker-compose run web rake db:create"
docker-compose run web rails db:create

echo "docker-compose up"
docker-compose up

適当なディレクトリを作成し、そこにrails6_on_docker.shをダウンロードした後、パーミッションを755にして実行してください。

$ mkdir sample_app
$ cd sample_app
$ chmod 755 rails6_on_docker.sh
$ ./rails6_on_docker.sh

Docker自体をまだインストールしていない人は、以下の記事を参考にインストールしてください。

【初心者向け】おすすめのプログラミング環境を作ろう【後編: 仮想化環境の構築】

2019年9月6日

色々インストールして設定するので、終了までに少し時間がかかります。

ディレクトリ配下にRailsのプロジェクトが作成され、最終的にDocker上でMySQLとRailsが立ち上がり以下の画面になります。

ブラウザで、http://localhost:3000/にアクセスしてみましょう。

Rails6が動作しているのが確認できました。

Ctrl+Cを押すとdocker-composeの起動を止めることができます。

その後、サーバーを起動したり止めたりするには以下のコマンドで行います。

$ docker-compose start

止めたい場合は以下。

$ docker-compose stop

以上で誰でも簡単にRails6 + MySQL on Dockerの環境が構築できると思います。

エンジニアがおすすめするプログラミングスクール3社

スポンサーリンク

1 個のコメント