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

Yunhao Jiao
テスト自動化のための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で以下のように設定します:

  1. 「Settings → Branches → Branch protection rules」に移動します
  2. mainのルールを追加します(developが対象の場合は同様に追加)
  3. 「Require status checks to pass before merging」を有効にします
  4. ワークフロージョブを必須チェックとして追加します
  5. 「Require branches to be up to date before merging」を有効にします

設定が完了すると、テストが失敗したPRはレビュアーの承認があってもマージできなくなります。

テストの並列化

テストスイートが大きくなると、逐次実行は遅くなります。GitHub Actionsは並列ジョブをサポートしています:

これにより4つの並列テストジョブが実行され、それぞれがテストスイートの4分の1を担当します。合計実行時間はシャード数で分割されます(若干のオーバーヘッドあり)。

TestSprite GitHub App: ゼロ設定の代替手段

YAMLの設定なしにすべてのPRでE2Eテストを自動化したいチームのために、TestSprite GitHub Appはよりシンプルな手段を提供します:

  1. リポジトリの設定からTestSprite GitHub Appをインストールします
  2. TestSpirteダッシュボードでプレビューデプロイメントのURLを設定します
  3. すべてのPRがプレビューデプロイメントに対してフルテストスイートを自動的にトリガーします
  4. 結果はPRチェックとして表示され、テストが失敗するとマージがブロックされます

YAML不要、ランナー設定不要、アーティファクト管理不要。エージェンティックなテストがカバレッジの生成、実行、レポートを自動で処理します。

スケジュール実行による本番環境のモニタリング

PRテストにとどまらず、本番環境に対するスケジュール実行により、デプロイをトリガーとしない問題を検知できます:

これにより30分ごとに本番環境に対してスモークテストが実行され、デプロイ間隔の間にクリティカルなフローが失敗した場合にアラートを発します。

TestSpriteでGitHub Actionsテストを設定する →