Files
gh-masseater-claude-code-pl…/commands/steering.md
2025-11-30 08:39:29 +08:00

503 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
description: プロジェクト全体のステアリングドキュメントを作成・更新
---
# プロジェクト全体のステアリングドキュメント管理
このコマンドは、プロジェクト全体の永続的なコンテキスト(プロダクト方針、技術スタック、プロジェクト構造)をステアリングドキュメントとして管理します。
**重要**: 全ての `/sdd:*` コマンドは自動的にステアリングドキュメントを読み込み、プロジェクトの一貫性を保ちます。
## 実行手順
### 1. モード判定
`specs/_steering/` ディレクトリの状態を確認:
- **Bootstrap Mode初期作成**: ディレクトリが存在しないか、コアファイルが不足
- **Sync Mode更新**: 全てのコアファイルが存在
**コアファイル**:
- `product.md` - プロダクト方針、ターゲットユーザー、ビジネス目標
- `tech.md` - 技術スタック、アーキテクチャパターン、開発標準
- `structure.md` - プロジェクト構造、命名規則、コード組織原則
- `principles.md` - 開発原則TDD、SOLID、TypeScript固有の原則など
### 2. Bootstrap Mode初期作成
#### 2.1 既存プロジェクト情報の収集
以下の情報を収集してステアリングドキュメント生成に活用:
**プロダクト情報**:
- `README.md` の存在確認と内容読み取り
- パッケージマニフェスト(`package.json`, `pyproject.toml`, `Cargo.toml` など)からプロジェクト名と説明を抽出
**技術スタック情報**:
- `package.json` - Node.js依存関係、スクリプト、エンジンバージョン
- `tsconfig.json` / `jsconfig.json` - TypeScript/JavaScript設定
- `pyproject.toml` / `requirements.txt` - Python依存関係
- `Cargo.toml` - Rust依存関係
- `go.mod` - Go依存関係
- `.ruby-version` / `Gemfile` - Ruby依存関係
- ビルドツール設定(`vite.config.ts`, `webpack.config.js`, `next.config.js` など)
- データベース関連(`prisma/schema.prisma`, ORM設定など
**プロジェクト構造情報**:
- ルートディレクトリの構造(`ls -la`
- 主要ディレクトリ(`src/`, `lib/`, `app/`, `tests/` など)の存在確認
- ファイル命名パターンの分析kebab-case, camelCase, snake_case
**注意**: ファイルが見つからない場合はスキップし、テンプレート構造で生成
#### 2.2 ディレクトリ作成
```bash
mkdir -p specs/_steering
```
#### 2.3 ステアリングドキュメント生成
以下の3つのファイルを生成収集した情報を反映
##### `specs/_steering/product.md`
```markdown
# Product Overview
## Product Purpose
[プロジェクトの目的]
- README.mdやpackage.jsonの説明から抽出
- 存在しない場合はプレースホルダー
**Vision (North Star)**:
[プロダクトのビジョン]
**解決する問題**:
- [課題1]
- [課題2]
## Target Users
**Primary Archetype**: [主要ユーザー像]
- [特徴1]
- [特徴2]
**ニーズと課題**:
- **ニーズ**: [ニーズ]
- **課題**: [課題]
## Key Features
このプロジェクトが提供する主要機能:
1. **[機能カテゴリ1]**: [説明]
2. **[機能カテゴリ2]**: [説明]
## Business Objectives
- **[目標1]**: [説明]
- **[目標2]**: [説明]
## Success Metrics
**Quantitative Metrics**:
- **[指標名]**: [測定方法]
**Qualitative Metrics**:
- **[指標名]**: [評価基準]
## Product Principles
1. **[原則1]**: [説明]
2. **[原則2]**: [説明]
## Non-Goals / Guardrails
このプロジェクトは以下の領域には**意図的に関与しない**
- **[非対象1]**: [理由]
- **[非対象2]**: [理由]
```
##### `specs/_steering/tech.md`
```markdown
# Technology Stack
## Architecture
[システムアーキテクチャの概要]
- 既存プロジェクト構造から推測
- モノリス/マイクロサービス/JAMstack など
## Core Technologies
### Primary Language(s)
- **Language**: [検出された言語]
- **Runtime**: [検出されたランタイム]
- **Framework**: [検出されたフレームワーク]
### Key Dependencies/Libraries
[package.jsonなどから抽出した主要ライブラリ]
## Development Standards
### Type Safety
[型安全性に関する方針]
- TypeScript strict mode の使用状況
- 型定義の要求レベル
### Code Quality
[コード品質ツール]
- ESLint, Prettier, Ruff などの設定状況
### Testing
[テスト戦略]
- テストフレームワークJest, pytest など)
- カバレッジ要求
## Development Environment
### Required Tools
[必要なツールとバージョン]
- Node.js, Python, Rust などのバージョン要求
- package.jsonのenginesフィールドから抽出
### Common Commands
```bash
# Dev: [開発サーバー起動コマンド]
# Build: [ビルドコマンド]
# Test: [テストコマンド]
```
## Key Technical Decisions
[重要な技術的決定とその理由]
1. **[決定事項1]**:
- **理由**: [理由]
- **代替案**: [検討した代替案]
- **トレードオフ**: [トレードオフ]
```
##### `specs/_steering/structure.md`
```markdown
# Project Structure
## Directory Organization
```
[プロジェクト名]/
├── [検出されたディレクトリ構造]
├── specs/
│ └── _steering/ # ステアリングドキュメント
└── ...
```
**組織化の原則**:
- **[原則1]**: [説明]
- **[原則2]**: [説明]
## Naming Conventions
### ファイル名
- **[パターン1]**: [説明](例: kebab-case.ts
- **[パターン2]**: [説明](例: PascalCase.tsx
### ディレクトリ名
- **[パターン]**: [説明]
## Code Organization Principles
1. **単一責任**: [プロジェクト固有の適用方法]
2. **モジュール性**: [モジュール分割の基準]
3. **再利用性**: [共通コンポーネントの配置]
## Module Boundaries
[モジュール間の境界定義]
## File Size Guidelines
- **推奨サイズ**: [行数]
- **最大サイズ**: [行数]
## Documentation Standards
### プロジェクトレベル
- **README.md**: [役割]
- **[その他ドキュメント]**: [役割]
### コードレベル
- **コメント**: [コメント規約]
- **型定義**: [型定義の要求]
```
##### `specs/_steering/principles.md`
```markdown
# 開発原則
このドキュメントは、プロジェクト全体で共通して適用される開発原則を定義します。
すべてのPhase実装とタスク実行において、これらの原則に従ってください。
## TDDTest-Driven Development
### 基本サイクル: Red-Green-Refactor
1. **Red失敗するテストを書く**
- 実装前に期待する動作を定義するテストを作成
- テストが失敗することを確認(実装がまだないため)
- テストは具体的で検証可能な振る舞いを記述
2. **Greenテストを通す最小限の実装**
- テストを通すための最小限のコードを実装
- この段階では完璧を求めず、まず動作することを優先
- すべてのテストが通ることを確認
3. **Refactorコードを改善**
- テストが通る状態を維持しながらコードを改善
- 重複の除去、命名の改善、構造の最適化
- パフォーマンスやメンテナンス性の向上
### TDDの実践ルール
- **型定義だけを先に作ることは禁止**
- 型定義は実装と共に作成し、実際の使用に基づいて定義する
- 抽象的な型定義の事前作成は過剰設計につながる
- **テストファースト原則**
- 常にテストから始める
- テストなしでの実装追加は技術的負債となる
- **小さなステップで進める**
- 一度に大きな変更をしない
- 各サイクルは15分以内を目安
## SOLID原則
### Single Responsibility Principle単一責任の原則
- クラス・関数は単一の責任のみを持つ
- 変更理由は1つだけにする
- 例: ユーザー認証とデータベース操作を分離
### Open/Closed Principle開放閉鎖の原則
- 拡張に対して開いている
- 修正に対して閉じている
- 新機能追加時に既存コードを修正しない設計
### Liskov Substitution Principleリスコフの置換原則
- 派生クラスは基底クラスと置換可能
- 契約を破らない継承関係
- 例: 期待される振る舞いを維持した実装
### Interface Segregation Principleインターフェース分離の原則
- クライアントが使用しないメソッドへの依存を強制しない
- 大きな抽象より小さな特定の抽象
- **警告**: インターフェース(抽象)を作ることが目的化してはいけない
### Dependency Inversion Principle依存性逆転の原則
- 上位モジュールは下位モジュールに依存しない
- 両方とも抽象に依存する
- **警告**: 実装が1つしかない場合は抽象化は不要YAGNI原則
### SOLID原則の落とし穴
**過度な抽象化を避ける**:
- インターフェース(抽象)を作ることが目的になってはいけない
- 実装と乖離した抽象は技術的負債となる
- 実際に必要になってから抽象化するYAGNI原則を参照
## YAGNI原則You Aren't Gonna Need It
### 基本理念
- 実際に必要になるまで機能を追加しない
- 「将来使うかもしれない」という理由で実装しない
- シンプルさを保つことを最優先とする
### 適用例
- **過度な抽象化を避ける**: 実装が1つしかないのに抽象層を作らない
- **汎用化を避ける**: 現在の要件に必要な分だけ実装する
- **設定の外部化を避ける**: 変更の可能性が低いものはハードコードで十分
- **将来の拡張を予測しない**: 必要になったときにリファクタリング
### YAGNIの利点
- コードベースがシンプルに保たれる
- 開発速度が向上する
- 保守が容易になる
- 実際に使われないコードを書く無駄を削減
## TypeScript固有の原則
### 型の扱い
- `any`型の使用は絶対禁止
- `interface`より`type`を優先使用
- `interface`は既存ライブラリの型拡張時のみ使用
- 使用時は必ずコメントで理由を明記
- 型推論を活用し、必要最小限の型注釈
### インポート/エクスポート
- Barrel import/exportは禁止
- 各モジュールから直接インポート
- 循環参照を避ける設計
## コード品質基準
### 関数型プログラミングの活用
- 配列操作は`map``filter``reduce`を優先
- `push`などの破壊的操作は避ける
- イミュータブルなデータ構造を使用
### エラーハンドリング
- 例外は明示的にキャッチし適切に処理
- エラーの種類に応じた適切な対応
- ユーザーへの明確なエラーメッセージ
### セキュリティ
- SQLインジェクション対策
- XSS対策
- 認証・認可の適切な実装
- 機密情報の適切な管理
## アンチパターンと回避方法
### 過度な抽象化
- **問題**: 将来の要件を予測した過剰な設計
- **回避**: YAGNIYou Aren't Gonna Need It原則の適用
### 神オブジェクト
- **問題**: 多くの責任を持つ巨大なクラス
- **回避**: 単一責任の原則に従った分割
### コピペプログラミング
- **問題**: 同じコードの重複
- **回避**: DRYDon't Repeat Yourself原則の適用
### マジックナンバー
- **問題**: ハードコードされた値
- **回避**: 定数として定義し意味を明確化
## 実装時の確認事項
各タスク実装時に以下を確認:
- [ ] TDDサイクルに従っているか
- [ ] SOLID原則に違反していないか
- [ ] 型安全性が保たれているか
- [ ] エラー処理が適切か
- [ ] セキュリティ上の問題はないか
- [ ] テストカバレッジは十分か
```
#### 2.4 完了報告
```markdown
✅ ステアリングドキュメントを作成しました
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📍 作成先: specs/_steering/
📝 作成されたファイル:
- product.md (プロダクト方針)
- tech.md (技術スタック)
- structure.md (プロジェクト構造)
- principles.md (開発原則)
💡 次のアクション:
1. 各ドキュメントの内容を確認・編集してください
2. プロジェクト固有の情報を追加してください
3. `/sdd:init-task` でタスクを作成できます
⚠️ 重要:
- 全ての /sdd:* コマンドは自動的にこれらのドキュメントを読み込みます
- ステアリングドキュメントはプロジェクトの「永続的メモリ」として機能します
- プロジェクトの方針や技術スタックが変更された場合は、このコマンドを再実行してください
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```
### 3. Sync Mode更新
既存のステアリングドキュメントを最新の状態に更新:
#### 3.1 既存ドキュメントの読み込み
- `specs/_steering/product.md`
- `specs/_steering/tech.md`
- `specs/_steering/structure.md`
- `specs/_steering/principles.md`
#### 3.2 プロジェクトの変更検出
以下の変更を検出:
**技術スタック変更**:
- 新しい依存関係の追加
- 既存依存関係のバージョン更新
- フレームワークの変更
**プロジェクト構造変更**:
- 新しいディレクトリの追加
- ファイル命名パターンの変化
- モジュール構成の変更
#### 3.3 更新の提案
変更が検出された場合、AskUserQuestionツールで確認
```
以下の変更が検出されました。ステアリングドキュメントを更新しますか?
変更内容:
1. tech.md: 新しい依存関係 "react-query" が追加されました
2. structure.md: 新しいディレクトリ "hooks/" が検出されました
選択肢:
- はい(推奨): ステアリングドキュメントを更新
- いいえ: 現状を維持
- 個別に確認: 各変更を個別に確認
```
#### 3.4 ドキュメント更新
ユーザーの承認に基づいて該当ドキュメントを更新
#### 3.5 完了報告
```markdown
✅ ステアリングドキュメントを更新しました
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📍 更新先: specs/_steering/
📝 更新されたファイル:
- tech.md (依存関係を更新)
- structure.md (ディレクトリ構造を更新)
🔍 検出された変更:
- 新しい依存関係: react-query, zustand
- 新しいディレクトリ: hooks/, contexts/
💡 次のアクション:
- 更新内容を確認してください
- 必要に応じて手動で調整してください
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```
## 注意事項
- **⚠️ 重要**: ステアリングドキュメントはプロジェクト全体の「唯一の真実の源」として機能します
- **⚠️ 重要**: 全ての `/sdd:*` コマンドは自動的にステアリングドキュメントを読み込みます
- 既存プロジェクトの場合、Bootstrap Modeで自動検出された内容を必ず確認・調整してください
- プロジェクトの方針や技術スタックが大きく変わった場合は、このコマンドを再実行してください
- ステアリングドキュメントは抽象的なレベルを保ち、具体的なコマンド名やファイル名は列挙しないでください
## 矛盾チェック(必須)
ステアリングドキュメント作成後、3つのドキュメント間の矛盾がないか必ず contradiction-checker SubAgent を使用して確認してください:
```bash
# contradiction-checker SubAgentを使用指摘のみ、修正は行わない
Task(contradiction-checker): specs/_steering/ の全ドキュメント間の矛盾をチェックしてください。product.md、tech.md、structure.md、principles.mdの整合性を確認してください。
```