Initial commit
This commit is contained in:
222
commands/implement.md
Normal file
222
commands/implement.md
Normal file
@@ -0,0 +1,222 @@
|
||||
---
|
||||
description: 機能を実装する
|
||||
argument-hint: [追加の指示(オプション)]
|
||||
---
|
||||
|
||||
# 機能の実装
|
||||
|
||||
機能仕様書とテストケースに基づいて、機能を実装します。
|
||||
TDDのRed-Green-Refactorサイクルに従って進めます。
|
||||
|
||||
## 追加の指示
|
||||
$ARGUMENTS
|
||||
|
||||
## 実装の指針
|
||||
|
||||
`implementer` エージェントを使って、テストを通すための実装を進めてください。
|
||||
|
||||
## タスク状態の更新
|
||||
|
||||
実装を開始する前に、タスク状態を更新してください:
|
||||
|
||||
```javascript
|
||||
// .tasks.json の該当タスクを更新
|
||||
{
|
||||
"id": 5,
|
||||
"type": "workflow",
|
||||
"name": "実装",
|
||||
"status": "in_progress",
|
||||
"command": "/implement",
|
||||
"startedAt": "[現在時刻]"
|
||||
}
|
||||
```
|
||||
|
||||
実装フェーズでは、サブタスクを作成している場合、各サブタスクの状態も適宜更新してください:
|
||||
- `/update-task [タスクID] in_progress` - タスク開始時
|
||||
- `/complete-task [タスクID]` - タスク完了時
|
||||
|
||||
## Red-Green-Refactor サイクル
|
||||
|
||||
### フェーズ1: Red(失敗するテストの確認)
|
||||
|
||||
まず、作成したテストを実行して失敗を確認します:
|
||||
|
||||
```bash
|
||||
# テストを実行
|
||||
npm test # または pytest, go test, など
|
||||
```
|
||||
|
||||
失敗メッセージから、何を実装すべきかを理解します。
|
||||
|
||||
### フェーズ2: Green(最小限の実装)
|
||||
|
||||
**目標**: テストを通すこと(美しいコードは後回し)
|
||||
|
||||
#### 実装の優先順位
|
||||
|
||||
1. **コアロジックから**
|
||||
- 最も重要な機能
|
||||
- 他の機能が依存する部分
|
||||
|
||||
2. **正常系を先に**
|
||||
- 一般的なユースケース
|
||||
- ハッピーパス
|
||||
|
||||
3. **エラーハンドリング**
|
||||
- 異常系の処理
|
||||
- 例外処理
|
||||
|
||||
4. **エッジケースの対応**
|
||||
- 境界値の処理
|
||||
- 特殊なケース
|
||||
|
||||
#### 実装のステップ
|
||||
|
||||
```
|
||||
1. 1つのテストケースに注目
|
||||
2. そのテストを通す最小限のコードを書く
|
||||
3. テストを実行
|
||||
4. 通ったら次のテストへ
|
||||
5. 失敗したらデバッグして修正
|
||||
6. すべてのテストが通るまで繰り返し
|
||||
```
|
||||
|
||||
### フェーズ3: Refactor(リファクタリング)
|
||||
|
||||
すべてのテストが通ったら、コードを改善します:
|
||||
|
||||
#### リファクタリング観点
|
||||
|
||||
1. **重複の削除**
|
||||
- DRY原則に従う
|
||||
- 共通処理を関数化
|
||||
|
||||
2. **可読性の向上**
|
||||
- わかりやすい変数名
|
||||
- 適切なコメント
|
||||
- 関数の分割
|
||||
|
||||
3. **設計の改善**
|
||||
- 責任の分離
|
||||
- 依存性の注入
|
||||
- パターンの適用
|
||||
|
||||
4. **パフォーマンス最適化**(必要な場合)
|
||||
- アルゴリズムの改善
|
||||
- キャッシングの追加
|
||||
- 不要な処理の削除
|
||||
|
||||
**重要**: リファクタリング後、必ずテストを実行して機能が壊れていないことを確認
|
||||
|
||||
## 実装のベストプラクティス
|
||||
|
||||
### 1. コーディング規約に従う
|
||||
|
||||
プロジェクトの既存のスタイルを確認:
|
||||
- 命名規則
|
||||
- インデント(スペースorタブ)
|
||||
- ファイル構成
|
||||
- コメントの書き方
|
||||
|
||||
### 2. 小さくコミット
|
||||
|
||||
```bash
|
||||
# 機能単位でコミット
|
||||
git add [変更ファイル]
|
||||
git commit -m "feat: [機能の説明]"
|
||||
|
||||
# テストが通る状態でコミット
|
||||
# こまめにコミットして履歴を残す
|
||||
```
|
||||
|
||||
### 3. ドキュメントを書く
|
||||
|
||||
```javascript
|
||||
/**
|
||||
* ユーザー情報を取得する
|
||||
* @param {number} userId - ユーザーID
|
||||
* @returns {Promise<User>} ユーザー情報
|
||||
* @throws {Error} ユーザーが見つからない場合
|
||||
*/
|
||||
async function getUser(userId) {
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
### 4. エラーハンドリング
|
||||
|
||||
```javascript
|
||||
// 適切なエラーメッセージ
|
||||
if (!userId) {
|
||||
throw new Error('User ID is required');
|
||||
}
|
||||
|
||||
// エラーのログ記録
|
||||
try {
|
||||
// ...
|
||||
} catch (error) {
|
||||
logger.error('Failed to fetch user', { userId, error });
|
||||
throw error;
|
||||
}
|
||||
```
|
||||
|
||||
### 5. 依存関係の管理
|
||||
|
||||
新しいライブラリを追加する場合:
|
||||
```bash
|
||||
# 必要性を検討
|
||||
# ライセンスを確認
|
||||
# バージョンを固定
|
||||
npm install --save-exact package-name
|
||||
```
|
||||
|
||||
## 実装中のチェックリスト
|
||||
|
||||
- [ ] テストケースを確認した
|
||||
- [ ] 最小限の実装から始めた
|
||||
- [ ] テストを頻繁に実行している
|
||||
- [ ] コーディング規約に従っている
|
||||
- [ ] 適切なエラーハンドリングをしている
|
||||
- [ ] 必要なコメント・ドキュメントを書いた
|
||||
- [ ] リファクタリングをした
|
||||
- [ ] すべてのテストが通る
|
||||
- [ ] 既存のテストも壊していない
|
||||
|
||||
## 次のステップ
|
||||
|
||||
実装が完了したら:
|
||||
|
||||
1. **すべてのテストを実行**
|
||||
```bash
|
||||
npm test
|
||||
npm run test:coverage # カバレッジも確認
|
||||
```
|
||||
|
||||
2. **コードレビュー依頼**
|
||||
- ユーザーにレビューを依頼
|
||||
- フィードバックを反映
|
||||
|
||||
3. **ドキュメント更新**
|
||||
- README
|
||||
- CHANGELOG
|
||||
- APIドキュメント
|
||||
|
||||
4. **タスクの完了**
|
||||
```javascript
|
||||
// .tasks.json の該当タスクを更新
|
||||
{
|
||||
"id": 5,
|
||||
"status": "completed",
|
||||
"completedAt": "[現在時刻]"
|
||||
}
|
||||
```
|
||||
|
||||
5. **完了報告**
|
||||
- 実装内容のサマリー
|
||||
- テスト結果
|
||||
- 今後の課題(あれば)
|
||||
|
||||
**注意**:
|
||||
- `post-implementation` フックが自動的に実行され、実装の品質チェックとテストの実行を行います
|
||||
- タスク進捗は `/list-tasks` で確認できます
|
||||
- すべてのサブタスクが完了していることを確認してください
|
||||
Reference in New Issue
Block a user