CI/CD(GitHub Actions)でのメールテスト
ローカルでは通るメールテストも、CI ではよくフレーキーになります。配信が遅い、メールボックスを共用している、認証情報が漏れる、などが原因です。これを GitHub Actions できれいに実行する鍵は、3 つに絞られます。API キー用のシークレット、実行ごとの使い捨て受信トレイ、そして短いタイムアウトです。開発者のためのメールテストの一部です。
1. API キーをシークレットとして保存する
受信トレイ API キーをハードコードしてはいけません。リポジトリの Settings → Secrets and variables → Actions に追加し、テストステップに環境変数として渡します。使い捨てメール API はそのキーで認証します。
2. 最小構成のワークフロー
# .github/workflows/e2e.yml
name: e2e
on: [pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npx playwright test
env:
MAIL_KEY: ${{ secrets.MAIL_KEY }}
3. PR 実行ごとにひとつの受信トレイ
テストの中で新しい受信トレイを作り(できればテストごとにひとつ)、並列ジョブや再実行が衝突しないようにします。受信トレイは自分で勝手に期限切れになるので、後始末のステップは不要です。この「実行ごとに使い捨ての受信トレイ」パターンこそが、CI のメールチェックを決定的に保ってくれます。
4. タイムアウトは短く保つ
テスト環境のトランザクションメールは 5 秒以内に届くはずです。ポーリングの上限を 20〜30 秒にしておけば、ジョブを宙吊りにせず、本当の失敗を素早く捕まえられます。さらに良いのは webhook を使うことで、メール到着の瞬間にテストが解決します。
はじめましょう
シークレットを追加し、ワークフローを入れて、Playwright、Node、Python のスイートから受信トレイ呼び出しをつなぎ込みましょう。OpenAPI ドキュメントを読んで始めてください。