Initial commit
This commit is contained in:
12
.claude-plugin/plugin.json
Normal file
12
.claude-plugin/plugin.json
Normal 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"
|
||||
]
|
||||
}
|
||||
108
commands/fetch-rules.md
Normal file
108
commands/fetch-rules.md
Normal 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
143
commands/setup-ts.md
Normal 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
57
commands/spec.md
Normal 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
53
plugin.lock.json
Normal 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": []
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user