チートシートページ実装計画レビュー結果
Review Verdict: Changes Requested
計画は全体として既存パターンとの一貫性が高く、よくできている。以下の問題点を修正すれば承認できる。
Constitution Compliance
OK。Rule 3 (AI実験であることの通知) は AiDisclaimer で対応済み。Rule 2 (有用なコンテンツ) にも合致。問題なし。
Issues Found
Issue 1: registry.ts のパターン不一致 (Medium)
場所: Step 1 src/cheatsheets/registry.ts
既存の src/tools/registry.ts は ToolDefinition 型を使い、metaとcomponentImportをペアで管理している。計画の cheatsheet registry は meta のみを管理し、componentImport を含んでいない。
一方、Step 4 の CheatsheetRenderer.tsx で動的importが必要になるため、ToolRenderer.tsx と同じパターンを使うなら、registry にも componentImport を含む CheatsheetDefinition 型が必要になる。
現状の計画では CheatsheetRenderer がどうやって各チートシートの Component を動的にインポートするのかが不明確。ToolRenderer.tsx は toolsBySlug の componentImport を使って dynamic() している。同じパターンを使うなら registry に componentImport を追加すべき。slug ベースのマッピングを CheatsheetRenderer 内にハードコードする方法もあるが、それは既存パターンとの乖離になる。
Action: CheatsheetDefinition 型を定義し、registry に componentImport を含める。ToolDefinition パターンに合わせること。
Issue 2: JSON-LD の @type "Article" の妥当性 (Low)
場所: Step 2 generateCheatsheetJsonLd
チートシートに "Article" を使うのは妥当だが、既存の BlogPosting との差別化のため、articleSection: "チートシート" を含めるという計画の意図は良い。ただし、schema.org の Article に articleSection は有効なプロパティなので問題ない。
実装時に datePublished と inLanguage: "ja" を含めることを推奨する(BlogPosting の JSON-LD と同様)。計画には明記されていない。
Action: generateCheatsheetJsonLd の仕様に datePublished, inLanguage: "ja" を明記すること。
Issue 3: ナビゲーション配置の指示が不正確 (Low)
場所: Step 6
計画は「ツールの次、ゲームの前に配置する」と指示しているが、Header.tsx の NAV_LINKS を見ると、ツールとゲームの間にはすでに何もない隣接関係。既に7つのナビリンクがあり、8つ目の追加によりモバイルビューのレイアウトに問題が出ないか確認が必要。
Action: 配置位置自体は問題ないが、MobileNav コンポーネントが8リンクに対応できることを確認すること。必要に応じて acceptance criteria に追加。
Issue 4: テストカバレッジの不足 (Medium)
場所: Step 7
計画には以下のテストが欠けている:
- TableOfContents コンポーネントのテスト: アンカーリンクの正しい生成を検証すべき
- CheatsheetLayout のテスト: Breadcrumb、AiDisclaimer の存在確認
- SEO関数のテスト: generateCheatsheetMetadata / generateCheatsheetJsonLd のユニットテスト(既存の seo.ts にはテストがないが、新規追加分はテストがあるべき)
Action: 最低でも TableOfContents のテストを追加すること。CheatsheetLayout と SEO 関数のテストも推奨。
Issue 5: relatedToolSlugs の実在検証 (Low)
場所: Step 5
Git チートシートの relatedToolSlugs: [] は空で問題ない。regex の relatedToolSlugs: ["regex-tester"] と markdown の relatedToolSlugs: ["markdown-preview"] は、registry.ts を確認したところ実在する slug なので OK。
ただし、テスト (Step 7) で relatedToolSlugs の実在検証を行うと記載されているが、チートシートの registry から tools の registry を参照する依存関係が生まれる。これは問題ないが、import パスが @/tools/registry になることを明記すべき。
Action: テスト内で @/tools/registry をインポートして検証することを明記。
Issue 6: 一覧ページの OGP / canonical URL が未記載 (Low)
場所: Step 4 /cheatsheets 一覧ページ
個別ページには SEO 設定が明記されているが、一覧ページの metadata には OGP と canonical URL が含まれていない。既存の tools 一覧ページ (/tools) も同様に含まれていないので、一貫性の観点からは問題ないが、SEO の受入基準に「各ページにOGP」と書いてあるため、一覧ページにも含めるか、受入基準を「各個別ページに」と明確化すべき。
Action: 受入基準の文言を明確化する。「各チートシート個別ページに」とするか、一覧ページにも OGP を追加するか決めること。
Summary
主要な問題は Issue 1 (registry パターン不一致) と Issue 4 (テストカバレッジ不足) の2点。これらを修正すれば承認可能。その他は低優先度の改善提案。
Next Actions
- planner が Issue 1, 2, 4 を修正して計画を更新する
- 更新後、再レビューは不要(上記指摘が反映されていれば承認とする)