/claude-setup
現在のプロジェクトに、動作する .claude/ ディレクトリをスキャフォールディングします。コードベースを読み取り、コンテキストを検出し、このスタックにとって真に価値のあるものだけを書き込みます。
このスキルの絶対的なルール: cargo-cult を生成しないこと。 空のフォルダーは禁止。汎用的なプレースホルダーは禁止。ルール、スキル、エージェントが THIS プロジェクトに存在する真の理由を持たないなら、スキップします。
フェーズ 1: 検出
並列で以下を実行し、出力を調査します:
!pwd && echo "---" && ls -la
!cat README.md 2>/dev/null | head -120
!cat package.json Cargo.toml pyproject.toml go.mod Gemfile pom.xml build.gradle build.gradle.kts deno.json bun.lockb 2>/dev/null | head -300
!ls .claude/ 2>/dev/null && echo "---existing claude config above---"
!cat .gitignore 2>/dev/null | head -60
!ls docs/ docs/rfcs/ docs/adr/ docs/architecture/ 2>/dev/null
その出力から、以下を判断します:
- スタック: Rust (Cargo.toml)、Node/TS (package.json)、Python (pyproject.toml/requirements.txt)、Go (go.mod)、Ruby (Gemfile)、Java/Kotlin (pom.xml/build.gradle)、Deno (deno.json)、Bun、または混合。複数ある場合は主要なものを選び、副次的なものをメモします。
- レイアウト: モノレポ (
workspaces/turbo/nx/lerna/cargo[workspace]/Go workspace) か単一プロジェクトか。 - 既存の
.claude/: 存在する場合はマージ — ファイルごとに確認せずに上書きしてはいけません。 - README/RFC/ADR から抽出したハードルール: 「locked」、「banned」、「no 」、「must 」、「RFC」、「ADR-NNN」、「invariant」などの言葉がシグナルです。実際のものをエンコードし、新たに発明してはいけません。
- テストフレームワーク、リンター、フォーマッター、パッケージマネージャー — 設定ファイルとスクリプトから抽出し、
CLAUDE.md内のコマンドが実際のものになるようにします。
検出が本当に曖昧な場合(複数のロックファイル、明確な主要言語がない、README がない)、STOP し、ユーザーに 1つ の焦点を絞った質問をして解決します。自分で検出できることを尋ねてはいけません。
フェーズ 2: 該当するテンプレートを読む
このスキルにバンドルされているテンプレートは、スタックごとに何を生成するかを記述しています。該当するものを読んでください (${CLAUDE_SKILL_DIR}/templates/<name>.md を使用):
rust-workspace.md— Cargo[workspace]rust-single.md— 単一の Cargo.tomlnode-monorepo.md— npm/yarn/pnpm ワークスペース、turbo、nx、lernanode-single.md— 単一の package.json (Next.js、Vite、Express など)python.md— Poetry、pip+venv、uv、hatchgo.md—go.modプロジェクトgeneric.md— その他のフォールバック
各テンプレートには、CLAUDE.md に含めるべき内容、重要なパーミッション、パススコープのルールが価値を持つ条件、コードレビュアーサブエージェントの調整方法、およびそのスタックで一般的に有用なスキルがリストされています。
テンプレートは リファレンス であり、貼り付けるためのボイラープレートではありません。何を生成するかを決定するために使用し、出力は THIS プロジェクトに合わせて表現します。
フェーズ 3: 計画と確認
何かを書き込む前に、計画をユーザーに出力します:
検出: <stack> (<layout>)
プロジェクト名: <name>
プライマリコマンド: build=<cmd>, test=<cmd>, lint=<cmd>
作成予定:
CLAUDE.md (新規 | マージ | スキップ)
.worktreeinclude (新規 | スキップ)
.claude/settings.json (新規)
.claude/rules/<n>.md (新規, path: <glob>)
.claude/agents/<lang>-reviewer.md (新規)
.claude/skills/<n>/SKILL.md (新規)
スキップ予定 (明確なユースケースなし): output-styles/, commands/, agent-memory/
既存ファイル: <アクション付きリスト: keep/replace/merge>
README/RFC から検出したハードルール:
- <引用 1> → rules/<file>.md にエンコード
- <引用 2> → CLAUDE.md にエンコード
続行しますか? [y/N/preview/edit-plan]
--dry-run の場合: ここで停止します。
ファイルが既に存在する場合、デフォルトのアクションは keep です。置き換える前に確認を求めます。
--minimal の場合: CLAUDE.md + .claude/settings.json のみを計画します。
--skip-skills の場合: 計画から skills/ を省略します。
フェーズ 4: 生成
計画に従ってファイルを書き込みます。ファイルごとのルール:
CLAUDE.md
- 先頭: スタックのワンライナー。
## Commandsブロック: package.json のスクリプト / Makefile / Cargo エイリアス / pyproject のスクリプトから抽出した実際のコマンド。存在しないコマンドをリストしてはいけません。## Repo mapブロック: 重要なディレクトリのみ。node_modules、target、dist、.next、__pycache__はスキップします。## Hard rules: README/RFC/ADR から来たもののみ。何もなければセクションを省略します — 埋めてはいけません。## Behavioral principles:CLAUDE.mdに既にユーザーの既存の原則がある場合はそれを保持します。それ以外の場合は省略します(グローバルの~/.claude/CLAUDE.mdがおそらくカバーしています)。
.claude/settings.json
permissions.allow: スタックに合わせて調整。Rust の場合:cargo *、git diff *、gh *。Node の場合:npm test *、npm run *、pnpm *。包括的なBash(*)は許可してはいけません。permissions.deny: 最低限rm -rf *、git push --force *、git reset --hard *。スタック固有の破壊的なもの(例: ライブラリのnpm publish *)を追加します。- プロジェクトに明確な pre/post ツールの必要性がない限り、フックは設定しません。
.claude/rules/<name>.md
実際の規約があるディレクトリにのみ、パススコープのルールを設定します。ヒューリスティック:
- モノレポ: 異なるルールを持つワークスペースメンバーごとに 1 つのルール。
- テスト規約: プロジェクトに明示的でないテスト規約がある場合、
**/*test*パターンにスコープされた 1 つのルール。 - インフラ/IaC: プロジェクトに IaC がある場合、
infra/**にスコープされた 1 つのルール。 - API 設計: 明確な形状契約がある場合、API ルートにスコープされた 1 つのルール。
ドキュメントの例にルールがあったからといって、それを生成してはいけません。規約が CLAUDE.md から明らかな場合、ルールは不要です。
.claude/agents/<lang>-reviewer.md
- ツール:
Read, Grep, Globのみ(読み取り専用)。 - 本文: 言語に合わせたチェックリスト(テンプレートを参照)。
- 説明は、Claude がレビュータスクで自動的に呼び出すように、十分に具体的に記述します: 「 の変更をレビューします...」 — 具体的なチェック項目をリストします。
.claude/skills/<n>/SKILL.md
明確で反復可能なワークフローを持つスキルのみを生成します:
/release— プロジェクトにバージョンファイル (Cargo.toml、package.json、pyproject.toml) と CHANGELOG.md の両方がある場合。/test— 非自明なテストコマンドがある場合(例: マトリックス、複数スイート)。単一のcargo testにはスキルは不要。/lint— 同様のロジック。- スタック固有(例: Django/Rails の
/db-migrate、Next.js の/deploy-preview)。
TODO 本文のあるプレースホルダースキルは生成しないでください。動作するかスキップするかのどちらかです。中間はありません。
.worktreeinclude
- worktree が必要とする gitignored ファイルをリストします:
.env、.env.local。 CLAUDE.mdまたは.mcp.jsonが gitignore されている場合(.gitignoreを確認)、worktree が盲目にならないようにそれらを含めます。.claude/settings.local.jsonが gitignore されている場合、それを含めます。
フェーズ 5: 確認とレポート
書き込み後:
echo "=== 生成されたツリー ==="
find .claude -type f | sort
echo "=== 行数 ==="
find .claude -type f -exec wc -l {} \;
以下を出力します:
- 最終ツリー。
- 行数(目標: 各ファイル 100 行以下。150 行を超える場合はフラグを立てます)。
- 具体的な確認手順を 1 つ(例: 「セッションを開き、
/permissionsを実行し、cargo *がコミット済みとして表示されることを確認」)。 - リマインダー: まだの場合、
.claude/settings.local.jsonを.gitignoreに追加します。
アンチゴール(明確にするために再掲)
- 空のフォルダーは禁止。 実際のスタイルがない限り、
output-styles/は作成しません。commands/は作成しません(スキルが Anthropic ドキュメントに従って優先されます)。 - ドキュメントの例からのコピーペーストは禁止。 正規のツリーにある
testing.mdとapi-design.mdは 例 です — THIS プロジェクトが実際にそれらの規約を持っている場合にのみ、類似のものを生成します。 - 上書き禁止。 置き換える前に常にファイルごとに確認します。
- ハードルールを空気から作らない。 README/RFC/ADR から抽出します。それらが存在しない場合、プロジェクトにハードルールはありません — そう伝え、次に進みます。
- TODO のあるスキルは禁止。 動作するかスキップかのどちらかです。
- パーミッションでのグローバルワイルドカードは禁止。
Bash(cargo *)は許可しますが、Bash(*)は許可しません。
フラグリファレンス
--minimal:CLAUDE.md+.claude/settings.jsonのみ。--skip-skills: skills/ を省略。--dry-run: 計画を出力し、何も書き込みません。
(すべてのフラグはオプションです。デフォルトは完全な正規レイアウトで、スタックを認識し、確認付きです。)