Claude Code を使い始めてから、地味に面倒なことがひとつあった。プロジェクトを切り替えるたびに cd して claude を打つ。それだけなんだけど、複数プロジェクトを並走させていると管理が煩雑になってくる。
そこで作ったのが proj コマンド。ターミナルで proj と打つとメニューが出て、番号を選ぶだけで VS Code と Claude Code が同時に立ち上がる。
=== プロジェクト ===
1. beetle-web — BEETLEのウェブサイト
2. gakkyu-tsushin — 学級通信ジェネレーター
a. 新規プロジェクトを追加
q. 終了
番号を入力: 1
▶ beetle-web を開いています...
✓ 新しいタブで Claude Code を開きました: beetle-web
実装でひとつ詰まったのが、Claude Code の中から別プロジェクトを開こうとするとうまく起動しないという問題だった。
Claude Code はプロセス起動時にいくつかの環境変数をセットする。子プロセスとして claude を呼ぶと、その変数が引き継がれてしまって正常に動かない。
実際に Claude Code 内で確認してみると、こういう変数が並んでいた。
CLAUDE_CODE_CHILD_SESSION=1
AI_AGENT=claude-code_2-1-193_agent
CLAUDE_CODE_SESSION_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
CLAUDECODE=1
CLAUDE_CODE_ENTRYPOINT=cli
CLAUDE_CODE_EXECPATH=/path/to/claude.exe
解決策は env -u でこれらを明示的に除いてから起動すること。
env -u CLAUDECODE \
-u CLAUDE_CODE_ENTRYPOINT \
-u CLAUDE_CODE_SESSION_ID \
-u CLAUDE_CODE_CHILD_SESSION \
-u CLAUDE_CODE_EXECPATH \
-u AI_AGENT \
claude
これで「Claude Code の中から Claude Code を起動する」がクリーンに動く。
もうひとつ工夫したのが Windows Terminal との連携。wt.exe を WSL 側から呼ぶと、既存のウィンドウに新しいタブを開いてそのまま claude を実行できる。
wt.exe -w 0 new-tab wsl.exe --cd "$project_dir" -- claude
SSH 経由など wt.exe がない環境では env -u の方にフォールバックするようにしている。
新規プロジェクトを追加するときは CLAUDE.md も自動生成するようにした。Claude Code はプロジェクトルートの CLAUDE.md を読んでコンテキストを把握するので、最低限の骨格を最初から用意しておくと初回から話が早い。
セットアップは ~/project-manager.sh として保存して .bashrc にエイリアスを追加するだけ。スクリプト全文は Gist に置いてあります。
ワンオペで複数プロジェクトを回していると、「開くまでの摩擦を減らす」系の工夫がじわじわ効いてくる。大したことじゃないんだけど、毎日やることだから積み重なる。