自宅のWindowsを開発機にする その5: Orcaで仕事用アカウントと会話履歴を正しく扱う

この記事でわかること
- Orcaのworktreeではdirenvが効かず、仕事用Claudeアカウントに切り替わらない
- 起動コマンドをラッパーに差し替えてgitの本体の場所で判定する
- 会話履歴は起動時のCLAUDE_CONFIG_DIRから探されるので、projectsを共有する
- 外したはずの許可スキップが戻る・閉じたタブが裏で残るなどの落とし穴
その4の状態(WindowsにOrcaを入れ、WSLのリポジトリを登録済み)
この記事は「自宅のWindowsを開発機にする」連載のその5(最終回)です。その4で Orca を入れてリポジトリを登録したところまで書いたので、今回は実際に使い始めて踏んだ落とし穴の話です。
落とし穴1: 仕事用の Claude アカウントに切り替わらない
その3で書いたとおり、自分は個人用と仕事用で Claude のアカウントを分けていて、仕事フォルダに入ったら direnv で CLAUDE_CONFIG_DIR を切り替えています。
でも Orca は、作業用の worktree をリポジトリの中ではなく ~/orca/workspaces の下に作るんですよね。仕事フォルダの外なので direnv の .envrc が効かず、仕事のリポジトリなのに個人のアカウントで Claude が立ち上がる、という状態になりました。
Orca にも複数アカウントの機能はあるんですが、これは「全体で1つのアカウントを手で切り替える」もので、リポジトリごとに自動で切り替える用途には使えませんでした。
そこで、Orca が Claude を起動するコマンド(設定の agentCmdOverrides)を、小さなラッパーに差し替えました。判定には作業フォルダのパスではなく、git の本体(common dir)がどこにあるかを使います。worktree がどこに作られても、本体は元のリポジトリにあるので。
#!/usr/bin/env bash
# ~/.local/bin/claude-orca: Orca から呼ばれる Claude の起動ラッパー
common=$(git rev-parse --path-format=absolute --git-common-dir 2>/dev/null)
case "$common" in
"$HOME"/dev/Job/<業務委託先A>/*) export CLAUDE_CONFIG_DIR="$HOME/.claude-<仕事用>" ;;
esac
exec claude "$@"動作確認は、仕事フォルダの外にわざと一時的な worktree を作って、そこで仕事用アカウントになるかで確かめています。
落とし穴2: 外したはずの許可スキップが戻っていた
その4で、Claude の起動引数から --dangerously-skip-permissions を外した話を書きました。ところがしばらくして見たら、これが戻っていたんですよね。
原因は結局特定できていなくて、空文字だと「未設定」とみなされて既定値に戻されているのかな、と推測しています。今は半角スペースを入れて設定し直していて、Orca の設定を触ったあとは毎回ここを確認するようにしています。許可確認なしで動いていたら気づかないまま作業が進むので、ここは地味に怖いところです。
落とし穴3: 会話履歴が出てこない
次に気づいたのが、Orca のセッション履歴に何も出てこないことです。原因は2つありました。
1つ目は単純で、その3の移植で会話ログを移していなかったからです。「移さないもの」に入れていたんですが、Orca から過去の会話を見たいなら要りました。結局 Mac の会話ログ(81件、700MB くらい)も移しています。
2つ目は、仕事用アカウントの会話だけが出てこないことです。Orca の本体のコードを読んでみると、会話ログは「Orca が起動したときの CLAUDE_CONFIG_DIR」の projects フォルダから探していました。ラッパーの中で切り替えた先は見えないんですよね。
対策として、仕事用アカウントの projects フォルダを、個人の ~/.claude/projects へのシンボリックリンクにしました。
# 中身を個人側に寄せてから
ln -s ~/.claude/projects ~/.claude-<仕事用>/projects認証と設定は分かれたままで、会話ログとメモリの置き場だけを共有する形です。projects の中のフォルダ名は作業ディレクトリのパスなので、個人と仕事のデータが混ざることはありません。これで仕事の会話も Orca から見えるようになりました。
ちなみにこの作業、最初は Claude Code にやってもらおうとしたんですが、auto mode が「会話ログの持ち出し」や「Claude の設定フォルダの構成変更」を危ない操作として止めてくれました。なので最後は、スクリプトを書いてもらって自分で実行しています。面倒ではあるんですが、こういうところでちゃんと止まるのは安心できるなと思っています。
落とし穴4: 閉じたはずの Claude が裏で生きている
Orca はタブを閉じても、ターミナルを裏で生かしておく作りになっています。これを知らずに、閉じたつもりの Claude が裏で入力待ちのまま残っていて、別の作業がブロックされる、ということがありました。止めたいときは、タブを閉じるのではなくちゃんと終了させるのが大事です。
Orca をどう使うか
落とし穴を潰したところで、使い方も軽く調べてみました。今のところこんな方針でいこうかなと思っています。
- 1タスク = 1 worktree で並列に回す。終わったら差分をレビューして、ダメならその場で差し戻す
- worktree を作ったときに依存を入れるのは setup フックに任せる
- 使っていない worktree は Sleep させておく
- 機密性の高いリポジトリは、並列実行や自動実行(automations)には入れない
- 許可確認をスキップするモード(yolo)は使わない
あと、WSL のリポジトリだと、スマホの Orca から新しいエージェントを起動できないという既知の不具合(Orca の issue #19885)があります。スマホからは、その1で設定した Claude アプリの Remote Control を使うのが今のところ確実かなと思います。
連載を振り返って
- その1: Tailscale で Mac とスマホから WSL に入る
- その2: Mac の開発環境を作業状態ごと WSL に移す
- その3: Claude Code の設定とメモリを引っ越す
- その4: Orca を入れて WSL のリポジトリを扱う
- その5: Orca で仕事用アカウントと会話履歴を正しく扱う(この記事)
振り返ると、「環境を移す」こと自体より、「前のマシンで暗黙的に効いていたもの」を拾い集めるほうが大変だったなという感じです。グローバルの gitignore も、direnv のアカウント切替も、Mac では当たり前すぎて忘れていました。。。
とはいえ、家に眠っていたマシンが、Mac からもスマホからも使える開発機になったのはけっこう嬉しいなと思っています。


