← 記事一覧に戻る

GitHub Actions CIエラーのトラブルシューティング:Railsバックエンド

2025/4/28
GitHub Actions Rails CI/CD

はじめに

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:createdb:migrate を実行するステップを追加し、DATABASE_URL もMySQLサービスの設定に合わせて調整しました。これにより、db:test:prepare が実行される前に db/schema.rb が正しく生成されるようになりました。

結果

上記2つの対処法により、GitHub ActionsのCIジョブは正常に完了するようになりました。

まとめ

GitHub Actionsのワークフロー設定では、working-directory のスコープとステップの実行順序が重要です。また、CI環境でのデータベースセットアップは、ローカル開発環境とは異なる手順が必要になる場合があります。エラーメッセージを注意深く読み、ワークフローの各ステップが期待通りに実行されているかを確認することが、問題解決の鍵となります。