ENVIRONMENT MAP

Otakeさんの2台PC × Claude Code 環境

Windowsデスクトップアプリで Claude Code を運用、新規セッションは必ずworktree隔離。 自宅BLADEと仕事DELL を GitHub + Google Drive の2系統で同期した構成。
BLADE機(自宅)
DELL機(仕事)
GitHub同期
Google Drive同期
個人アカウント
会社アカウント

① 運用原則 — 毎セッション必ず守っていること

CLIENT
Windowsデスクトップアプリで運用。ターミナル版でなくUIアプリ前提。アプリが worktree を自動管理する仕組みに乗っている。
NEW SESSION
新規セッションは必ずworktreeで起動。Ctrl+Nで開くと .claude/worktrees/<name> に隔離され、ブランチも自動分岐。main直接作業はしない。
PARALLEL
同時に複数セッションを頻繁に並走。worktreeで隔離されているのでgit衝突しない。スキル・フック・memoryはrepo単位で全worktree共有。

② 2台PC構成と同期バス

BLADE_STLTH_TMK / user: calon
BLADE機 — 自宅
常時稼働サーバー的PC
24/7 ON 定期実行の主役 ブラウザMCPの拠点
担当する仕事
定期実行(Windowsタスク + Claude Routines)/毎朝のbooking-sync・予約通知・価格メモ・schedule-inventory・ai-stack-watch等/Claude CodeをブラウザUI(claude.ai/code)から触る時もここのVivaldiを使う
設計原則
朝帯(〜8:35)に発火を集約、日中のセッション乗っ取り回避。ブラウザ不要処理はpythonw無音化
GITHUB
コード・SoT・memory
RepoSync 30分毎
G. DRIVE
secrets鍵・artifacts
Obsidian・otake_docsビュー
DESKTOP-BOB7C3V / user: Otake_DELL
DELL機 — 仕事
対話・作業のメインPC (今ここ)
対話の主舞台 並列セッション常用
担当する仕事
定期実行以外のほぼ全部 — スキル実行・ドキュメント生成・思考セッション・Excel/HTML/契約書/画像生成・調査・実装
運用
Windowsデスクトップアプリで複数worktreeを同時並走

③ Google Drive アカウント分け — どっちのGoogleで何を見ているか

④ git リポジトリ構成 — 実は3つある(盲点になりやすい)

1main repo(最大・正本)

tmkcln/Claude_tmk
C:\dev\Claude_WorkFolder(両機同一パス)
scripts/ skills/ SoT/ facilities/ secrets/ tasks/ 等ほぼ全て。 RepoSyncが30分毎に fetch→ff-only pull→push を自動運転。

2dotfiles repo

tmkcln/claude-config
~/.claude/(OSローカル設定)
独立reポ。settings.jsonはgitignore・マシン固有。スキルはmain repoから junctionで貼替済なので二重管理は解消傾向。

3age 復号鍵(リポではない)

H:\マイドライブ\_secrets\age\keys.txt
secrets/*.ageを復号する鍵。Drive個人アカウント経由で両機共有。 2026-06-18にgit-cryptから移行済.env編集→30分以内に暗号化push→相手機が復号。

⑤ 同期チャネル — 何がどっち経由で流れるか

GitHub レーン(コード・SoT・memory)

「2台で同じファイル実体を共有する」のはやめて、git push/pull に一本化した経路(2026-06-12移行)。
  • main repo: tmkcln/Claude_tmk @ C:\dev\Claude_WorkFolder
  • auto-memory も repo 直下に同居 → pushで両機共有
  • RepoSync が30分毎に fetch→ff-only pull→push。secrets/*.ageのencrypt/decryptもここで自動連鎖
  • mainに直接コミットすると ff-only が黙って失敗するので、必ずworktree/枝で作業

Google Drive レーン(鍵・素材・成果物ビュー)

gitに乗せられない or 乗せたくないものを各機に届けるためのレーン。
  • age private key(個人): H:\マイドライブ\_secrets\age\keys.txt
  • artifact mirror(個人): H:\マイドライブ\_claude_artifacts\<slug>\<sid>\
  • Obsidian Vault(個人): H:\マイドライブ\Obsidian
  • 会社の一次資料SoT(共有): G:\共有ドライブ\KY_共有ドライブ\

⑥ 各PC内部の構造 — どこに何があるか

C:\ ▼ OSローカル(両機個別・両機ともこのパス)
├─ dev\Claude_WorkFolder\ GIT正本 main repo・git作業の家
│ ├─ .claude\worktrees\ 並列セッション隔離(アプリ自動管理・ブランチ毎)
│ ├─ scripts\  運用コード(git管理)
│ ├─ skills\   repo内スキル(ジャンクション元)
│ ├─ SoT\    正本マークダウン(SoT/ops/ENVIRONMENT_MAP.md がこの環境の正本)
│ ├─ facilities\ 施設別ファイル(1施設1フォルダ)
│ ├─ secrets\  age暗号化された .env.age 等(committed)
│ └─ output\   成果物(gitignore・session-closeでDriveミラー)

└─ Users\<user>\.claude\ dotfiles repo 独立repo・マシン固有設定
├─ skills\ ──▶ junctionで C:\dev\Claude_WorkFolder\skills へ貼替(git pullで自動鮮度維持)
├─ projects\C--dev-Claude-WorkFolder\memory\ repo経由共有 auto-memory(repo単位・worktree間共有)
├─ scheduled-tasks\ Claude Routines(cron+SKILL.md)
├─ hooks\  グローバルフック
└─ settings.json マシン固有 同期されない・移行で消える層

H:\マイドライブ\ DRIVE 個人 / カロンセギュール探しの旅
├─ _secrets\age\keys.txt age復号鍵(repo外・最重要)
├─ _claude_artifacts\<slug>\<sid>\ 成果物ミラー(クロスセッション/クロスPC参照)
├─ Obsidian\ 思考・日次ジャーナル
└─ Claude_WorkFolder\output\ 旧パス・output専用ビューに降格(コード類は2026-06-17削除済)

G:\共有ドライブ\KY_共有ドライブ\ DRIVE 会社 / YAMATO
└─ 契約 / 図面 / 許認可 / 登記 / 原本PDF など社内共有の一次資料SoT

⑦ artifact mirror(成果物) — 現状の運用と未整備な部分

worktreeで生成した成果物(HTML/PDF/画像/ZIP等)はgitに乗せず、session-close時にDriveへミラーする仕組み。 ただしセッション最中はworktreeのoutput/ にしか実体が無く、他PC/他セッションから見えない状況がある。
PHASE 1
生成
worktree内の output/<slug>/ にローカル書き込み(gitignore対象)
PHASE 2
session-close時にミラー
H:\マイドライブ\_claude_artifacts\<slug>\<sid>\ へコピー。indexだけgit追跡(output/_artifacts_index/<slug>.jsonl
PHASE 3
他セッションから参照
python -m scripts.artifacts.cli lookup --slug <slug> で過去全ミラーをlist可能
PHASE 4
公開が要るもの
Cloudflare Pagesにdeploy(本マップも otake-env-map.pages.dev で公開)
⚠ 現状の曖昧さ(Otakeさん指摘): ① セッション中の成果物は2環境(worktreeローカル + Driveミラー)に重複存在しうる。② session-closeを通らず終わったセッションの成果物はミラーされず取り残される。③ _workflow_tmp/deploy/ と直下出力で運用が分かれており、どこに何を置くかのルールが完全には文章化されていない。 → 別途整理が必要なOpen Question。

⑧ サブシステム — Claude Codeを支える仕組み

worktree並列セッション

Ctrl+N で新セッション → .claude/worktrees/<name> に自動隔離。新規は必ずworktreeが運用ルール。

スキル・フック・memoryは全worktreeで共有(repo単位)

age暗号化 secrets同期

.envを編集すると30分以内にsecrets/*.ageに暗号化→push→相手PCがpull→自動復号。git-cryptは2026-06-18撤去済。

鍵: H:\マイドライブ\_secrets\age\keys.txt

RepoSync(30分毎)

scripts/ops/repo_sync.py が両機で稼働。fetch→pull→secrets encrypt/decrypt→push を黙々と回す。

log: logs/repo_sync.log / ff-only失敗で沈黙事故あり要監視

定期実行 2層構造

層A: Windowsタスクスケジューラ(pythonw無音)
層B: Claude Routines(cronでセッション起動・scheduled-tasks/

正本台帳: otake_docs/schedule-inventory/merged.json

auto-memory

cwd→repoハッシュでホーム決定。~/.claude/projects/C--dev-Claude-WorkFolder/memory/ 配下。MEMORY.mdが毎セッション自動注入される索引。

現在 144行(閾値150)

ブラウザ運用

Claude Codeをブラウザで使う時/Chrome MCPで操作する時は 自宅BLADEのVivaldi。AirHost/Drive等の認証セッションを保持。

既定ブラウザ: TMK_vivaldi

MCP サーバー群

Notion / Slack / Calendar / Gmail / Figma / Canva / 各種connector — settings.json で接続。両機共通設定。

注: 一部はheadless(cron)で未接続になり得る

スキル・フック

repo内skills/がジャンクションで~/.claude/skillsに貼替済。git pull=スキル鮮度維持。フックはscripts/hooks/へ集約方針(マシン非依存)。

2026-06: fail-open基本

ヘルスチェック2本

scripts/ops/doctor.py(生死)と memory_ledger.py(効果近似)。故障モード台帳 SoT/ops/failure_modes.json に検査追加可能。

session-close毎回 + 同期境界で自動実行

⑨ Open Questions — まだ未整備で整理が要る領域

📋 現環境で曖昧さが残っている箇所(Otakeさん認識)

① API管理・複数Googleアカウントの整理
使用しているGoogleアカウントが複数(個人=カロンセギュール/会社=YAMATO)あり、 どのAPI(Gmail / Calendar / Drive / Sheets)がどのアカウントに紐付いているかOAuthトークンとサービスアカウントの管理方針credentials.jsonのスコープ等が 完全には文書化されていない。 → 別途、API台帳の整備が必要。
② artifact mirror(worktree出力)の運用ルール明確化
セッション中はworktree内に実体、session-closeでDriveミラー、という二段構造。 session-closeを通らないセッションの取り残し_workflow_tmp/deploy/ と直下の使い分け2環境に重複存在する期間の扱いが要整理。
③ 正本ENVIRONMENT_MAP.md 側の更新
SoT/ops/ENVIRONMENT_MAP.md §3③ がまだ git-crypt 前提の記述。 実体は2026-06-18にageへ移行済。正本側を age 移行に追従させる更新が要。

⑩ 落とし穴 — 静かに事故るポイント

⚠ 2台同期構成だからこそ起きる沈黙失敗(probe.py 盲点①〜⑦相当)

  1. mainに直接コミット未pushでRepoSyncのff-only pullが毎回失敗 → 何週間も古いコードで定期タスクが走る(2026-06-15で予約通知不達事故)
  2. 壊れたsymlink: ~/.claude/skillsが旧Driveを指したまま全スキル無言死。mklink /Jで貼替が正解
  3. global npm依存(wrangler等)は移行で引き継がれない → setup_*.ps1に収録要
  4. pythonw下のstdout=None: 冒頭でguardしないと0x1即死してログゼロ
  5. Windowsタスクの旧Hパス残存: schtasks LastResult一覧スイープで全件洗い出し必須
  6. 「Windowsタスクに無い=存在しない」と判断しない: Routines層(層B)にあることが多い
  7. settings.json のフック層は移行でサイレント消失する: gitignore+マシン固有。冪等レジストラを scripts/hooks/ に同梱する設計に
  8. worktreeに永続成果物(.md/.docx/.pdf/.html)を書かない: mainに集約。フックで物理ブロック