テスト自動化のためのGitHub Actions:完全セットアップガイド

GitHub Actionsは現代のソフトウェアチームで最も広く使用されているCI/CDプラットフォームであり、GitHub Actionsで自動テストをセットアップすることは、品質向上への投資対効果が最も高い取り組みの一つです。すべてのPRで自動的に実行され、不適切なマージをブロックし、手動トリガーなしに開発者へ迅速なフィードバックを提供するテスト——これをGitHub Actionsは実践可能にします。
このガイドでは、基本的なテストランナーから本番グレードのテスト自動化パイプラインまで、完全なセットアップを解説します。
コアコンセプト
GitHub Actionsのワークフローは、`.github/workflows/`内のYAMLファイルで、実行タイミングと実行内容を定義します。テスト自動化における主要なコンセプトは以下の通りです。
トリガー:ワークフローはいつ実行されるか?
- `push` — ブランチにコミットがプッシュされるたびに
- `pull_request` — すべてのPR時(品質ゲートとして最重要)
- `schedule` — cronスケジュールで(本番環境の監視用)
- workflow_dispatch — 手動トリガー
ジョブ: 何が実行されるか?各ジョブは独立した実行環境です。
ステップ: ジョブ内のコマンドとアクションの実行順リスト。
環境とシークレット: APIキーやデータベースURLなどの機密情報は、ワークフローファイルではなくGitHubシークレットに保存します。
基本的なテスト自動化のセットアップ
Node.jsプロジェクト向けの最小限かつ完結したワークフロー:
このワークフローは、mainまたはdevelopへのすべてのPRで実行され、テストスイートを走らせ、カバレッジレポートをアーティファクトとしてアップロードします。
E2Eテストの追加
E2Eテストには実行中のアプリケーションが必要です。Next.jsやその他のフレームワークアプリケーションをプレビュー環境にデプロイする場合、最も堅牢なアプローチはプレビューデプロイメントのURLに対してテストを行うことです:
あるいは、Playwrightベースのローカル実行によるE2Eテストの場合:
PRステータスチェックとブランチ保護
テストが品質ゲートとして機能するのは、失敗時にマージをブロックする場合のみです。GitHubで以下のように設定します:
- 「Settings → Branches → Branch protection rules」に移動します
- mainのルールを追加します(developが対象の場合は同様に追加)
- 「Require status checks to pass before merging」を有効にします
- ワークフロージョブを必須チェックとして追加します
- 「Require branches to be up to date before merging」を有効にします
設定が完了すると、テストが失敗したPRはレビュアーの承認があってもマージできなくなります。
テストの並列化
テストスイートが大きくなると、逐次実行は遅くなります。GitHub Actionsは並列ジョブをサポートしています:
これにより4つの並列テストジョブが実行され、それぞれがテストスイートの4分の1を担当します。合計実行時間はシャード数で分割されます(若干のオーバーヘッドあり)。
TestSprite GitHub App: ゼロ設定の代替手段
YAMLの設定なしにすべてのPRでE2Eテストを自動化したいチームのために、TestSprite GitHub Appはよりシンプルな手段を提供します:
- リポジトリの設定からTestSprite GitHub Appをインストールします
- TestSpirteダッシュボードでプレビューデプロイメントのURLを設定します
- すべてのPRがプレビューデプロイメントに対してフルテストスイートを自動的にトリガーします
- 結果はPRチェックとして表示され、テストが失敗するとマージがブロックされます
YAML不要、ランナー設定不要、アーティファクト管理不要。エージェンティックなテストがカバレッジの生成、実行、レポートを自動で処理します。
スケジュール実行による本番環境のモニタリング
PRテストにとどまらず、本番環境に対するスケジュール実行により、デプロイをトリガーとしない問題を検知できます:
これにより30分ごとに本番環境に対してスモークテストが実行され、デプロイ間隔の間にクリティカルなフローが失敗した場合にアラートを発します。
TestSpriteでGitHub Actionsテストを設定する →