GitHub Actions CIエラーのトラブルシューティング:Railsバックエンド
AI生成コンテンツに関する注意
この記事はAIによって生成された内容を含みます。情報の正確性については十分にご注意ください。
はじめに
GitHub Actionsを使用してRailsアプリケーションのCI/CDパイプラインを構築する際に、いくつかの一般的なエラーに遭遇することがあります。この記事では、実際に発生した2つのエラーとその解決策について詳しく説明します。
エラー1:working-directory
によるNo such file or directory
事象
CIジョブの初期段階で、依存パッケージをインストールしようとした際に以下のエラーが発生しました。
Error: An error occurred trying to start process '/usr/bin/bash' with working directory '/home/runner/work/michi/michi/./backend'. No such file or directory
このエラーは、sudo apt-get update && sudo apt-get install ...
コマンドを実行しようとしたステップで発生しました。
原因
GitHub Actionsワークフローファイル (.github/workflows/backend_ci.yml
) の defaults.run.working-directory
に ./backend
が設定されていました。これにより、ジョブ内のすべての run
ステップはデフォルトで backend
ディレクトリ内で実行されようとします。
しかし、問題のパッケージインストールステップは、actions/checkout@v4
ステップよりも前に実行されていました。この時点ではまだリポジトリのコードがチェックアウトされておらず、backend
ディレクトリが存在しないため、working-directory
の指定が無効となりエラーが発生していました。
対処法
パッケージインストールステップに対して、working-directory
を明示的にルートディレクトリ (.
) に上書き設定しました。これにより、コードのチェックアウト前に実行されるこのステップが、存在しないディレクトリを指定することなく実行されるようになりました。
jobs:
test:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./backend # デフォルトは backend
steps:
- name: Install packages
working-directory: . # このステップのみルートディレクトリで実行
run: sudo apt-get update && sudo apt-get install ...
- name: Checkout code
uses: actions/checkout@v4
# ... 以降のステップは backend ディレクトリで実行される
エラー2:db/schema.rb doesn't exist yet
事象
最初のエラーを解決した後、テスト実行ステップ (bin/rails db:test:prepare test
) で以下のエラーが発生しました。
/home/runner/work/michi/michi/backend/db/schema.rb doesn't exist yet. Run `bin/rails db:migrate` to create it, then try again.
原因
このエラーは、テストデータベースを準備しようとした際に、データベーススキーマファイル (db/schema.rb
) が存在しないために発生しました。CI環境では、通常、テスト実行前にデータベースの作成とマイグレーションが必要です。db:test:prepare
はマイグレーションを実行しますが、その前にデータベース自体が存在し、schema.rb
の元となるマイグレーションが適用されている必要があります。
対処法
テスト実行ステップの前に、テスト用データベースを作成し、マイグレーションを実行するステップを追加しました。
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: "3.4.2"
working-directory: ./backend
bundler-cache: true
# --- 追加したステップ ---
- name: Create and migrate database
env:
RAILS_ENV: test
# MySQLサービスはパスワードなしのrootユーザーを許可しているため、URLを調整
DATABASE_URL: mysql2://[email protected]:3306
run: |
bin/rails db:create
bin/rails db:migrate
# --- 追加ここまで ---
- name: Run tests
env:
RAILS_ENV: test
DATABASE_URL: mysql2://127.0.0.1:3306 # db:test:prepare 用のURL
run: bin/rails db:test:prepare test
db:create
と db:migrate
を実行するステップを追加し、DATABASE_URL
もMySQLサービスの設定に合わせて調整しました。これにより、db:test:prepare
が実行される前に db/schema.rb
が正しく生成されるようになりました。
結果
上記2つの対処法により、GitHub ActionsのCIジョブは正常に完了するようになりました。
まとめ
GitHub Actionsのワークフロー設定では、working-directory
のスコープとステップの実行順序が重要です。また、CI環境でのデータベースセットアップは、ローカル開発環境とは異なる手順が必要になる場合があります。エラーメッセージを注意深く読み、ワークフローの各ステップが期待通りに実行されているかを確認することが、問題解決の鍵となります。