概要
この記事では、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
参考リソース
※前提として、RspecやRubocopの実行に必要なGemや設定などは導入済みであるものとします。
rails.ci.ymlの作成
以下の内容で.github/workflows/rails.ci.ymlを作成します。この設定により、GitHub上でコードをプッシュするたびに自動でテストとコーディング規約のチェックが行われます。
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プロセス中にテスト用のデータベースが正しくセットアップされます。
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の作成
config.before(:each, type: :system) do
driven_by :selenium_chrome_headless
end
rails_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
実行結果
結論
GitHub Actionsの導入により、Railsプロジェクトでのテストとコーディング規約チェックが自動化されます。これにより、開発プロセスが効率化され、コード品質の向上に寄与することが期待できます。特に、プルリクエストを作成する際や新しい機能を実装する際に、手動でテストを実行する手間が省け、開発速度の向上に繋がります。GitHub Actionsは、Railsプロジェクトの持続可能な開発を支える強力なツールです。
この記事がRailsプロジェクトにGitHub Actionsを導入しようと考えている方々にとって、役立つ情報であることを願っています。何か質問があれば、コメント欄にてお気軽にどうぞ。