【Rails6.0.0.rc1】rails6のrc版が出たので遊ぶ準備をしてみた

## 概要

- rails6.0が今春出ると聞いていましたが、平成最終出社までには来なかったみたい。
- おとといrc版がリリースされていたので、ウォーミングアップでもしておこうかなと
    - https://weblog.rubyonrails.org/2019/4/24/Rails-6-0-rc1-released/
- 新卒組にもdockerのいいところを紹介したいので準備体操まで。。。どちらかというと新卒教育用かな。
    - dockerで気軽に遊んでみる程度のものです。
- ~~こちらの記事は走り書きなので後ほど更新入れます。~~
    - :fire: 以下の投稿をしたので、もうこの記事更新しません。
    - [【Rails】Rails6系とMySQL8系の組み合わせの開発環境をDockerだけでつくる](https://qiita.com/nagait84/items/b0ad5a38432a5d0c1448)

## 前提

- docker使います。rubyのあるぱいんのイメージ使います。

## やってみた

- 以下dockerコマンドで遊んだ跡です。
- この辺を後々、Dockerfileにまとめたりネットワーク設定したりしよう。（→ネットワーク追加しました。2019/05/09）

---

- dockerネットワークの作成
    - DB接続などの演習もしたいので専用ネットワークを作成しておく

``` shell
# ネットワークの名前を宣言しておきましょう。
MY_NETWORK_NAME="(任意のネットワーク名)"

docker network create \
    --driver bridge \
    ${MY_NETWORK_NAME}

# 作成できたか確認
docker network ls
```

---

- DBコンテナの用意（例）
    - せっかくなのでMySQL8.0系を使いましょう。

``` shell
# ユーザーのパスワードなどを決めておきましょう。
MYSQL_ROOT_PASSWORD="(大文字小文字記号数字)"
MYSQL_PASSWORD="(大文字小文字記号数字)"
# MySQLコンテナ名
MYSQL_CONTAINER_NAME="(任意のコンテナ名)"

# コンテナ作成。(コマンド追加で認証方式は従来のパスワード方式にしておく。)
docker run \
    --detach \
    --env MYSQL_DATABASE=app_development \
    --env MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} \
    --env MYSQL_USER=app \
    --env MYSQL_PASSWORD=${MYSQL_PASSWORD} \
    --env TZ="Asia/Tokyo" \
    --name ${MYSQL_CONTAINER_NAME} \
    --net ${MY_NETWORK_NAME} \
    --tty \
    mysql:8.0 \
    mysqld --default-authentication-plugin=mysql_native_password

# 確認
docker exec -it ${MYSQL_CONTAINER_NAME} mysql -u root -p
Enter password:

mysql> -- DB作成がされているかを確認
mysql> show databases;
```

---

- Rails6.0のコンテナを作成

``` shell
# Railsコンテナ名
RAILS_CONTAINER_NAME="(任意のコンテナ名)"

# rubyのコンテナを作成。
# (オプションなどは弊社でよく使う設定になっています)
docker run \
    --detach \
    --env APP_DATABASE_PASSWORD=${MYSQL_PASSWORD} \
    --env APP_DATABASE_USER=app \
    --env BUNDLE_APP_CONFIG=/app/.bundle \
    --env TZ="Asia/Tokyo" \
    --name ${RAILS_CONTAINER_NAME} \
    --net ${MY_NETWORK_NAME} \
    --tty \
    --workdir /app \
    ruby:2.6-alpine

# いつものように必要なパッケージをインストールしていきます。

docker exec -it ${RAILS_CONTAINER_NAME} apk update
docker exec -it ${RAILS_CONTAINER_NAME} apk upgrade

# みんな大好きnokogiri用のパッケージたち
docker exec -it ${RAILS_CONTAINER_NAME} apk add --no-cache build-base libxml2-dev libxslt-dev
# DBパッケージ追加。mysqlに変える想定で。
docker exec -it ${RAILS_CONTAINER_NAME} apk add --no-cache mysql-client mysql-dev
# yarnも入れましょう。webpackerで使いそうなので。(タイムゾーンデータもいるらしい)
docker exec -it ${RAILS_CONTAINER_NAME} apk add --no-cache yarn tzdata
docker exec -it ${RAILS_CONTAINER_NAME} yarn install

# 使い捨てのGemfileでRailsのバージョンを指定しましょう
docker exec -it ${RAILS_CONTAINER_NAME} vi Gemfile

# Gemfile内容は以下のように作成
    1	# frozen_string_literal: true
    2	
    3	source "https://rubygems.org"
    4	git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
    5	gem "rails", "6.0.0.rc1"

# bundlerの設定をちまちま
docker exec -it ${RAILS_CONTAINER_NAME} bundle config --local path vendor/bundle
docker exec -it ${RAILS_CONTAINER_NAME} bundle config --local build.nokogiri --use-system-libraries
# 確認
docker exec -it ${RAILS_CONTAINER_NAME} bundle env

# rails6.0.0.rc1 をインストールだ！！
docker exec -it ${RAILS_CONTAINER_NAME} bundle install --path vendor/bundle

# 確認
docker exec -it ${RAILS_CONTAINER_NAME} bundle exec rails --version
> Rails 6.0.0.rc1

# プロジェクト新規作成。さっき作ったGemfileは上書きさせよう。
docker exec -it ${RAILS_CONTAINER_NAME} bundle exec rails new . --database mysql --force

# DB接続の設定
docker exec -it ${RAILS_CONTAINER_NAME} ls -lahF /app/config/
docker exec -it ${RAILS_CONTAINER_NAME} vi /app/config/database.yml

# お試しなのでdevelopment環境の部分を編集する。
    20	development:
    21	  <<: *default
    22	  database: app_development
    23	  username: app
    24	  password: <%= ENV['APP_DATABASE_PASSWORD'] %>
    25	  host: "MySQLのコンテナ名"

# 早速ためそうぜ！！ →→→→6.0から導入されたメソッドが使える！！！！
docker exec -it ${RAILS_CONTAINER_NAME} bundle exec rails console
# Running via Spring preloader in process 1327
# Loading development environment (Rails 6.0.0.rc1)
irb(main):001:0> 'いろはにほへとちりぬるを'.truncate_bytes(25)
=> "いろはにほへと…"

# サーバー立ち上げもできるよ！！
docker exec -it ${RAILS_CONTAINER_NAME} bundle exec rails server
# アクセスできました！!
docker exec -it ${RAILS_CONTAINER_NAME} wget -O - localhost:3000
# Connecting to localhost:3000 (127.0.0.1:3000)
# <!DOCTYPE html>
# <html>
# <head>
#   <title>Ruby on Rails</title>
#   ...

# とりま今日はここまで。
```

## これからやること

- Dockerfile化
- ~~DBコンテナの用意~~ （2019/05/09追記）
- docker-compose化
- 新卒組への説明会