Githubで開発を進める中で、多くのプロジェクトはPushしたときか、何かしらのタイミングでテストを実行していると思います。
DroneCIなど様々なツールがありますが、めんどくさがり屋の僕としては簡単に導入できそうなGithub Actionsを使ってCIを導入していこうと思います。
Docker-composeと組み合わせることでかなりすっきり簡単に構築できました。
以下の2つの記事の続きでもあります。
Windowsで Docker を用いて Rails 6.0 + MySQL の環境構築
手順
GithubのリポジトリページからActionを選択。
Rubyと書かれてる方の「workflowSet up this workflow」をクリック。
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に時間がかかってる気はしますが個人的には許容範囲という感じです。
キャッシュとかちゃんと設定すれば早くなるのかもしれませんね。
まとめ
GithubはCIのテストが通らなかったらmaster(main)へのマージを認めないようにも設定できます。
これによって、バグのあるコードをmaster(main)に反映されるということが起こりにくくなります。
しかし見てみると現在は有料機能みたいなので、僕は設定しませんでした。
GithubはMicrosoftの傘下に入ってから無料機能の拡張を続けているので、無料で使えるようになることを期待したいところです。
新卒研修ではdockerやCIを初めて知ってヒイヒイ言ってましたが、半年くらいで(雑ですが)自分で環境作ってたりして感慨深いです。