Initial commit

This commit is contained in:
Zhongwei Li
2025-11-30 08:41:34 +08:00
commit 62d7017383
6 changed files with 376 additions and 0 deletions

View File

@@ -0,0 +1,12 @@
{
"name": "spec",
"description": "spec-driven development",
"version": "0.0.0-2025.11.28",
"author": {
"name": "mrsekut",
"email": "k.cloudspider@gmail.com"
},
"commands": [
"./commands"
]
}

3
README.md Normal file
View File

@@ -0,0 +1,3 @@
# spec
spec-driven development

108
commands/fetch-rules.md Normal file
View File

@@ -0,0 +1,108 @@
# Fetch Rules
AI ルールリポジトリ (https://github.com/mrsekut/mrsekut-cc-marketplace/tree/main/rules) から当プロジェクトに適切なルールを取得し、CLAUDE.md を更新してください。
## 実行手順
### Step 1: プロジェクト分析
以下を並行して分析し、プロジェクトタイプを特定してください:
- **プロジェクト構成ファイル**: package.json, Cargo.toml, pyproject.toml, go.mod, requirements.txt など
- **設定ファイル**: tsconfig.json, .eslintrc, .prettierrc, webpack.config.js など
- **エントリーポイント**: main ファイルindex.js/ts, main.py, main.go など)
- **ディレクトリ構造**: src/, components/, tests/ などの構造から推測
- **既存の CLAUDE.md**: 現在のルール状況の確認
### Step 2: ルール取得
GitHub API を使用して利用可能なルールを確認し、プロジェクトタイプに応じて関連ルールを取得:
```bash
# 利用可能なルール一覧を取得
curl -s https://api.github.com/repos/mrsekut/mrsekut-cc-marketplace/tree/main/rules | jq -r '.[].name'
# プロジェクトタイプに基づいて関連するルールを並行取得
# 例: TypeScript React プロジェクトの場合
curl -s https://raw.githubusercontent.com/mrsekut/mrsekut-cc-marketplace/main/rules/typescript.md
curl -s https://raw.githubusercontent.com/mrsekut/mrsekut-cc-marketplace/main/rules/react.md
curl -s https://raw.githubusercontent.com/mrsekut/mrsekut-cc-marketplace/main/rules/coding.md
curl -s https://raw.githubusercontent.com/mrsekut/mrsekut-cc-marketplace/main/rules/git.md
```
### Step 3: CLAUDE.md 更新
- 既存の CLAUDE.md をバックアップ(存在する場合)
- プロジェクト概要を含む構造化された CLAUDE.md を作成
- 取得したルールをプロジェクトの特性に合わせて統合
## CLAUDE.md 構造テンプレート
```markdown
# {Project Name} Project Rules
## Project Overview
- **Purpose**: {プロジェクトの目的}
- **Language**: {主要言語}
- **Framework/Runtime**: {フレームワーク・ランタイム}
- **Main Features**: {主要機能}
## Language-Specific Rules
{言語固有のルール}
## Framework-Specific Rules
{フレームワーク固有のルール(該当する場合)}
## General Coding Practices
{一般的なコーディングプラクティス}
## Git Practices
{Git 関連のプラクティス}
## Project-Specific Guidelines
{プロジェクト固有のガイドライン}
## Security Considerations
{セキュリティ考慮事項}
## Testing Strategy
{テスト戦略(該当する場合)}
```
## 重要な注意点
1. **自動プロジェクト判定**
- 複数の指標からプロジェクトタイプを総合的に判断
- 不明な場合は基本ルールcoding.md, git.mdのみ適用
2. **ルール重複の回避**
- 同じ内容のルールが複数ファイルにある場合は統合
- プロジェクトに関係ないルールは除外
3. **エラーハンドリング**
- GitHub API 制限やネットワークエラーの適切な処理
- 既存 CLAUDE.md の保護(バックアップ作成)
- ルールファイル取得失敗時の代替処理
4. **カスタマイズ対応**
- プロジェクト固有の要件があれば Project-Specific Guidelines に追加
- 既存ルールとの整合性を保つ
## 実行後の確認
- CLAUDE.md が適切に更新されているか
- プロジェクトタイプが正しく識別・反映されているか
- 必要なルールが含まれ、不要なルールが除外されているか
- ルールの重複や矛盾がないか
- プロジェクト固有の考慮事項が適切に追加されているか

143
commands/setup-ts.md Normal file
View File

@@ -0,0 +1,143 @@
# Setup TypeScript
TypeScript プロジェクトの初期セットアップを支援してください。
以下の条件に従い、品質を担保するために必要なセットアップを設計し、ユーザに確認・合意しながら進めてください。
# 要件
- TypeScript プロジェクトにおいて、形式的に担保可能な品質管理のセットアップを行いたい。
- 下記のものは提案に含め、ユーザの希望があればそちらを優先する
## typecheck
- 型チェックを実行するコマンドを用意
- `bun run typecheck`
- 最も厳しい tsconfig の定義
```tsconfig.json
{
"compilerOptions": {
"strict": true,
"allowUnusedLabels": false,
"allowUnreachableCode": false,
"exactOptionalPropertyTypes": true,
"noFallthroughCasesInSwitch": true,
"noImplicitOverride": true,
"noImplicitReturns": true,
"noPropertyAccessFromIndexSignature": true,
"noUncheckedIndexedAccess": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"isolatedModules": true,
"checkJs": true,
"esModuleInterop": true,
"skipLibCheck": true
},
}
```
## test
- vitest などのテストフレームワークを導入する
- テストを実行するコマンドを用意
```package.json
"scripts": {
"test": "vitest"
}
```
## lint
- 厳しめの ESLint 設定を定義
- チェックと修正を同時にできるコマンドを用意
```package.json
"scripts": {
"lint": "eslint . --fix"
}
```
## format
- prettier のルールを定義
- チェックと修正を同時にできるコマンドを用意
```package.json
"scripts": {
"format": "prettier --write ."
}
```
## MCP
- 必要であれば MCP を導入する
- .mcp.json を用意する
## Claude Code Hooks
```.claude/settings.json
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit|MultiEdit",
"hooks": [
{
"type": "command",
"command": "bun run typecheck"
}
]
}
]
}
}
```
## ci
- CI 設定を提案する
- 基本的に github actions を使う
# 進め方
1. 上記の要件を加味して、構成案をユーザに提案し、合意を取ること。
2. 合意が取れたら、セットアップ用のコマンド一覧を提示する。
bun を使っている場合の例:
- `bun run typecheck`
- `bun run lint`
- `bun run format`
- `bun run test`
3. 上記のコマンドを実行できるように実装を進める
- 必要なパッケージをインストール
- 設定ファイルを作成
- tsconfig.json
- .eslintrc.js
- vitest.config.ts
- .prettierrc
- ci.yml
- etc.
- package.json の scripts にコマンドを追加
下記は例である。使用しているツールによってコマンドが異なる。
```package.json
"scripts": {
"typecheck": "tsc --noEmit",
"lint": "eslint . --ext .ts,.tsx --fix",
"format": "prettier --write .",
"test": "vitest",
"check": "bun run typecheck && bun run lint && bun run format && bun run test"
}
```
- 実行できることを確認する
4. もしユーザーが一部の設定をカスタマイズしたい場合は、その意図を確認し、最適な代替案を提案すること。

57
commands/spec.md Normal file
View File

@@ -0,0 +1,57 @@
---
description: "spec-driven development"
---
Claude Code を用いた spec-driven development を行う
## spec-driven development とは
spec-driven development は、以下の 5 つのフェーズからなる開発手法である。
### 1. 事前準備フェーズ
- ユーザーが Claude Code に対して、実行したいタスクの概要を伝える
- `mkdir -p ./.specs` を実行する
- `./.specs` 内にタスクの概要から適切な spec 名を考えて、その名前のディレクトリを作成する
- たとえば、「記事コンポーネントを作成する」というタスクなら `./.specs/create-article-component` を作成する
- 以下ファイルを作成するときはこのディレクトリの中に作成する
### 2. 要件フェーズ
- Claude Code がユーザーから伝えられたタスクの概要に基づいて、タスクが満たすべき`requirements.md`を作成する
- Claude Code がユーザーに対して`requirements.md`を提示し、問題がないかを尋ねる
- ユーザーが`requirements.md`を確認し、問題があれば Claude Code に対してフィードバックする
- ユーザーが`requirements.md`を確認し、問題がないと答えるまで`requirements.md`に対して修正を繰り返す
### 3. 設計フェーズ
- Claude Code は、`requirements.md`に記載されている要件を満たすような設計を記述した`design.md`を作成する
- Claude Code がユーザーに対して`design.md`を提示し、問題がないかを尋ねる
- ユーザーが`design.md`を確認し、問題があれば Claude Code に対してフィードバックする
- ユーザーが`design.md`を確認し、問題がないと答えるまで`design.md`に対して修正を繰り返す
### 4. 実装計画フェーズ
- Claude Code は、`design.md`に記載されている設計を実装するための`implementation-plan`を作成する
- PR の単位ごとにファイルを分けて欲しい (`implementation-plan-1`, `implementation-plan-2`, ..)
- `implementation-plan`には以下の内容を含める:
- **PR と commit の単位を意識した実装の流れ**
- PR の単位は重要:レビュー可能な単位で分割する
- commit は参考程度:実装中に適宜調整可能
- **チェックボックス形式の進捗管理**
- 各タスクにチェックボックスを用意し、進捗が瞬時にわかるようにする
- **大まかな実装の流れ**
- 具体的な設計は`design.md`に記載されているため、実装計画では大まかな流れのみを記述
- 実装順序の基本方針:
1. ドメインロジックdomain 層)から実装
2. ユースケース層use-cases 層)を実装
3. 既存のバックエンドGraphQL、REST API 等)と接続
4. フロントエンドと接続
- Claude Code がユーザーに対して`implementation-plan`を提示し、問題がないかを尋ねる
- ユーザーが`implementation-plan`を確認し、問題があれば Claude Code に対してフィードバックする
- ユーザーが`implementation-plan`を確認し、問題がないと答えるまで`implementation-plan`に対して修正を繰り返す
### 5. 実装フェーズ
- Claude Code は、`implementation-plan.md`に基づいて実装を開始する
- 実装するときは`requirements.md`,`design.md`に記載されている内容を守りながら実装すること

53
plugin.lock.json Normal file
View File

@@ -0,0 +1,53 @@
{
"$schema": "internal://schemas/plugin.lock.v1.json",
"pluginId": "gh:mrsekut/mrsekut-cc-marketplace:",
"normalized": {
"repo": null,
"ref": "refs/tags/v20251128.0",
"commit": "d64941508258df132b78bf51c6fa3d0c29824cf8",
"treeHash": "85ee75a5cd31af58bbb9ad29b1bb43df53a0358f22ea559f6b7a43f82c685875",
"generatedAt": "2025-11-28T10:27:12.410121Z",
"toolVersion": "publish_plugins.py@0.2.0"
},
"origin": {
"remote": "git@github.com:zhongweili/42plugin-data.git",
"branch": "master",
"commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390",
"repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data"
},
"manifest": {
"name": "spec",
"description": "spec-driven development",
"version": null
},
"content": {
"files": [
{
"path": "README.md",
"sha256": "088a679205d0dddd6f31991bf587fb7d692a9029efd11219279f05419fd1b05b"
},
{
"path": ".claude-plugin/plugin.json",
"sha256": "ececc1e072859bd37ce90da0539930e06f199b273323cbd752ff8cb17403b142"
},
{
"path": "commands/setup-ts.md",
"sha256": "43f5a867c80a0ff180a63e613bb695c9b396077966eeefbbd364dc96000b1276"
},
{
"path": "commands/spec.md",
"sha256": "edb7419159d1d3e004571ca6a946a87e6a107dee64c37ffafbc3742fe8d1489e"
},
{
"path": "commands/fetch-rules.md",
"sha256": "695812ca4fee2d4865110df4ff839bb3698661d123136eb0b9b16f2a993a1050"
}
],
"dirSha256": "85ee75a5cd31af58bbb9ad29b1bb43df53a0358f22ea559f6b7a43f82c685875"
},
"security": {
"scannedAt": null,
"scannerVersion": null,
"flags": []
}
}