Tsukutta

🗂️個人開発が増えすぎて迷子になる前に

― 8カテゴリ台帳とsymlinkツリー


「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箇所に潜んでいます。

  1. `.vercel/project.json` — Vercelとのリンクに絶対パスが入る。移動すると `vercel deploy` が別プロジェクトに向く。
  1. launchd plist — `ProgramArguments` に書いたスクリプトパスが実パスで登録される。移動するとcronが死ぬ。
  1. git worktree — `git worktree add` で作ったworktreeのメタデータが `.git/worktrees/<name>/gitdir` に実パスを持つ。
実体ディレクトリの物理移動は厳禁。`.vercel`・launchd plist・git worktreeが絶対パス依存で壊れます。「分類」はsymlink+台帳で表現します。

運用:台帳+symlinkで分類を表現する

実体は触らず、`~/Desktop/All-Projects/<カテゴリ>/` にsymlinkを張るだけです。

text
# 新規プロジェクトを分類する(実体は動かさない)
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` に手順を書いてあり、新規プロジェクトを作るたびに自動発火します。手順の核はこれだけです。

text
新規プロジェクト着手時、コードを書き始める前に:

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は指示しなくても分類から始めます。

検証コマンド

text
# 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/&lt;カテゴリ&gt;/` symlinkツリーが正典
  • CLAUDE.mdに「着手前に分類」と書けば、Claudeが毎回自動でやってくれる

次回は、こうして整理したプロジェクト群を毎朝Mermaid図に自動生成してDesktopに置く仕組みを書きます。

この記事が良かったら

「チップをリクエスト」で著者にチップの受け取り設定をお願いできます

シェア