mcpField
G
game-review

game-review

github.com/fcsouzaテスト・品質2443 回インストール1 週間前に更新
リポジトリ

game-review について

ゲームのコードベースを対象とする読み取り専用のレビュー用スキルです。エンジニアリング上のリスク、物語の整合性、スコープ逸脱を調べ、ファイル位置と修正案を含む指摘を分類して出力します。

主な機能

  1. 01プロジェクト計画と構築記録の確認
  2. 02TypeScript の設計リスクのレビュー
  3. 03世界設定とクエストの整合性確認
  4. 04MVP スコープからの逸脱検出
  5. 05修正案とスキル参照付きの指摘出力

活用シーン

  1. 01認証や決済コードの監査
  2. 02マルチプレイヤー状態処理のレビュー
  3. 03クエストと世界設定資料の照合
  4. 04MVP 計画外の機能の検出

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/fcsouza/agent-skills --skill game-review

インストール後、Claude Code で/game-reviewを入力して読み込まれたか確認します。

詳細

ゲームレビュー — コード監査

前提条件

  • 検出されたコード領域に基づいて、関連するエンジニアリングおよび設計スキルを適用します(フェーズ 0 を参照)

フェーズ 0 — コンテキストの読み込み(サイレント)

  1. docs/mvp-first-draft.md が存在する場合は読み込みます(比較のためのアーキテクチャ上の意図を確認できます)
  2. docs/build-registry.md が存在する場合は読み込みます(実装済みとモックの状況を確認できます)
  3. ユーザーのメッセージから対象範囲を判断します。
    • コンポーネント名またはパスが指定されている場合:src/[component]/ または指定されたパスに注目します
    • 指定がない場合:src/ 全体をレビューします
  4. 対象範囲をスキャンし、存在する技術領域(認証、決済、WebSocket、Redis、BullMQ、クエストなど)を特定します
  5. 検出された領域に関連するスキルのみを適用します。
    • 認証を検出 → betterauth-integration スキルを適用します
    • 決済/Stripe を検出 → stripe-game-payments スキルを適用します
    • WebSocket/ゲーム状態を検出 → game-state-sync スキルを適用します
    • Redis を検出 → redis-game-patterns スキルを適用します
    • BullMQ を検出 → bullmq-game-queues スキルを適用します
    • クエスト/ナラティブのコードを検出 → quest-narrative-coherence スキルを適用します
    • データベース/Drizzle を検出 → postgres-game-schema スキルを適用します
    • マッチメイキングを検出 → matchmaking-system スキルを適用します
    • アナリティクスを検出 → gameplay-analytics スキルを適用します

フェーズ 1 — エンジニアリングレビュー

対象範囲内の TypeScript ファイルをすべて読みます。以下のチェックを適用します。各指摘事項について、重大度、ファイルパス、行番号(概算)、説明、修正案、および違反しているスキルを記録します。

状態の権威性(マルチプレイヤー/WebSocket コード)
  • 🔴 CRITICAL:クライアントからの message.userId または message.playerId を信頼する WebSocket ハンドラーは、必ずサーバーセッションから ID を取得する必要があります
  • 🔴 CRITICAL:サーバーによる検証なしに、クライアントメッセージから直接ゲーム状態が変更される処理
  • 🟡 WARNING:正当な理由なくゲームループのティックレートが 60Hz を超えている
データベース/スキーマ
  • 🔴 CRITICAL:Drizzle の sql タグ付きヘルパー以外で、生の SQL テンプレートリテラル(sql\SELECT...``)を使用している場合は、Drizzle の型付きクエリビルダーを使用する必要があります
  • 🟡 WARNING:プレイヤー向けテーブル(players、inventory、characters)にソフトデリート用の deletedAt カラムがない
  • 🟡 WARNING:JSONB にするべきゲーム固有属性のカラム名がハードコードされている(例:manaPoints、fireResistance がトップレベルのカラムになっている)
  • 🟢 SUGGESTION:イベント/ログテーブルに (playerId, type) の複合インデックスがない
認証とセッション
  • 🔴 CRITICAL:アクターの特定に req.body.userId または req.query.userId を読み取るエンドポイントは、auth.api.getSession() を使用してセッションから特定する必要があります
  • 🔴 CRITICAL:有効期限を確認せずに JWT を検証している
  • 🟡 WARNING:/auth/login または /auth/signup ルートにレート制限がない
  • 🟡 WARNING:管理者/モデレーターのロールが Cookie または JWT クレームに保存されている(リクエストごとに DB から取得する必要があります)
決済(Stripe)
  • 🔴 CRITICAL:チェックアウト成功後のリダイレクト(GET /success)を契機に購入内容を付与している場合は、Webhook を契機にする必要があります
  • 🔴 CRITICAL:Webhook ハンドラーで署名検証用の stripe.webhooks.constructEvent() を呼び出していない
  • 🔴 CRITICAL:クライアント側のコード(public/、client/、frontend/ 内のファイル)から Stripe のシークレットキーを参照している
  • 🟡 WARNING:checkout.session.completed イベントの冪等性チェックがないため、Webhook の再送時に報酬を二重付与する可能性があります
ジョブキュー(BullMQ)
  • 🟡 WARNING:attempts の設定がない BullMQ プロセッサは、すべてのジョブに再試行ポリシーを設定する必要があります
  • 🟡 WARNING:backoff の設定がない BullMQ プロセッサは、指数バックオフを使用する必要があります
  • 🟢 SUGGESTION:キューの肥大化を防ぐため、removeOnComplete と removeOnFail オプションの追加を検討してください
Redis
  • 🟡 WARNING:Redis キーが {entity}:{id}:{field} の命名規則に従っていない
  • 🟡 WARNING:Redis に保存されたセッションキーに EXPIRE が設定されていない(一時的な状態には TTL が必要です)
  • 🟢 SUGGESTION:リーダーボードのソート済みセットでは、スコアが向上した場合にのみ更新するよう ZADD NX または GT を使用してください
全般的なセキュリティ
  • 🔴 CRITICAL:.env の値やシークレットがソースファイルにハードコードされています
  • 🔴 CRITICAL:ユーザー入力を引数として eval() または Function() コンストラクターが呼び出されています
  • 🟡 WARNING:ユーザーが制御できるデータを受け付ける API エンドポイントで、入力検証が不足しています

Phase 2 — ナラティブの整合性チェック

docs/world-lore.md と docs/quest-registry.md の両方が存在しない場合は、次を出力します。 📋 Narrative coherence check: skipped (docs/quest-registry.md not found — run the game-quest skill to create it) その後、Phase 3 に進みます。

いずれかのファイルが存在する場合:

  1. docs/world-lore.md と docs/quest-registry.md を読み込みます
  2. ソースファイルからクエスト ID、キャラクター名、派閥名、場所の名前を検索します
  3. コード内にハードコードされたクエスト/キャラクター/派閥/場所の文字列が、世界設定に登録された内容と矛盾していないか確認します
  4. 次の形式で報告します:⚠️ LORE CONFLICT: Character "Mira" referenced in src/quests/main.ts but not registered in quest-registry.md

Phase 3 — MVP スコープ逸脱チェック

docs/mvp-first-draft.md が存在しない場合は、次を出力します。 📋 Scope audit: skipped (docs/mvp-first-draft.md not found — run the game-architect skill first) その後、Phase 4 に進みます。

  1. docs/mvp-first-draft.md のセクション 10(対象外)を読み込みます
  2. src/ を検索し、明示的に延期された機能が実装されていないか確認します
  3. 次の形式で報告します:⚠️ SCOPE DRIFT: [feature] found in [file] but listed as out-of-scope in MVP plan Section 10

また、docs/build-registry.md で「built」とマークされているものの、MVP のビルド手順(セクション 9)に含まれていないコンポーネントも確認します。これらは過剰な作り込みの可能性があります。

Phase 4 — レポートの出力

次の形式でレビュー結果を出力します。

# Game Review Report
Scope: [path reviewed]
Generated: [timestamp]

## Summary
🔴 Critical: X | 🟡 Warning: Y | 🟢 Suggestion: Z

次に、すべての指摘事項をカテゴリ(Engineering、Narrative、Scope)ごとに分類して列挙します。各指摘事項について:

### [🔴/🟡/🟢] [Title]
**File:** `src/path/to/file.ts` (line ~42)
**Issue:** [what's wrong]
**Fix:** [concrete fix description]
**Skill ref:** [→ stripe-game-payments: webhook-first fulfillment]

最後に次を出力します。

## Next Steps
- Fix all 🔴 CRITICAL issues before committing
- Review the [top-violation-category] skill for correct patterns
- Run the game-build skill to rebuild any component with critical violations

カテゴリに該当する問題がない場合は、次を出力します。

### ✅ [Category] — No issues found

厳守事項

  1. コードを変更しないでください — これは読み取り専用の監査コマンドです。指摘事項のみを出力してください。
  2. 誤検出を報告しないでください — 違反に見えるパターンでも、文脈上問題がなければ報告を省略するか、🟢 に引き下げてください。
  3. 必ずスキルへのリンクを付けてください — 各指摘事項では、正しいパターンを定めているスキルを参照してください。
  4. 具体的に記述してください — 各指摘事項にファイルパスとおおよその行番号を記載してください。
  5. 重要な情報を優先してください — 実際に重大な問題が 5 件あるほうが、ノイズとなる提案が 30 件あるよりも有用です。

コメント