2026/04/02
GitHub Actionsでメール認証フローを自動テストする完全ガイド
GitHub ActionsCI/CDE2ESDK
なぜCIでメールテストが必要か
サインアップ確認、パスワードリセット、招待メール — 多くのWebアプリケーションはメール送信に依存しています。しかし、これらのフローをCIで自動テストしているチームはまだ少数です。
理由は明確です。CIサーバーにはメールを受信する仕組みがないからです。
MailBrewはAPIベースのメール受信サービスです。CI環境から数行のコードでメールの受信・検証が可能になります。
アーキテクチャ
GitHub Actions Runner
→ アプリケーション(テスト用SMTP: smtp.mailbrew.dev:587)
→ MailBrew API(メール受信を待機・取得)
→ テストアサーション
アプリケーションのSMTP設定をMailBrewに向けるだけで、送信されたメールをAPI経由で取得できます。
セットアップ
1. APIキーの設定
GitHubリポジトリのSettings > Secrets に MAILBREW_API_KEY を追加します。
2. ワークフローファイル
name: E2E Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install dependencies
run: npm ci
- name: Run E2E tests
run: npx playwright test
env:
MAILBREW_API_KEY: ${{ secrets.MAILBREW_API_KEY }}
SMTP_HOST: smtp.mailbrew.dev
SMTP_PORT: 587
3. テストコード
import { MailBrew } from '@mailbrew/sdk';
const mb = new MailBrew(process.env.MAILBREW_API_KEY);
// テスト用アドレスを発行
const addr = await mb.createAddress({ ttl: 300 });
// アプリケーションにサインアップ
await signupUser(addr.address, 'password123');
// 確認メールの受信を待機(最大30秒)
const email = await mb.waitForEmail(addr.address, { timeout: 30000 });
// アサーション
expect(email.subject).toContain('メールアドレスの確認');
expect(email.html_body).toContain('確認する');
SDK別のコード例
注意: Python と PHP の SDK は、PyPI / Packagist への公開を準備中です(Node.js の SDK は npm に公開済み)。公開までは REST API(https://mailbrew.dev/ja/docs)を直接お使いください。
Python
from mailbrew import MailBrew
mb = MailBrew(os.environ['MAILBREW_API_KEY'])
addr = mb.create_address(ttl=300)
# メール送信トリガー
trigger_signup(addr["address"])
# 待機 & 検証
email = mb.wait_for_email(addr["address"], timeout=30)
assert 'メールアドレスの確認' in email["subject"]
PHP
use MailBrew\MailBrew;
$mb = new MailBrew(env('MAILBREW_API_KEY'));
$addr = $mb->createAddress(ttl: 300);
// 待機 & 検証
$email = $mb->waitForEmail($addr['address'], 30);
$this->assertStringContainsString('確認', $email['subject']);
ベストプラクティス
- TTLを短く設定する — テストアドレスは5分(300秒)程度で十分
- タイムアウトを明示する —
waitForEmailのtimeoutは30秒がおすすめ - テストごとに新しいアドレスを使う — 並列実行時の競合を防止
- アサーションAPIを活用する —
POST /assertで件名・本文・宛先を一括検証
まとめ
メール認証フローのCIテストは、もはや「やりたいけどできない」ものではありません。MailBrewを使えば、既存のCI/CDパイプラインに数分で組み込めます。