第6章「品質の番人を雇った夜」― AIツール60本を個人で品質管理するのは無理だと気づいた話
本番の死活監視なしで60本のAI APIを運用するとどうなるか、実録です。
この記事は、個人開発サービス CheckMe(checkme.run) の開発物語です。
問題の発見:「誰も気づかずに壊れていた」
ユーザーから「古語変換が壊れてる」という声が届いた。確認したら確かにエラーを吐いて動かない。修正できたのは声をいただいてから2日後だった。
このサービスには現在60本以上のAI APIツールが稼働している。1人で全部の死活確認をするのは物理的に不可能だ。
n8n Watchdog の設計
n8n(自動化ワークフローツール)を使い、2時間おきに全エンドポイントをシナリオテストする仕組みを構築した。
// app/config/scenario_tests.json(一部)
[
{
"name": "古文変換テスト",
"path": "/words/kobun",
"data": {"text": "今日はとても良い天気です"}
},
{
"name": "なぞかけテスト",
"path": "/owarai/nazokake",
"data": {"theme": "プログラミング"}
},
...
]
テスト定義をJSONで管理することで、追記するだけで監視対象を増やせる設計にした。
SET(Software Engineer in Test)の採用
シナリオテストの設計・拡張・エラー分類を担当するAIペルソナ「SET」を採用した。
彼が設計した品質基準:
| レベル | 症状 | アクション |
|---|---|---|
| Critical | AI API全断 / 500エラー連発 | n8n通知 → 即対応 |
| Warning | 特定ツールのキャッシュ不整合 | ログに記録 → 次デプロイ時に修正 |
| Info | レスポンスタイム劣化 | 週次レビューで確認 |
スモークテストの実装
deploy後の動作確認にスモークテストを追加した。
# scripts/smoke_test.py(一部)
TESTS = [
{"name": "古文変換", "path": "/words/kobun", "data": {"text": "春はあけぼの"}},
{"name": "なぞかけ", "path": "/owarai/nazokake", "data": {"theme": "桜"}},
{"name": "AIストーリー", "path": "/docs/sakubun", "data": {"text": "テスト入力"}},
]
X-Smoke-Test: 1 ヘッダーを付けることで、AIコールログ・使用統計に計上されない。固定入力なので2回目以降はキャッシュヒット → APIコストゼロ。
この章のエンジニア向けポイント
- 60本のAPIを手動で死活確認するのは不可能。自動化は必須
- n8nは個人開発の監視自動化に最適(ローカルで動く・無料)
- シナリオテストはJSONで定義 → 追記だけで拡充できる設計にする
- スモークテストには専用ヘッダーを付けて本番ログを汚さない
次章では、「ClaudeとのYESマンループ」に気づいてGeminiを外部顧問として採用する話になる。