プロダクション監査
このスキルは、ユーザーがアプリケーションの出荷準備ができているかどうか、本番環境で何が壊れる可能性があるか、またはローンチ前に修正すべき点は何かを尋ねた場合に使用します。これは、メンテナンス可能な形に書き直された、従来のコミュニティ版 production-audit のアイデアです。プロダクション準備性の観点を維持しつつ、未検証の外部実行やサードパーティとのデータ共有を排除しています。
使用するタイミング
- ユーザーが「これはプロダクション準備ができているか」「本番で何が壊れるか」「何を見逃したか」「このリポジトリを監査してほしい」「出荷準備はできているか」と尋ねたとき。
- 機能がマージされた後、デプロイ前またはマージ後のリスク評価が必要なとき。
- パブリックローンチ、デモ、顧客へのロールアウト、または投資家向けウォークスルーが近づいているとき。
- CIは通っているが、テストステータスだけでなくプロダクションリスクについての確認が必要なとき。
- 証拠収集のために、デプロイされたURL、リリースブランチ、PR、または現在のチェックアウトが利用可能なとき。
使用しないタイミング
- アクティブな実装中であり、その時点で適切な観点が行レベルのセキュアコーディングである場合。その場合は、まず
security-reviewを使用してください。 - 純粋なライブラリ、テンプレート、ドキュメントのみのリポジトリ、またはスキャフォールドの場合。ただし、ユーザーがアプリケーションの準備性ではなくパッケージング/リリースの準備性を求めている場合は除きます。
- ユーザーが正式なコンプライアンス監査を求めている場合。このスキルはエンジニアリングトリアージであり、法律、財務、医療、または規制に関する認定ではありません。
- 利用可能な唯一の証拠がプロダクトアイデアであり、リポジトリ、デプロイ、CI、またはランタイムサーフェスがない場合。
動作方法
ローカルおよびユーザーが許可した証拠に基づいて監査を構築します。未検証のリモートコードを実行したり、リポジトリの内容をサードパーティサービスにアップロードしたり、外部スキャナーを呼び出したりしないでください。ただし、ユーザーがその特定のツールとデータフローを明示的に承認した場合は除きます。
以下の順序で実施します:
- リリースサーフェスを特定する。
- 最近の変更と現在のブランチ状態を確認する。
- リポジトリに実際に存在するランタイム、認証、データ、ペイメント、バックグラウンドジョブ、AI、デプロイメントの境界を検査する。
- CI、テスト、マイグレーション、環境ドキュメント、ロールバックパスを確認する。
- 出荷可能/ブロックの推奨事項を具体的な修正とともに提示する。
証拠チェックリスト
安価でローカルなシグナルから始めます:
git status --short --branch
git log --oneline --decorate -20
git diff --stat origin/main...HEAD
次に、プロジェクト固有のサーフェスを検査します:
- パッケージスクリプト、CIワークフロー、リリーススクリプト、Dockerファイル、デプロイメントマニフェスト。
- APIルート、Webhook、認証ミドルウェア、バックグラウンドワーカー、cronジョブ、データベースマイグレーション。
- 環境変数のドキュメントと起動時チェック。
- 可観測性フック、エラーレポート、ログ、ヘルスチェック、ダッシュボード。
- ロールバック、シード、マイグレーション、バックフィルの手順。
- 最も重要なユーザーパスに対するE2Eカバレッジ。
デプロイされたURLが対象範囲内にある場合は、そのURLに対してのみブラウザまたはHTTPチェックを使用し、ユーザーが安全なテストアカウントを提供しない限り、認証を必要とするアクションは避けてください。
リスクレンズ
セキュリティと認証
- 公開ルート、APIルート、管理ルートは明確に分離されていますか?
- 認証と認可はサーバーサイドで強制されていますか?
- シークレットはクライアントバンドル、ログ、出力例、チェックインされたファイルから適切に除外されていますか?
- レート制限、CSRF保護、CORSポリシー、アップロード検証はアプリが必要とする場所に存在していますか?
- AIまたはエージェントのサーフェスは、プロンプトインジェクション、ツールの悪用、信頼されていないコンテンツが特権アクションに混入するのを防いでいますか?
データ整合性
- マイグレーションはクリーンに順方向に実行され、ロールバックまたはリカバリ計画はありますか?
- 破壊的なマイグレーション、バックフィル、データインポートは安全にステージングされていますか?
- データベースポリシー、権限、サービスロールの境界はアプリのテナントモデルと一致していますか?
- 書き込み、ジョブ、Webhookハンドラーのリトライは冪等ですか?
ペイメントとWebhook
- Webhookシグネチャは、信頼されたペイロードフィールドを解析する前に検証されていますか?
- 各ペイメント、サブスクリプション、フルフィルメントのWebhookは冪等ですか?
- リプレイ、重複配信、順序が乱れた配信は適切に処理されていますか?
- テストモードとライブモードの認証情報は分離されていますか?
運用
- アプリはクリーンチェックアウトから、ドキュメント化されたコマンドを使用して起動できますか?
- 必要な環境変数は名前が付けられ、検証され、fail-fastで動作しますか?
- 依存関係が到達可能であることを証明するヘルスチェックはありますか?
- デプロイ、ロールバック、インシデントオーナーのパスはドキュメント化されていますか?
- ログは、シークレットや個人データを漏洩することなく有用ですか?
ユーザー体験
- ローンチクリティカルなパスはデスクトップとモバイルの両方でカバーされていますか?
- フォームはモバイルで、入力ズーム、レイアウトの重なり、送信状態のブロックなしに使用できますか?
- ローディング、空、エラー、権限拒否の各状態は、ユーザーに何が起こったかを伝えていますか?
- クリティカルな操作が失敗した場合のサポートまたはリカバリパスはありますか?
スコアリング
スコアは優先順位付けを強制するために使用し、数学的な確実性を示すものではありません。
| 帯域 | スコア | 意味 |
|---|---|---|
| ブロック | 0-49 | 上位リスクが修正されるまで出荷しない |
| リスクあり | 50-69 | 小規模ロールアウトまたは内部ベータの後ろでのみ出荷 |
| 条件付きでローンチ可能 | 70-84 | オーナーがリストされたリスクを受け入れる場合に出荷 |
| 強固 | 85-100 | 利用可能な証拠からは明らかなローンチブロッカーはなし |
以下のいずれかが真の場合、スコアを 69 に制限します:
- 機密データに対する認証または認可が欠落している。
- ペイメントまたはフルフィルメントのWebhookが冪等でない。
- 必要なマイグレーションを安全に実行できない。
- シークレットがクライアントバンドル、ログ、またはコミットされたファイルに露出している。
- 影響の大きいリリースに対するロールバックパスがない。
CIがグリーンでない場合、またはローンチクリティカルなパスがエンドツーエンドでテストされていない場合、スコアを 84 に制限します。
出力形式
一文でリードします:
プロダクション監査: 76/100、条件付きでローンチ可能。パブリックローンチ前に修正すべき2つのリスクとして、Webhook冪等性とロールバックドキュメントがあります。
次に、以下をリストします:
ブロッカー: デプロイ前に修正必須の項目。高価値の修正: スコアを改善したい場合の次の修正。確認した証拠: 検査したファイル、コマンド、CI、デプロイされたURL、またはPR。不足している証拠: 提供されれば確信度が変わるもの。次のアクション: 具体的な修正または検証手順。
強みは簡潔に述べます。ユーザーは準備性を求めているため、有用な回答は残りのリスクと次のアクションです。
例
ユーザー:
これは出荷準備できていますか?
応答:
プロダクション監査: 68/100、リスクあり。Stripe Webhookは検証されていますが冪等ではなく、保留中のマイグレーションのロールバック手順もありません。
ブロッカー:
- 注文を履行する前に `checkout.session.completed` の冪等性を追加する。
- `20260511_add_billing_state.sql` のロールバックパスを作成してテストする。
高価値の修正:
- データベースとペイメントプロバイダーの到達可能性を確認するヘルスチェックを追加する。
- アップグレード、Webhookフルフィルメント、課金ページのリフレッシュのためのE2Eパスを1つ追加する。
確認した証拠:
- `api/stripe/webhook.ts`
- `db/migrations/20260511_add_billing_state.sql`
- リリースブランチのGitHub Actions実行
次のアクション: Webhookの冪等性を先に修正しますか?
アンチパターン
- デフォルトの監査パスとして
npx <package>@latestやリモートスキャナーを実行すること。 - 明示的な承認なしに、ソース、シークレット、顧客データ、またはプライベートトポロジーを外部監査サービスにアップロードすること。
- 確認した証拠を明示せずにスコアを生成すること。
- CIがグリーンであることをプロダクション準備性とみなすこと。
- 「何をしたいか教えてください」のような汎用的な返信で終わること。
関連項目
- スキル:
security-review - スキル:
deployment-patterns - スキル:
e2e-testing - スキル:
tdd-workflow - スキル:
verification-loop