RailsプロジェクトにGitHub Actionsを導入する方法（Rspec, Rubocop）

# 概要
この記事では、RailsプロジェクトにGitHub Actionsを導入し、RspecとRubocopを自動実行する手順について解説します。GitHub Actionsを利用することで、コードをプッシュするたびに自動でテストが実行され、コーディング規約に違反していないか即座に確認できます。これにより、開発プロセスの効率化とコード品質の向上が期待できます。GitHubActionsによるRSpec・RuboCopのCI設定を備忘録的に整理しました。


# 環境
* Ruby 3.2.0
* Rails 7.0.8 
* rspec 3.13
* selenium-webdriver 4.10.0
* rubocop 1.60.2

# 参考リソース
https://zenn.dev/ryouzi/articles/cd6857c08e60e7

https://qiita.com/jhanyu/items/e2f467684873d806ad00

※前提として、RspecやRubocopの実行に必要なGemや設定などは導入済みであるものとします。


# rails.ci.ymlの作成
以下の内容で.github/workflows/rails.ci.ymlを作成します。この設定により、GitHub上でコードをプッシュするたびに自動でテストとコーディング規約のチェックが行われます。
```yaml:.github/workflows/rails.ci.yml

name: Rails CI

on:
  push:

jobs:
  build:
    runs-on: ubuntu-latest

    services:
      mysql:
        image: mysql:5.7.44
        env:
          MYSQL_ROOT_PASSWORD: #passwordをここ記入 
        ports:
          - 3306:3306
        options: --health-cmd "mysqladmin ping" --health-interval 10s --health-timeout 5s --health-retries 10

    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Set up Ruby
      uses: ruby/setup-ruby@v1
      with:
        ruby-version: '3.2.0' 

    - name: Cache Ruby gems # Ruby gemsをキャッシュします。
      uses: actions/cache@v3
      with:
        path: vendor/bundle # キャッシュするディレクトリを指定します。
        key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }} # キャッシュのキーを指定します。
        restore-keys: |
          ${{ runner.os }}-gems-  # 部分一致する最新のキャッシュを探します。
      
    - name: Install dependencies
      run: |
        sudo apt-get update -qq
        gem install bundler
        bundle install

    - name: Setup database
      run: |
          cp config/database.ci.yml config/database.yml
          bundle exec rails db:create RAILS_ENV=test
          bundle exec rails db:migrate RAILS_ENV=test
  
    - name: Run RSpec
      run: bundle exec rspec spec/models spec/requests  spec/system 

    - name: Run RuboCop
      run: bundle exec rubocop


```

# databaese.ci.ymlの作成
config/database.ci.ymlを以下の内容で作成します。これにより、CIプロセス中にテスト用のデータベースが正しくセットアップされます。
```yaml:config/database.ci.yml
test:
  adapter: mysql2
  encoding: utf8
  username: root
  password:        # passoedをここに記入
  host: 127.0.0.1
  database: #database名をここに記入

```

# GitHub ActionsでGoogle Chromeをヘッドレスモードで動かす
GitHub Actions環境ではGUIがないため、テスト実行時にGoogle Chromeをヘッドレスモードで起動する必要があります。以下の設定を追加することで、Capybaraを使ったシステムテストが可能になります。

# spec_helper.rbの作成
```ruby:spec/spec_helper.rb
  config.before(:each, type: :system) do
    driven_by :selenium_chrome_headless
  end
```

# rails_helper.rbの作成
```ruby:spec/spec_helper.rb
  Capybara.register_driver :selenium_chrome_headless do |app|
    options = Selenium::WebDriver::Chrome::Options.new
    options.add_argument('--headless')
    options.add_argument('--disable-gpu') # 古いバージョンのChrome用
    options.add_argument('--no-sandbox') # CI環境での実行に必須
    options.add_argument('--window-size=1920,1080')

    Capybara::Selenium::Driver.new(app, browser: :chrome, options:)
  end

  Capybara.javascript_driver = :selenium_chrome_headless
```

# 実行結果
[![Image from Gyazo](https://i.gyazo.com/7c9179e42a5b7f57c1aa3e2edacae392.png)](https://gyazo.com/7c9179e42a5b7f57c1aa3e2edacae392)

# 結論
GitHub Actionsの導入により、Railsプロジェクトでのテストとコーディング規約チェックが自動化されます。これにより、開発プロセスが効率化され、コード品質の向上に寄与することが期待できます。特に、プルリクエストを作成する際や新しい機能を実装する際に、手動でテストを実行する手間が省け、開発速度の向上に繋がります。GitHub Actionsは、Railsプロジェクトの持続可能な開発を支える強力なツールです。

この記事がRailsプロジェクトにGitHub Actionsを導入しようと考えている方々にとって、役立つ情報であることを願っています。何か質問があれば、コメント欄にてお気軽にどうぞ。