実装計画プランに基づくマイクロサービスの段階的自動実装を実行。各フェーズ実装後に完了チェックリストで網羅的に検証し、全項目合格の場合のみ次フェーズに自動進行する。Use when: マイクロサービスの自動実装、フェーズ実装と検証の自動化、段階的な安全な実装実行
impl-plan/ 配下の実装計画プランに基づき、指定されたマイクロサービスの 全フェーズを段階的かつ自動的に実装 し、各フェーズ完了後に 完了チェックリストによる網羅的検証 を実施する。検証に合格した場合のみ次フェーズに進行し、不合格の場合は是正→再検証のサイクルを実行する。
┌─────────────────────────────────────────────────────────────┐
│ Phase N 開始(Phase 1 〜 Phase N を順に繰り返す) │
│ ├── Step 1: 実装計画の読み取り │
│ ├── Step 2: 設計書の該当セクション特定 │
│ ├── Step 3: フェーズ内全タスクの実装 │
│ ├── Step 3.3: 自己検証【必須 — 各フェーズで実行】 │
│ │ └── 8 項目の grep チェックをターミナルで実行(全 0 件必須) │
│ │ ⛔ 1件でも検出 → 修正して再実行。Step 4 に進めない │
│ ├── Step 4: ビルド確認(dotnet build) │
│ ├── Step 5: 完了チェックリスト検証 │
│ │ ├── ✅ 全項目 PASS → Phase N+1 へ進行 │
│ │ └── ❌ FAIL あり → 是正 → 再検証(最大3回) │
│ └── Step 6: 検証レポート生成・次フェーズへ進行 │
├─────────────────────────────────────────────────────────────┤
│ 全フェーズ完了後【1 回だけ実行】 │
│ ├── Final Step A: 最終統合チェック(dotnet build + dotnet test)│
│ └── Final Step B: 最終コードレビュー【必須】 │
│ └── runSubagent で orchest-code-review Agent を 1 回呼出 │
│ ⛔ Critical + High = 0 でなければリリース不可 │
└─────────────────────────────────────────────────────────────┘
Fail-Safe 原則: 判定に迷う場合は「不合格(要修正)」に倒す。品質を妥協しない。
⛔ 最重要ルール: Step 3.3(自己検証 grep チェック)は 各フェーズ完了時に必ず実行する。スキップして Step 4 のビルドに進むことは品質ゲートの無効化と同義であり禁止する。
orchest-code-reviewエージェントによる包括的コードレビューは 全フェーズ完了後に 1 回だけ 実行する(各フェーズごとの実行は不要)。
impl-plan/{service-name}-impl-plan.md — 実装計画プランdesign-docs/{service-name}-design.md — 詳細設計書design-docs/spec.md — システム全体設計書.github/instructions/ 配下のコーディング規約ファイルが存在することAGENTS.md が存在し、プロジェクト共通ルールが記載されていることdotnet --version で確認)| 引数として指定するサービス名 | 実装計画ファイル | 設計書ファイル | プロジェクトディレクトリ |
|---|---|---|---|
authentication-service | authentication-service-impl-plan.md | authentication-service-design.md | AuthService/ |
user-management | user-management-impl-plan.md | user-management-design.md | UserManagementService/ |
inventory-management | inventory-management-impl-plan.md | inventory-management-design.md | InventoryManagementService/ |
sales-management | sales-management-impl-plan.md | sales-management-design.md | SalesManagementService/ |
payment-cart-service | payment-cart-service-impl-plan.md | payment-cart-service-design.md | PaymentCartService/ |
coupon-service | coupon-service-impl-plan.md | coupon-service-design.md | CouponService/ |
point-service | point-service-impl-plan.md | point-service-design.md | PointService/ |
mailsend-service | mailsend-service-impl-plan.md | mailsend-service-design.md | MailSendService/ |
ai-support-service | ai-support-service-impl-plan.md | ai-support-service-design.md | AiSupportService/ |
api-gateway | api-gateway-impl-plan.md | api-gateway-design.md | ApiGateway/ |
front-end | front-end-impl-plan.md | front-end-need.md | frontend/ |
impl-plan/{service}-impl-plan.mddesign-docs/{service}-design.md(front-end の場合は front-end-need.md)design-docs/spec.mdINSERT INTO todos (id, title, description, status) VALUES
('{service}-phase-1', 'Phase 1: {phase_name}', '{phase_description}', 'pending'),
('{service}-phase-2', 'Phase 2: {phase_name}', '{phase_description}', 'pending'),
...;
dotnet --versiondotnet build(既存コードがある場合)対象フェーズの実装計画プランから以下を抽出:
実装計画のタスクを 上から順に 実装する。各タスクで以下のルールを遵守:
| カテゴリ | 必須ルール |
|---|---|
| 命名 | PascalCase(クラス/メソッド)、camelCase(変数)、_camelCase(プライベートフィールド) |
| DI | primary constructor によるコンストラクタインジェクション。[Inject] プロパティインジェクション禁止 |
| async | 全非同期メソッドに CancellationToken ct = default。.Result / .Wait() 禁止 |
| ログ | ILogger<T> + メッセージテンプレート。Console.WriteLine 禁止。文字列補間ログ禁止 |
| 例外 | catch (Exception) { } 禁止。必ずログ出力または再スロー |
| Null | ArgumentNullException.ThrowIfNull()。コレクションで null 返却禁止([] を返す) |
| EF Core | [Table("snake_case")] / [Column("snake_case")]。AsNoTracking() 読み取り専用。DateTime.UtcNow 使用 |
| セキュリティ | FromSqlRaw 文字列結合禁止。秘密情報ハードコード禁止。入力バリデーション必須 |
| レイヤー | Endpoints → Services → Repositories の依存方向厳守 |
1. Models/(EF Core エンティティ)
2. DTOs/Requests/ と DTOs/Responses/(リクエスト/レスポンス DTO)
3. Infrastructure/Persistence/AppDbContext.cs(DbContext)
4. Repositories/Interfaces/ → Repositories/(インターフェース → 実装)
5. Services/Interfaces/ → Services/(インターフェース → 実装)
6. Endpoints/(Minimal API エンドポイント)
7. Configurations/(設定クラス)
8. Program.cs(DI 登録、ミドルウェア)
9. appsettings*.json(設定ファイル)
⛔ MANDATORY GATE: Step 3 の全タスク実装完了後、次の全コマンドをターミナルで実行し、出力結果を確認すること。1 つでもスキップした場合、以降のステップは無効とする。
全コマンドを順にターミナルで実行すること(推測で PASS としない):
# [3.3-CHECK-1] TODO/FIXME/HACK/NotImplementedException 残存チェック
grep -rn "TODO\|FIXME\|HACK\|UNDONE\|NotImplementedException" --include="*.cs" {ServiceDirectory}/ || echo "CHECK-1: PASS (0 hits)"
# [3.3-CHECK-2] Console.WriteLine 残存チェック
grep -rn "Console\.Write" --include="*.cs" {ServiceDirectory}/ || echo "CHECK-2: PASS (0 hits)"
# [3.3-CHECK-3] .Result / .Wait() デッドロックパターンチェック
grep -rn "\.Result\b\|\.Wait()" --include="*.cs" {ServiceDirectory}/ || echo "CHECK-3: PASS (0 hits)"
# [3.3-CHECK-4] 秘密情報ハードコードチェック
grep -rn 'Password\s*=\s*"\|"sk-\|connectionString.*Password' --include="*.cs" --include="*.json" {ServiceDirectory}/ || echo "CHECK-4: PASS (0 hits)"
# [3.3-CHECK-5] DateTime.Now チェック(DateTime.UtcNow を使用すべき)
grep -rn "DateTime\.Now[^U]" --include="*.cs" {ServiceDirectory}/ || echo "CHECK-5: PASS (0 hits)"
# [3.3-CHECK-6] プロパティインジェクション [Inject] チェック
grep -rn "\[Inject\]" --include="*.cs" {ServiceDirectory}/ || echo "CHECK-6: PASS (0 hits)"
# [3.3-CHECK-7] FromSqlRaw 文字列結合チェック
grep -rn "FromSqlRaw.*+" --include="*.cs" {ServiceDirectory}/ || echo "CHECK-7: PASS (0 hits)"
# [3.3-CHECK-8] ダミー値チェック(テストプロジェクト除外)
grep -rn '"dummy"\|"placeholder"\|"xxx"' --include="*.cs" {ServiceDirectory}/ | grep -v ".Tests/" || echo "CHECK-8: PASS (0 hits)"
判定ルール:
前提: Step 3.3 の全 8 チェックが PASS (0 hits) であること。
cd {ServiceDirectory}
dotnet build --no-restore 2>&1
TreatWarningsAsErrors が有効な場合)が 0 件であること実装計画の「Phase N 完了チェックリスト」に記載された 全項目 を検証する。
| チェック種別 | 検証方法 |
|---|---|
| ファイル存在確認 | ls / find でファイルの存在を確認 |
| コード内容確認 | ファイルを読み取り、記載内容が基準を満たすか確認 |
| ビルド確認 | dotnet build の成功を確認 |
| テスト確認 | dotnet test の成功を確認(テストフェーズの場合) |
| マイグレーション確認 | dotnet ef migrations list で確認(エンティティフェーズの場合) |
| grep チェック | 禁止パターンの残存を grep で検出 |
以下の 品質チェックパターン を全フェーズで実行:
# 1. TODO/FIXME/HACK コメント残存チェック
grep -rn "TODO\|FIXME\|HACK\|UNDONE\|XXX" --include="*.cs" {ServiceDirectory}/
# 2. NotImplementedException 残存チェック
grep -rn "NotImplementedException" --include="*.cs" {ServiceDirectory}/
# 3. Console.WriteLine 残存チェック
grep -rn "Console\.Write" --include="*.cs" {ServiceDirectory}/
# 4. 秘密情報ハードコードチェック
grep -rn "Password\s*=\s*\"" --include="*.cs" {ServiceDirectory}/
# 5. .Result / .Wait() チェック
grep -rn "\.\(Result\|Wait\)()" --include="*.cs" {ServiceDirectory}/
# 6. プロパティインジェクションチェック
grep -rn "\[Inject\]" --include="*.cs" {ServiceDirectory}/
# 7. FromSqlRaw 文字列結合チェック
grep -rn "FromSqlRaw.*+" --include="*.cs" {ServiceDirectory}/
# 8. 空メソッドボディチェック
grep -rn "{ }" --include="*.cs" {ServiceDirectory}/
# 9. ダミー値チェック
grep -rn "\"dummy\"\|\"test\"\|\"xxx\"\|\"placeholder\"" --include="*.cs" {ServiceDirectory}/
# (テストプロジェクト配下は除外)
# 10. DateTime.Now チェック(DateTime.UtcNow を使用すべき)
grep -rn "DateTime\.Now[^U]" --include="*.cs" {ServiceDirectory}/
各チェック項目を以下の判定で記録:
| 判定 | 意味 | 次フェーズへの影響 |
|---|---|---|
| ✅ PASS | 基準を完全に満たす | 影響なし |
| ⚠️ PARTIAL | 一部不足だが重大ではない | 3 件以上で不合格 |
| ❌ FAIL | 基準を満たさない | 即座に不合格 |
| 総合判定 | 条件 |
|---|---|
| ✅ 合格 | 全チェック項目 PASS、共通必須チェック全 0 件 |
| ⚠️ 条件付き合格 | PARTIAL が 1〜2 件、かつ低重要度の指摘のみ(即座に是正して再検証) |
| ❌ 不合格 | FAIL が 1 件以上、または共通必須チェックで検出あり |
不合格 → 是正 → 再検証 → 合格?
├── YES → Step 6 へ
└── NO → 是正 → 再検証(最大 3 回まで)
└── 3 回連続不合格 → ユーザーに報告して中断
dotnet build で修正がビルドを壊していないか確認# {ServiceName} Phase {N} 完了検証レポート
## 実施日時
{YYYY-MM-DD HH:MM (UTC)}
## 総合判定
{✅ 合格 / ⚠️ 条件付き合格 / ❌ 不合格}
## 1. 完了チェックリスト結果
| # | チェック項目 | 結果 | 備考 |
|---|------------|------|------|
| 1 | {item} | ✅/⚠️/❌ | {notes} |
...
## 2. 共通品質チェック結果
| # | チェック項目 | 検出数 | 結果 |
|---|------------|-------|------|
| 1 | TODO/FIXME/HACK 残存 | 0 | ✅ |
| 2 | NotImplementedException 残存 | 0 | ✅ |
| 3 | Console.WriteLine 残存 | 0 | ✅ |
...
## 3. 是正履歴(該当する場合)
| 試行 | 不合格項目 | 是正内容 | 結果 |
|------|----------|---------|------|
## 4. 次フェーズへの申し送り事項
UPDATE todos SET status = 'done' WHERE id = '{service}-phase-{N}';
UPDATE todos SET status = 'in_progress' WHERE id = '{service}-phase-{N+1}';
全フェーズが完了した場合、以下の最終検証を実施:
# 1. 全体ビルド
dotnet build
# 2. 全テスト実行(テストプロジェクトがある場合)
dotnet test --no-build
# 3. 全体 grep チェック(全禁止パターン)
grep -rn "TODO\|FIXME\|HACK\|UNDONE\|XXX" --include="*.cs" {ServiceDirectory}/
grep -rn "NotImplementedException" --include="*.cs" {ServiceDirectory}/
grep -rn "Console\.Write" --include="*.cs" {ServiceDirectory}/
grep -rn "Password\s*=\s*\"" --include="*.cs" {ServiceDirectory}/
grep -rn "\.\(Result\|Wait\)()" --include="*.cs" {ServiceDirectory}/
grep -rn "\[Inject\]" --include="*.cs" {ServiceDirectory}/
grep -rn "FromSqlRaw.*+" --include="*.cs" {ServiceDirectory}/
grep -rn "DateTime\.Now[^U]" --include="*.cs" {ServiceDirectory}/
⛔ MANDATORY GATE: 全フェーズ完了後、必ず
orchest-code-reviewエージェントをrunSubagentツールで 1 回呼び出すこと。各フェーズごとの実行は不要だが、全フェーズ完了後のこの最終レビューは 絶対にスキップしてはならない。レビュー結果(Critical/High/Medium/Low の件数)が得られない限り、最終レポートの生成に進めない。
orchest-code-review エージェント(14 の専門 Agent)による包括的コードレビューを実施する。
全フェーズの実装が完了した状態のコードに対して アーキテクチャ・DDD・セキュリティ・パフォーマンス・テスト品質 等の多角的な最終検証を行う。
以下の runSubagent 呼び出しを必ず実行すること(省略・スキップ禁止):
runSubagent を使用して orchest-code-review エージェントを呼び出す。
agentName: "orchest-code-review"