Agent skill
spec-design-guide
仕様(Why)と設計(How)を記録し、Living Documentation原則でコードと常に同期させる
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/data/spec-design-guide
SKILL.md
Spec-Design-Guide Skill
このスキルは、プロジェクトの仕様・設計ドキュメント作成をガイドし、Living Documentation原則に基づいてドキュメントとコードを同期管理します。
エイリアス
このスキルは以下のように呼ぶことができます:
spec-design-guide→ 「仕様設計ガイド」sdg→ 「仕様設計ガイド」の略称
目的
実装前に仕様と設計を明確にし、実装の助けとなるドキュメントを体系的に管理します。 ドキュメントは「生きた写像」としてコードと常に同期し、技術的負債を防ぎ、生きたメモリーとして機能します。
ストレージ
重要: すべてのドキュメントはCreo Memoriesに保存されます。
- ドメイン:
sdg(domain:019b1c05-b0d6-7eb8-95a6-1aa0c5601338) - カテゴリ:
spec,design,guide - タグ: 機能名、技術名などで分類
Creo Memoriesとの連携
ドキュメントの操作にはCreo Memories MCPツールを使用します:
// ドキュメントを保存
remember_context({
content: "# Core Concepts - 仕様書\n...",
category: "spec",
tags: ["core-concepts", "architecture"],
metadata: {
title: "Core Concepts - 仕様書",
docType: "spec"
}
})
// ドキュメントを検索
recall_relevant({
sessionId: "...",
query: "認証システム設計",
threshold: 0.7
})
// カテゴリで一覧
search_memories({
category: "spec",
limit: 20
})
スキルの起動タイミング
このスキルは以下の場合に自動的に適用されます:
- ✅ コード変更・追加を行う際
- ✅ 新機能の設計・実装を行う際
- ✅ 既存機能のリファクタリングを行う際
- ✅ バグ修正で設計に影響がある際
ユーザーがスキルを明示的に呼び出す方法:
/spec-design-guideまたは/sdgコマンド- 「spec」「design」「SPEC.md」「設計書」などのキーワードを含む質問
関連リファレンス
- Living Documentation原則 - ドキュメントとコードの同期管理の詳細
ドキュメントの役割
spec(カテゴリ)- コンセプト、仕様、哲学
What & Why - 何を作るか、なぜ作るか
- コンセプト・ビジョン
- 設計哲学・原則
- 機能仕様
- ユーザー体験
design(カテゴリ)- モデル、手法、実装
How - どう作るか
- データモデル
- アーキテクチャ
- 実装手法
- 技術的詳細
guide(カテゴリ)- ガイド
Usage - どう使うか
- 使い方
- ベストプラクティス
- トラブルシューティング
spec のテンプレート
目的: コンセプト、仕様、哲学
カテゴリ: spec
タグ: 機能名(例: core-concepts, storage, mcp)
# {機能名} - 仕様書
## コンセプト
### ビジョン
この機能が目指すもの、解決する問題、提供する価値。
### 哲学・設計原則
- 原則1: なぜこの設計を選んだか
- 原則2: トレードオフと判断基準
- 原則3: ユーザー体験への配慮
### 他との違い
既存のソリューションとの違い、独自性。
### システム概要図
\`\`\`mermaid
flowchart TD
A[入力] --> B[処理]
B --> C[出力]
B --> D{条件分岐}
D -->|Yes| E[処理A]
D -->|No| F[処理B]
\`\`\`
## 仕様
### 機能仕様
#### FS-001: 機能名
**目的**: この機能が何をするか
**入力/出力**:
- 入力: ...
- 出力: ...
**振る舞い**:
1. ステップ1
2. ステップ2
**制約**:
- 制約1
### インターフェース仕様
\`\`\`typescript
// ユーザーが使う形式
function example() {
// ...
}
\`\`\`
### 非機能仕様
- **パフォーマンス**: 期待される性能
- **セキュリティ**: セキュリティ考慮事項
- **互換性**: 後方互換性の方針
## 哲学的考察
### なぜこの仕様か
選択の理由、背景にある思想。
### ユーザー体験
ユーザーがどう感じるか、どう使うか。
### 進化の方向性
将来どう発展させるか、拡張の余地。
## 変更履歴
### YYYY-MM-DD: 変更内容
- **理由**: なぜこの変更が必要だったか
- **影響**: どのコンポーネントに影響するか
- **コミット**: コミットハッシュ
design のテンプレート
目的: モデル、手法、実装
カテゴリ: design
タグ: 設計種類(例: architecture, data-model, api)
# {設計種類} - 設計書
## 設計思想: Simplicity(シンプルさ)
シンプルなコードを実現するため、以下の原則に従う。
### 型の分類
基本的に、全ての型は以下に分類される:
- **data**: 値を保持する
- **calculations**(主に同期): 値を計算する
- **actions**(主に非同期): 値を操作する
calculations, actionsは関数的に実装されるのが望ましい。
### Straightforward原則
入力から出力までの経路を直線的に、最小限のステップになるように、ロジックを組み立てる。
**これらの原則を守ることで、理解しやすく保守しやすいシンプルなコードが実現される。**
## データモデル
### 構造定義
\`\`\`typescript
interface Example {
field1: Type1
field2: Type2
}
\`\`\`
### モデルの関係性
\`\`\`mermaid
classDiagram
class ModelA {
+field1: Type1
+field2: Type2
+method1()
}
class ModelB {
+field1: Type1
+method1()
}
class ModelC {
+field1: Type1
}
ModelA --> ModelB : uses
ModelA --> ModelC : contains
\`\`\`
## アーキテクチャ
### コンポーネント構成
\`\`\`mermaid
flowchart LR
Input[入力] --> Parser[パーサー]
Parser --> Validator[バリデーター]
Validator --> Processor[プロセッサー]
Processor --> Output[出力]
\`\`\`
### コンポーネント詳細
#### Component A
**責務**: ...
**インターフェース**:
\`\`\`typescript
interface ComponentA {
method(): Promise<T>
}
\`\`\`
## 実装手法
### アルゴリズム
処理の流れ、アルゴリズムの選択理由。
\`\`\`mermaid
sequenceDiagram
participant User
participant System
participant Database
User->>System: リクエスト
System->>Database: データ取得
Database-->>System: データ
System->>System: 処理
System-->>User: レスポンス
\`\`\`
### エラーハンドリング
\`\`\`typescript
class MyError extends Error {
constructor(message: string) {
super(message)
}
}
\`\`\`
### パフォーマンス最適化
- 最適化ポイント1
- 最適化ポイント2
## テスト戦略
### ユニットテスト
- テスト対象1
- テスト対象2
### 統合テスト
- シナリオ1
- シナリオ2
## 実装チェックリスト
- [ ] データモデル実装
- [ ] コア機能実装
- [ ] エラーハンドリング
- [ ] テスト作成
- [ ] ドキュメント更新
## 変更履歴
### YYYY-MM-DD: 変更内容
- **理由**: なぜこの変更が必要だったか
- **影響**: どのコンポーネントに影響するか
- **コミット**: コミットハッシュ
guide のテンプレート
目的: 実用的な使い方ガイド
カテゴリ: guide
タグ: トピック名(例: getting-started, deployment, troubleshooting)
# {トピック名}
## 概要
このガイドの目的と対象読者。
## 前提条件
- 必要な環境
- 必要な知識
- 必要なツール
## 手順
### ステップ1: ...
詳細な説明とコード例。
```bash
# コマンド例
```
ステップ2: ...
コード例
// 実用的なコード例
ベストプラクティス
- 推奨される使い方
- アンチパターン
トラブルシューティング
問題1: ...
症状: ... 原因: ... 解決策: ...
よくある質問
Q: ... A: ...
次のステップ
関連するガイドへのリンク。
## ワークフロー
### 新機能追加時
1. **spec** にドキュメントを保存
```typescript
remember_context({
content: "# 新機能 - 仕様書\n...",
category: "spec",
tags: ["new-feature", "v2"]
})
-
design に設計を保存
typescriptremember_context({ content: "# 新機能 - 設計書\n...", category: "design", tags: ["new-feature", "architecture"] }) -
guide に使い方を追加(必要に応じて)
-
実装開始
-
実装完了後、ドキュメント更新
既存機能修正時
-
関連する仕様を検索
typescriptrecall_relevant({ sessionId: "...", query: "該当機能の仕様" }) -
設計ドキュメントを検索・確認
-
変更が設計に影響する場合、ドキュメントを更新
-
実装
ドキュメント検索の方法
// セマンティック検索(意味で検索)
recall_relevant({
sessionId: "...",
query: "認証システムの設計",
threshold: 0.7
})
// カテゴリ検索
search_memories({
category: "spec",
limit: 20
})
// タグ検索
search_memories({
tags: ["authentication"],
limit: 10
})
Claudeへの指示
重要: このスキルが有効な場合、コード変更を提案・実装する際は必ず以下を実行してください:
設計思想: Simplicity(シンプルさ)の追求
コード設計・実装時は、Simplicity(シンプルさ) を最優先してください。 以下の原則を守ることで、理解しやすく保守しやすいコードを実現します。
型の分類
全ての型は以下に分類されます:
-
data: 値を保持する不変データ構造
- 例:
interface User { id: UserId; name: string } - 純粋なデータ、ビジネスロジックを持たない
- 例:
-
calculations(主に同期): 値を計算する純粋関数
- 例:
function calculateTotal(items: Item[]): Money - 副作用なし、同じ入力に対して常に同じ出力
- 関数的に実装(引数を受け取り、結果を返す)
- 例:
-
actions(主に非同期): 値を操作する副作用のある関数
- 例:
async function saveUser(user: User): Promise<void> - I/O、状態変更、外部システムとの通信
- 関数的に実装(引数を受け取り、Resultを返す)
- 例:
Straightforward原則
- 入力から出力までの経路を直線的に
- 最小限のステップでロジックを組み立てる
- 不要な中間層、抽象化、間接参照を避ける
- コードの流れが追いやすく、理解しやすいことを優先
→ これらの原則 = Simplicity(シンプルさ)の実現
コード変更時の必須手順
- ✅ Creo Memoriesで関連するspecドキュメントを検索
- ✅ specを読んで「なぜ」(What & Why)を理解
- ✅ 関連するdesignドキュメントを検索して読む(How)
- ✅ コード変更を実施
- ✅ spec/designドキュメントとの乖離をチェック
- ✅ 乖離があればドキュメントを更新(remember_contextで保存)
- ✅ 必要に応じてguideも更新
視覚化の推奨
マーメイド図を積極的に活用してください:
specでの図の使用
- ✅ フローチャート: システムの処理の流れ、ユーザーの操作フロー
- ✅ 状態遷移図: ステートマシン、ライフサイクル
- ✅ シーケンス図: ユーザーとシステムの対話
designでの図の使用
- ✅ クラス図: データモデルの関係性
- ✅ フローチャート: アーキテクチャ、コンポーネント構成
- ✅ シーケンス図: コンポーネント間の相互作用
- ✅ ER図: データベース設計(該当する場合)
禁止事項
- ❌ specを確認せずにコード変更
- ❌ designの関連ドキュメントを確認せずに設計変更
- ❌ ドキュメント更新を忘れる
- ❌ 古い情報を放置
- ❌ 実装とドキュメントの不一致を許容
- ❌ 図で表現できるものをテキストだけで説明
Living Documentation原則
ドキュメントは死んだテキストではなく、生きたコードベースの鏡である
基本原則
- ドキュメントとコードは常に同期
- 一方が変われば他方も変わる
- 不一致は技術的負債(バグ)として扱う
生きたメモリーとしての機能
ドキュメントはAIエージェント(Claude)が信頼して活用できる生きたメモリーとして機能する:
- ✅ 常に新鮮: 最新のコード状態を正確に反映
- ✅ 信頼できる: 実装と完全に一致し、嘘がない
- ✅ 活用可能: AIエージェントが読んで理解し、意思決定の根拠にできる
- ✅ 進化する: コードの変化とともに成長・更新される
- ✅ 検索可能: セマンティック検索で関連ドキュメントを即座に発見
まとめ
このスキルは、仕様と設計を明確にし、Living Documentation原則に基づいてドキュメントとコードを同期させることで、プロジェクトの品質と保守性を高めます。
キーポイント:
- 📝 spec: What & Why(Creo Memoriesに保存)
- 🏗️ design: How(Creo Memoriesに保存)
- 📖 guide: Usage(Creo Memoriesに保存)
- 🎯 Simplicity: 型分類 + Straightforward原則 = シンプルさ
- 🔄 Living Documentation: ドキュメントとコードの同期
- 🔍 セマンティック検索: 関連ドキュメントを意味で検索
- 📊 マーメイド図: 積極的な視覚化で理解しやすく
Didn't find tool you were looking for?