From 62d7017383edb1486c9af1008d636029d257028d Mon Sep 17 00:00:00 2001 From: Zhongwei Li Date: Sun, 30 Nov 2025 08:41:34 +0800 Subject: [PATCH] Initial commit --- .claude-plugin/plugin.json | 12 ++++ README.md | 3 + commands/fetch-rules.md | 108 ++++++++++++++++++++++++++++ commands/setup-ts.md | 143 +++++++++++++++++++++++++++++++++++++ commands/spec.md | 57 +++++++++++++++ plugin.lock.json | 53 ++++++++++++++ 6 files changed, 376 insertions(+) create mode 100644 .claude-plugin/plugin.json create mode 100644 README.md create mode 100644 commands/fetch-rules.md create mode 100644 commands/setup-ts.md create mode 100644 commands/spec.md create mode 100644 plugin.lock.json diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json new file mode 100644 index 0000000..e03d8d8 --- /dev/null +++ b/.claude-plugin/plugin.json @@ -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" + ] +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e065a13 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# spec + +spec-driven development diff --git a/commands/fetch-rules.md b/commands/fetch-rules.md new file mode 100644 index 0000000..782d0c5 --- /dev/null +++ b/commands/fetch-rules.md @@ -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 が適切に更新されているか +- プロジェクトタイプが正しく識別・反映されているか +- 必要なルールが含まれ、不要なルールが除外されているか +- ルールの重複や矛盾がないか +- プロジェクト固有の考慮事項が適切に追加されているか diff --git a/commands/setup-ts.md b/commands/setup-ts.md new file mode 100644 index 0000000..9cb63a0 --- /dev/null +++ b/commands/setup-ts.md @@ -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. もしユーザーが一部の設定をカスタマイズしたい場合は、その意図を確認し、最適な代替案を提案すること。 diff --git a/commands/spec.md b/commands/spec.md new file mode 100644 index 0000000..dfdd09e --- /dev/null +++ b/commands/spec.md @@ -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`に記載されている内容を守りながら実装すること diff --git a/plugin.lock.json b/plugin.lock.json new file mode 100644 index 0000000..5b097bc --- /dev/null +++ b/plugin.lock.json @@ -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": [] + } +} \ No newline at end of file