Skip to main content

ステージング環境で毎晩 E2E テストを実行する

Devin に、毎晩ステージング環境に対してエンドツーエンドテストスイートを実行させ、失敗時にはチケットを自動で起票するようスケジュールします。
AuthorCognition
Category自動化
FeaturesAPI、スケジュール、プレイブック
このガイドでは、v3 API を使用したスケジュール管理について説明します。これは自動化やInfrastructure as Codeワークフローに役立ちます。APIの設定なしに、Devin UI から直接スケジュールを作成・管理することもできます。
1

APIアクセス用のサービスユーザーをセットアップする

API 経由で作成されたスケジュール済みセッションには、適切な権限を持つサービスユーザーが必要です。最初に 1 つ設定しておけば、以降のすべての呼び出しでその APIキー を使用できます。
  1. app.devin.ai > Settings > Service Users に移動し、Create Service User をクリックします
  2. ManageOrgSchedules 権限を含むロールを割り当てます
  3. 作成後に表示される APIキー を保存しておきます。表示されるのは一度きりで、その後は Bearer トークンとして使用します
organization ID を取得するには、サービスユーザーのトークンを使って List Organizations エンドポイントを呼び出します。
curl "https://api.devin.ai/v3/enterprise/organizations" \
  -H "Authorization: Bearer $DEVIN_API_KEY"
このガイドに記載されているコマンドがそのまま動作するように、両方の値をエクスポートしてください:
export DEVIN_API_KEY="sk-your-service-user-key"
export ORG_ID="your-org-id"
サービスユーザーおよび権限の詳細については、API 認証に関するドキュメントを参照してください。
2

テスト実行のためのプレイブックを作成します

スケジュールを作成する前に、E2E スイートをどのように実行し、結果をどのように扱うかを Devin に正確に指示するプレイブックを用意します。Settings > Playbooks に移動して新しいプレイブックを作成するか、Advanced Devin を使って、テストワークフローの説明から自動生成させてください。以下は Playwright スイート向けの例です:保存後はプレイブック ID を控えておいてください。API 呼び出しで必要になります。プレイブックを表示しているときの URL (app.devin.ai/.../playbooks/{playbook_id}) から確認できます。
Devin がプレイブックの一部としてチケットを作成できるように、Linear integration をインストールしてください。スケジュールを作成するときに、チームに自動で通知が届くように Slack チャンネル(例: #qa-results)も指定できます。テストで必要な場合は、organization secrets を通じて、ステージング環境のシークレット(データベース URL、APIキー など)への読み取り専用アクセスを Devin に付与してください。
3

API でナイトリースケジュールを作成する

次に、POST /v3/organizations/{org_id}/schedules エンドポイントを使ってスケジュールを登録します。次の例では、毎晩午前 2 時(UTC)に実行されます。
curl -X POST "https://api.devin.ai/v3/organizations/$ORG_ID/schedules" \
  -H "Authorization: Bearer $DEVIN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Nightly E2E — staging",
    "prompt": "Run the nightly E2E test suite against staging. Follow the playbook exactly.",
    "schedule_type": "recurring",
    "frequency": "0 2 * * *",
    "playbook_id": "your-playbook-id"
  }'
レスポンスには、このスケジュールを後で管理する際に使用する schedule_id が含まれています。保存しておきます:
export SCHEDULE_ID="a1b2c3d4-e5f6-7890-abcd-ef1234567890"  # レスポンスから取得
frequency フィールドは標準的な cron 構文を使用します。以下にいくつか便利な例を示します:
PatternWhen it runs
0 2 * * *毎日午前 2 時 (UTC)
0 2 * * 1-5平日のみ (月〜金)
0 6 * * 1毎週月曜日の午前 6 時 (UTC)
なぜ午前 2 時なのでしょうか?テストは、その日の最後のデプロイがステージング環境で安定した後で、かつエンジニアが業務を開始したときに不具合が見えるよう、十分早い時間に実行したいからです。チームのタイムゾーンとデプロイのサイクルに合わせて調整してください。利用可能なすべてのフィールドについては、Create schedule エンドポイントのドキュメントを参照してください。
4

初回実行を検証し、プロンプトを最適化する

スケジュールが最初に実行されたら、セッションを確認して、Devin がテストを正しく実行し、出力が期待どおりになっていることを確かめます。
  1. Devin のダッシュボードを開き、Past Sessions の中から対象のセッションを探します — スケジュール名のタグが付いています
  2. Playwright のテストスイートは実行されましたか? 実際の不具合(フレークテストではないもの)に対して Linear チケットが作成されましたか?
  3. #qa-results Slack チャンネルでサマリーメッセージを確認します
初回実行時によくある問題と、その対処方法:
  • Devin がステージングにアクセスできない: ステージング環境変数(STAGING_API_KEYDATABASE_URL など)を organization secrets として追加し、すべてのスケジュールされたセッションで利用できるようにします
  • フレークテストからのチケットが多すぎる: プレイブックにリトライを追加します: 「チケットを起票する前に、失敗したテストはすべて 1 回再実行する。2 回失敗したテストに対してのみチケットを起票する。」
  • テストに時間がかかりすぎる: スイートの対象範囲を絞ります — 例: 「tests/critical/tests/smoke/ のテストだけを実行する」— またはセッションのタイムアウトを延長します
5

スケジュールをコードで管理する

ナイトリーの実行が安定したら、他のスケジュールと同様に管理したくなるはずです。デプロイフリーズ中は一時停止したり、テストスイートが変わったらプロンプトを更新したり、別の環境用に 2 つ目のスケジュールを作成したりできます。デプロイフリーズやメンテナンスウィンドウの間は、スケジュールを一時停止 します。
curl -X PATCH "https://api.devin.ai/v3/organizations/$ORG_ID/schedules/$SCHEDULE_ID" \
  -H "Authorization: Bearer $DEVIN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"enabled": false}'
凍結が解除されたら再度有効化してください:
curl -X PATCH "https://api.devin.ai/v3/organizations/$ORG_ID/schedules/$SCHEDULE_ID" \
  -H "Authorization: Bearer $DEVIN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"enabled": true}'
稼働中のものを監査するには、すべてのスケジュールを一覧表示します:
curl "https://api.devin.ai/v3/organizations/$ORG_ID/schedules" \
  -H "Authorization: Bearer $DEVIN_API_KEY"
複数のスケジュールを管理しているチームは、YAML 設定ファイルからスケジュール定義を同期する CLI の作成を Devin に依頼することで、テスト設定と同様にスケジュールもバージョン管理できます。