しふみんのブログ

しふみんのブログです。

第2回 DockerとCircleCIを使ってRailsアプリの自動テスト&自動Herokuへのデプロイ環境を作っていく

前回の記事の続きです。

前回の記事

shifumin.hatenablog.com

前回は作成したテンプレートの紹介でした。 今回は前回の記事で作成したテンプレートを使って実際にRailsアプリ開発環境を作っていきます。
タイトルは紛らわしいのであとで変更するかもしれません。

使用するテンプレートは下記のリポジトリです。

github.com

動かし方

最低限のそれはGitHubのREADMEに書いていますので、そちらも見てください。
https://github.com/shifumin/docker_rails_heroku

必要な環境

  • Gitのインストール, GitHubのアカウント, Herokuのアカウント作成辺りは前提として
  • Docker
    • Macなら "Docker for Mac"をインストールが楽
      • 詳しくは下記を参照のこと

www.docker.com

  • Heroku CLI
    • Ma(ry Homebrewで brew install heroku が楽

構成

2018年7月7日現在は下記の構成のRailsアプリとなっています。

準備

docker(docker-compose)コマンドの実行はDockerを起動させておく必要があるので起動させてから実行していきます。

まず、必要なDocker imageをpullします。

docker pull ruby:2.5.1
docker pull postgres:10.4

次にリポジトリをcloneします。

git clone git@github.com:shifumin/docker_rails_heroku
cd docker_rails_heroku

rails newしてアプリを作成していきます。

docker-compose run --rm web rails new . --database=postgresql --skip-bundle --skip-test

Overwrite /rails_app/README.md? (enter "h" for help) [Ynaqdh] Y
Overwrite /rails_app/.gitignore? (enter "h" for help) [Ynaqdh] n
Overwrite /rails_app/Gemfile? (enter "h" for help) [Ynaqdh] Y

README.mdは上書きしてもしなくても、.gitignoreは上書きせずにGemfileは上書きします(Y n Y)

database.yml.sampleをコピーしてconfig/database.ymlを置き換えます。
Gemfileにお好みで追加のgemを加えます。

cp -i database.yml.sample config/database.yml
overwrite config/database.yml? (y/n [n]) y

vim Gemfile

僕は今RailsでLine botを作成しているので下記を追加しました。

# adding
group :development, :test do
  gem 'factory_bot_rails'
  gem 'rspec-rails'
end

group :development do
  gem 'awesome_print'
  gem 'pry-byebug'
  gem 'pry-doc'
  gem 'pry-rails'
  gem 'pry-stack_explorer'
  gem 'refe2'
  gem 'tapp'
end

Gemfileにgemを追加したら、bundle installします。
tzinfo-data はウィンドーズ以外は必要なさそうなので削除しました(下記の2行)

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

参考

github.com

余談ですが、僕の場合はbot開発なのでview関係のgem(sass-rails等)は必要ないけど、そのまま残しているのでそれらもきちんと整理する必要がありますね。

ここらでdocker-compose buildします(buildの時に合わせてbundle installもするし、上のbundle installはいらない気がしてきた!)

docker-compose build

一応、RSpecのインストールも済ませておきます(面倒がらずに個人開発でもテストもきちんと書いていくぞというやっていく気持ちの現れ)
また、rails db:createも行います。

docker-compose run --rm web rails g rspec:install
docker-compose run --rm web rails db:create

ここまでの前準備でローカル開発環境ではRailsアプリを動かす準備ができたのでdocker-compose upで起動させてブラウザで確認します。

docker-compose up

http://localhost:3000/ で確認。

f:id:shifumin:20180708113319p:plain

確認できました。

終わりに

今回はDockerized Railsアプリのテンプレートでローカル開発環境でRailsアプリを起動させるところまで進めました。
次回はCircleCIの設定を進めていきたいと思います(予定)

参考

shifumin/docker_rails_heroku: Template for building Rails application environment with Docker on Heroku.
https://github.com/shifumin/docker_rails_heroku

Docker For Mac | Docker
https://www.docker.com/docker-mac

library/ruby - Docker Hub
https://hub.docker.com/_/ruby/

library/postgres - Docker Hub
https://hub.docker.com/_/postgres/

"The dependency tzinfo-data will be unused" on Ubuntu · Issue #12 · tzinfo/tzinfo-data
https://github.com/tzinfo/tzinfo-data/issues/12