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']);

ベストプラクティス

  1. TTLを短く設定する — テストアドレスは5分(300秒)程度で十分
  2. タイムアウトを明示する — waitForEmailのtimeoutは30秒がおすすめ
  3. テストごとに新しいアドレスを使う — 並列実行時の競合を防止
  4. アサーションAPIを活用する — POST /assert で件名・本文・宛先を一括検証

まとめ

メール認証フローのCIテストは、もはや「やりたいけどできない」ものではありません。MailBrewを使えば、既存のCI/CDパイプラインに数分で組み込めます。

無料プランで始める →

← ブログ一覧
© 2026 MailBrew