💬
自然言語で書いたE2EテストをGitHub Actionsで実行する Claude Code Action × Playwright MCP
はじめに
9割ぐらいAIで書いています
この記事では、Claude Code Actionを使ってGitHub Actions上でPlaywrightによる自動E2Eテストを実行する仕組みを構築した実験について紹介します。自然言語の指示だけでブラウザテストを自動実行する、従来とは全く異なるアプローチを試してみました。
実装したリポジトリ: https://github.com/IconOfCos/playwright-claude-code-action。
Claude Code Actionワークフローの詳細設計
基本構成と特徴
name: Claude Code Action Playwright Test
on:
workflow_dispatch: # 手動実行のみ(コスト・時間を考慮)
jobs:
run-e2e-tests:
runs-on: ubuntu-latest
timeout-minutes: 10
1. 環境セットアップフェーズ
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install dependencies
run: npm ci
- name: Install Playwright Browsers
run: npx playwright install --with-deps
- name: run todo app
run: npm run serve &
- name: Wait for server to be ready
run: |
timeout 30 bash -c 'until curl -f http://localhost:3000; do sleep 1; done'
ポイント:
- Playwrightブラウザの事前インストールが必要
- アプリケーションをバックグラウンドで起動(
&
) - サーバー起動待ちの確実な実装(curl + timeout)
2. テスト指示の動的生成
- name: Create prompt
run: |
mkdir -p /tmp/claude-prompts
for file in test-instructions/*.md; do
cat "$file"
echo ""
done > /tmp/claude-prompts/prompt.txt
仕組み:
- 複数のMarkdownファイルを単一プロンプトに結合
- モジュール化されたテストケースの管理
- プロンプトファイルの動的生成により柔軟性を確保
3. Claude Code Action実行設定
- name: Run Claude Code for Playwright Test
id: exec-tests
uses: anthropics/claude-code-base-action@beta
with:
prompt_file: /tmp/claude-prompts/prompt.txt
system_prompt: "localhostのサーバーは起動済みです"
allowed_tools: "Bash,Bash,mcp__playwright__browser_close,mcp__playwright__browser_resize,mcp__playwright__browser_console_messages,mcp__playwright__browser_handle_dialog,mcp__playwright__browser_file_upload,mcp__playwright__browser_install,mcp__playwright__browser_press_key,mcp__playwright__browser_navigate,mcp__playwright__browser_navigate_back,mcp__playwright__browser_navigate_forward,mcp__playwright__browser_network_requests,mcp__playwright__browser_pdf_save,mcp__playwright__browser_take_screenshot,mcp__playwright__browser_snapshot,mcp__playwright__browser_click,mcp__playwright__browser_drag,mcp__playwright__browser_hover,mcp__playwright__browser_type,mcp__playwright__browser_select_option,mcp__playwright__browser_tab_list,mcp__playwright__browser_tab_new,mcp__playwright__browser_tab_select,mcp__playwright__browser_tab_close,mcp__playwright__browser_generate_playwright_test,mcp__playwright__browser_wait_for"
mcp_config: .mcp.json
timeout_minutes: "5"
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
重要な設定項目:
allowed_tools
-
Bash
: システムコマンド実行権限 -
mcp__playwright__
: Playwright MCPツールへのアクセス
system_prompt
- 実行環境の前提条件を明示
- AIの判断を補助する重要な情報
mcp_config
- MCP設定ファイルの指定
- Playwrightとの連携設定を定義
timeout_minutes
- AIの実行時間制限
- コスト管理と無限ループ防止
4. 結果出力とアーティファクト保存
- name: Upload Result
if: steps.exec-tests.outputs.conclusion == 'success'
uses: actions/upload-artifact@v4
with:
name: test-result.md
path: ./test-result.md
retention-days: 7
特徴:
- テスト成功時のみアーティファクト保存
- 7日間の保持期間設定
- ダウンロード可能な形式での結果提供
Claude Code Actionの設定詳細
.mcp.json
)
MCPの設定ファイル (Claude Code ActionがPlaywrightと連携するためのMCP設定:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest",
"--isolated",
"--headless",
"--no-sandbox"
]
}
}
}
実行フローの最適化
- 並列処理の回避: Playwright操作は逐次実行
- タイムアウト設定: 各段階での適切な時間制限
- エラーハンドリング: 失敗時の情報保存とデバッグ支援
Claude Code Actionの運用上の考慮点
コスト管理
API利用料金:
- Claude Sonnet 4の従量課金
- 実測値:1回の実行で約0.6ドル(約90円)
- 6つのテストケース実行での実コスト
- 頻繁な実行には不向き(月100回実行で9,000円)
実行時間:
- 従来のPlaywrightテスト: 数秒~数分
- Claude Code Action: 数分~十数分
- AIの思考時間が大部分を占める
適切な実行タイミング
推奨される使用場面:
- リリース前の最終確認: 手動でのworkflow_dispatch実行(月数回程度)
- 週次/月次の定期検証: スケジュール実行でのリグレッション確認
- 重要機能のPR検証: 特定ブランチでの受け入れテスト(重要機能のみ)
- デモ前の動作確認: ステークホルダー向け準備
コスト的に避けるべき場面:
- 毎回のコミット実行: 日50回で4,500円/月
- 開発中の頻繁な確認: 1日10回で900円/日
- 単純なテストの代替: ROIが見合わない
GitHub Actions特有の制約
実行時間制限:
- GitHub Actionsの最大実行時間(6時間)内で完了する必要
- timeout_minutes設定による適切な制限
並行実行制限:
- 同時実行数の制限を考慮した運用
- 複数PRでの同時実行時の影響
ログとデバッグ:
- AIの思考プロセスがログに記録される
- 失敗時のデバッグ情報が豊富
まとめ
Claude Code ActionをGitHub Actions上で活用することで、従来のE2Eテストとは全く異なる「AIによる自然言語テスト実行」を実現できました。
Claude Code Actionの価値
技術的な特徴:
- MCP対応による外部ツールとの直接連携
- GitHub Actions環境での安全な実行
- 自然言語指示の柔軟な解釈と実行
運用上の利点:
- テストコードの保守コスト削減
- 非エンジニアによるテストケース作成
- 要求仕様とテストの乖離防止
現実的な運用戦略
Claude Code Actionは従来のCIテストの代替ではなく、補完的なツールとして位置づけるのが現実的です:
- 高頻度: 従来の高速テスト(単体テスト、統合テスト)
- 重要タイミング: Claude Code Actionによる包括的な検証
- 手動テスト: 完全に自動化困難な部分
GitHub Actions統合の意義
GitHub Actionsとの統合により:
- 一元的な品質管理: テスト結果の集約と可視化
- チーム全体での活用: 開発チーム外のメンバーも実行可能
- 継続的改善: テストケースの蓄積と改善
この実験は、AI時代のソフトウェアテストの新しい可能性を示すものです。技術の成熟とコスト削減が進めば、より多くの現場で活用される日が来るでしょう。
Discussion