GitHub ActionsでRails+Rspec+docker-compose環境のci構築

Githubで開発を進める中で、多くのプロジェクトはPushしたときか、何かしらのタイミングでテストを実行していると思います。

DroneCIなど様々なツールがありますが、めんどくさがり屋の僕としては簡単に導入できそうなGithub Actionsを使ってCIを導入していこうと思います。

Docker-composeと組み合わせることでかなりすっきり簡単に構築できました。

以下の2つの記事の続きでもあります。

Windowsで Docker を用いて Rails 6.0 + MySQL の環境構築

Docker環境でRspecをインストールする

手順

GithubのリポジトリページからActionを選択。

Rubyと書かれてる方の「workflowSet up this workflow」をクリック。

      static media           2020 11 29 011429

ruby.ymlの編集画面に移動します。

docker-composeを用いて環境を構築してます。l

テストが走るタイミングはpushしたときにしてます。

yarn installとyarn upgradeは実行しないとエラーが出てたので入れてます。

/.github/workflows/ruby.yml

name: Ruby

on: [push]

jobs:
  test:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Setup docker
      shell: bash
      run: |
        # 必要なアップデート
        docker-compose run app yarn install --check-files
        docker-compose run app yarn upgrade
        # イメージのビルド
        docker-compose build
        # データベースの作成
        docker-compose run app rake db:create
      env:
        RAILS_ENV: test

    - name: Run RSpec
      shell: bash
      run:  |
        docker-compose run app bundle exec rspec
      env:
        RAILS_ENV: test

configフォルダの中にdatabase.ymlを作成(以前の記事を見てる場合はもうあります)。

/config/database.yml

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

development:
  <<: *default
  database: app_development

test:
  <<: *default
  database: app_test

production:
  <<: *default
  database: app_production
  username: app
  password: <%= ENV['APP_DATABASE_PASSWORD'] %>

実行結果

Push時にRspecのテストが実行されて問題なければ緑のチェックが付きます。

Dockerを使わない場合に比べて感覚ですが、CIに時間がかかってる気はしますが個人的には許容範囲という感じです。

キャッシュとかちゃんと設定すれば早くなるのかもしれませんね。

      static media           2020 11 29 032307

まとめ

GithubはCIのテストが通らなかったらmaster(main)へのマージを認めないようにも設定できます。

これによって、バグのあるコードをmaster(main)に反映されるということが起こりにくくなります。

しかし見てみると現在は有料機能みたいなので、僕は設定しませんでした。

      static media           2020 11 29 021011

GithubはMicrosoftの傘下に入ってから無料機能の拡張を続けているので、無料で使えるようになることを期待したいところです。

新卒研修ではdockerやCIを初めて知ってヒイヒイ言ってましたが、半年くらいで(雑ですが)自分で環境作ってたりして感慨深いです。