「Claude Code環境」シリーズです。前回はClaude Codeを無人で自律改善させる autopilotを書きましたが、そちらで登場した「自動化スクリプト群」の整理が済んでいないと autopilot に何を渡すかも迷います。今回はプロジェクトの分類と場所を管理する仕組みの話です。
いまの台帳 `~/PROJECTS.md` を数えると、Webアプリ・Chrome拡張・iOSアプリ・デジタル商品・受託・AI基盤・PC自動化・OSS評価合わせて40本超が並んでいます。ここまで増える前に「8カテゴリ + 台帳 + symlinkツリー」という体制を作りました。この記事はその設計の話です。
困りごと:プロジェクトは「ある」のに「どこにある」か分からない
`~/dev/`・`~/Projects/`・`~/digital-products/`・`~/oss-trial/` に散らばったディレクトリを、Claude Codeが毎回 `find ~` で探していました。探す時間だけでなく、状態(live/stalled/retired)・本番URL・収益化の有無も散逸していて、「あのアプリどうなってたっけ」を聞くたびに文脈から再構成していました。
台帳を1ファイルに集約して「聞いたらすぐ答えが出る」状態を作ることが目標です。
8カテゴリの切り方
`~/PROJECTS.md` の定義表をそのまま引きます。
カテゴリが増えると意味が薄れるので、新設は「8つのどれにも本質的に収まらない時だけ」としています。
判定は名前でなく提供形態で決めます。たとえば `autolike-license-server` はAPI名称ですが、Chrome拡張のライセンス検証専用バックエンドなので `02-chrome-ext` に入れています。名前で判断すると「API → サーバー → `01-webapp`」と誤分類します。
核心:なぜ実体dirを動かさないか
「整理 = フォルダ移動」と思いがちですが、個人開発では絶対パスへの依存が3箇所に潜んでいます。
- `.vercel/project.json` — Vercelとのリンクに絶対パスが入る。移動すると `vercel deploy` が別プロジェクトに向く。
- launchd plist — `ProgramArguments` に書いたスクリプトパスが実パスで登録される。移動するとcronが死ぬ。
- git worktree — `git worktree add` で作ったworktreeのメタデータが `.git/worktrees/<name>/gitdir` に実パスを持つ。
実体ディレクトリの物理移動は厳禁。`.vercel`・launchd plist・git worktreeが絶対パス依存で壊れます。「分類」はsymlink+台帳で表現します。
運用:台帳+symlinkで分類を表現する
実体は触らず、`~/Desktop/All-Projects/<カテゴリ>/` にsymlinkを張るだけです。
# 新規プロジェクトを分類する(実体は動かさない)
ln -sfn ~/dev/takugumi ~/Desktop/All-Projects/01-webapp/
# 確認
ls ~/Desktop/All-Projects/01-webapp/
# takugumi -> ~/dev/takugumi のように出る`ln -sfn` の `-f` は既存symlinkの上書き、`-n` はリンク先がディレクトリでも末尾に潜り込まない指定です。この2フラグがないと二重ネストになります。
台帳 `~/PROJECTS.md` は1行1プロジェクトで、パス・状態・収益化・本番URL・注意を持ちます(現在は現在は8カテゴリ × 合計40本超)。Claude Codeはこのファイルを読めば即座に「就活トラッカーのiOSアプリはどこ?」「live状態のものは?」を答えられます。
Claudeに分類させる手順
`~/.claude/skills/auto/project-categorization/SKILL.md` に手順を書いてあり、新規プロジェクトを作るたびに自動発火します。手順の核はこれだけです。
新規プロジェクト着手時、コードを書き始める前に:
1. 何を作るか確定 → 上の8カテゴリのどれかを選ぶ
(提供形態で決める。名前や第一印象でなく)
2. 既存8つに収まらない時のみ 09-<kebab> を新設
3. 実体を適切な親dir に作る
Webアプリ/拡張 → ~/dev か ~/Projects
商品 → ~/digital-products
OSS評価 → ~/oss-trial
4. ln -sfn <実体パス> ~/Desktop/All-Projects/<カテゴリ>/
5. ~/PROJECTS.md の該当カテゴリ表に行を追加CLAUDE.md にも「新規プロジェクトを作る時は着手前に必ず8カテゴリへ分類する」と書いてあるため、Claudeは指示しなくても分類から始めます。
検証コマンド
# symlinkが正しく張れているか
ls ~/Desktop/All-Projects/01-webapp/
# 台帳に追記されているか
grep "takugumi" ~/PROJECTS.md
# client-workの場合:機密がignoreされているか
git -C ~/dev/<project> check-ignore credentials.json踏んだ落とし穴
auto-skill の `Pitfalls` 節にまとめてあるものから引きます。
- 名前で分類して誤カテゴリ — `autolike-license-server`(Chrome拡張バックエンド)を「サーバー = `01-webapp`」と入れかけた。package.json や README を読んで提供形態で判断する。
- `05-client-work` の秘密鍵漏洩リスク — `toc-seo/credentials.json`(GCP鍵)が会社repo直下に裸で置かれていた。client-work を作るたびに `.gitignore` に秘密鍵パターンが入っているか確認する。
- 第三者ownerのremoteにpush — `ababa-pr/`・`fujibee/` は `05-client-work` 扱いでpush厳禁。`git remote -v` でownerを確認してからpushする。
- カテゴリを増やしすぎる — 迷ったら無理やり8つに収める。新設カテゴリは「8つのどれにも本質的に入らない」時だけ。
まとめ
- プロジェクトが増えると「ある」のに「どこにある」「状態は何か」が分からなくなる
- 実体dirは絶対に動かさない(.vercel・launchd・git worktreeが壊れる)。分類はsymlink+台帳で
- 8カテゴリは提供形態で決める。名前で判断すると誤分類する
- 台帳 `~/PROJECTS.md` + `~/Desktop/All-Projects/<カテゴリ>/` symlinkツリーが正典
- CLAUDE.mdに「着手前に分類」と書けば、Claudeが毎回自動でやってくれる
次回は、こうして整理したプロジェクト群を毎朝Mermaid図に自動生成してDesktopに置く仕組みを書きます。
この記事が良かったら
「チップをリクエスト」で著者にチップの受け取り設定をお願いできます
