複数ワークスペース並行開発ルール
CLAUDE.md から外出し。複数の clone(main / doc / ocr / drp)および Claude Code web/モバイル を併用する際のコンフリクト防止運用。
構造の SSoT(機械可読)は同ディレクトリの
workspace_manifest.yaml。リポ/クローン/ドメイン/役割/スペースの対応・共有書き込み面はそちらが大元で、本ファイルは人間向けの解説とファイル担当マトリクスを担う(対で読む)。
前提
同一モノレポ(bizlp-gas-accounting)を複数の別 clone に分離して並行運用する(worktree は git 操作が干渉しやすいため非推奨)。各 clone はリポ全体のフル clone で、役割でファイル編集境界を分ける。
~/projects/bizlp/main/ ← main (orchestrator — ADR/DRP 起案・横断 docs・CI 配線・tasks/prompts inbox 発火)
~/projects/bizlp/doc/ ← doc (ドキュメント担当)
~/projects/bizlp/mas/ ← mas (MAS ドメイン専属・GAS 会計本体。ADR-0159 で新設・2026-06-20)
~/projects/bizlp/ocr/ ← ocr (OCR ドメイン専属)
~/projects/bizlp/drp/ ← drp (Decision Pipeline 専属。2026-06-17 新設)
~/projects/bizlp/{main,doc,ocr,drp}へ集約済(Phase D・2026-06-17)。パスは個人マシン固有のためCLAUDE.local.md(gitignore)が正典。呼称: 役割名は
doc(ADR-0156 でsubから統一・dir 名と一致)。handover 命名sub_/_to_subと hook の role 文字列は段階移行中で当面sub系も有効(新規分はdoc_/_to_docを正、Phase 5 でsub側を削除)。
個人マシン固有のパスは CLAUDE.local.md(gitignore)に記述する。
実行環境と役割の対応
| 実行環境 | 作業ディレクトリ(clone root を開く) | 役割 |
|---|---|---|
| ローカル Mac (main clone) | bizlp/main | main(orchestrator — ADR/DRP 起案・横断 docs・CI 配線・tasks/prompts inbox 発火。GAS 実装は行わない・ADR-0159) |
| ローカル Mac (doc clone) | bizlp/doc | doc(ドキュメント担当) |
| ローカル Mac (MAS clone) | bizlp/mas | MAS ドメイン専属の実装担当(main 相当)。mas/ 配下で完結。GAS 実機検証 (Sheets) は手動。ADR-0159 で新設 (2026-06-20) |
| ローカル Mac (OCR clone) | bizlp/ocr | OCR ドメイン専属の実装担当(main 相当)。ocr/ 配下で完結し webapp_client を触らない。merge = 即本番デプロイ |
| ローカル Mac (DRP clone) | bizlp/drp | DRP ドメイン専属の実装担当(main 相当)。drp/ 配下で完結。merge = 即本番デプロイ |
| Claude Code web / スマホアプリ | クラウド上の clone | doc(GAS 実装は行わない。ドキュメント・TODO 管理専用) |
即本番ドメイン(drp/ocr)は clone root を開いても、
drp/**・ocr/**を触ると.claude/rules/{drp,ocr}.mdが「merge = 即本番」等の安全則を自動ロードする(root 開きでも死守)。完全なドメイン規約は nested{drp,ocr}/CLAUDE.mdが単一所在。
コンフリクト防止 4 原則
- ファイルの担当を分ける — 下記マトリクスに従う
docs/_internal/TODO_future.mdは片方だけが触る — 最もコンフリクトが起きやすいファイル- マージ前に相手の PR を先に取り込む —
git pull origin mainしてから PR 作成 - 同じファイルを同時編集しない — コンフリクトの根本原因
ファイル担当マトリクス
編集可 = ○ / 読み取り専用 = ×。書き込み担当は必ず最新 main から分岐してから着手する。表の列は main (orchestrator) / doc (docs) / mas (GAS 実装) / ocr (OCR 実装) / drp (DRP 実装) の 5 役割 (ADR-0156 / ADR-0159)。
| パス | main | doc | mas | ocr | drp | 備考 |
|---|---|---|---|---|---|---|
mas/000_infra/ 〜 mas/900_test/ (GAS コード全般) | × | × | ○ | × | × | GAS 実装は mas クローン専属 (ADR-0159)。mas/ ディレクトリは origin 上で 5 クローン共有だが編集権限は mas のみ。 |
webapp_client/src/**, mas/templates/*.html | ○ | × | × | × | × | UI 実装 (React + GAS HtmlService) は main 残置 (Vite/Playwright/TS スタックで GAS と無関係)。webapp_client/scripts/sync-engines.mjs の mas/400_domain → src/engines/ 経路は同一 origin/同一 commit の共有で機能 (Phase b で runbook 化・ADR-0159 §5.3)。OCR フロントは ocr/ocr-bench/ へ移設済。 |
ocr/** | × | × | × | ○ | × | OCR クローン (bizlp/ocr) 専属。Cloudflare Worker 独立ドメイン。規約は nested ocr/CLAUDE.md、merge = 即本番デプロイ |
drp/** | × | × | × | × | ○ | DRP クローン (bizlp/drp) 専属。Cloudflare Worker 独立ドメイン。規約は nested drp/CLAUDE.md、merge = 即本番デプロイ。triage が scripts/lib/adr-lint-rules.mjs を import・prompts/production/** を参照 (読み取り) |
docs/spec/sidebar_api.d.ts | ○ | × | ○ | ○ | × | main と MAS と OCR クローンの共有契約 (OcrBench* 型は main↔OCR / GAS engines 型は main↔MAS)。変更時は編集直前の git pull origin main + 相互調整が必要 |
mas/appsscript.json / .claspignore / .clasp.dev.json / .clasp.prod.json | × | × | ○ | × | × | clasp 設定は mas クローン専属 (ADR-0159)。tracked ファイルは 5 クローン共有だが編集権限は mas のみ。 |
root package.json (npm scripts) | ○ | × | × | × | × | orchestrator 領分。GAS push / deploy scripts 9 件 (push:dev / push:prod / deploy:dev / deploy:prod / switch:dev / switch:prod / open:dev / open:prod / status) は ADR-0159 Phase b で main から削除し mas クローン側 package.json に新設 (main から GAS push する経路を持たない運用ガード)。 |
scripts/** (docs-build.mjs / docs-vectorize.mjs / GAS・デプロイ・パイプライン・prompt 系等。下 2 行の docs lint 6 点・docs 専用生成器は除く) | ○ | × | × | × | × | ビルド・CI・デプロイ・検索インデックススクリプトは main 専属 (orchestrator) |
scripts/adr-lint.mjs / scripts/lib/adr-lint-rules.mjs / scripts/frontmatter-schema.json / scripts/docs-nav-lint.mjs / scripts/docs-link-check.mjs / scripts/adr-lint-doc-consistency.mjs | ○ | ○ | × | × | × | 両方可 (docs 関連 lint・スキーマ)。編集直前に必ず git pull origin main。CI で全 PR に走るため破壊は main の PR も赤化する点に注意。CLI インターフェース変更で .github/workflows/** の修正が要る場合は [cross-workspace] |
scripts の docs 専用生成器・索引 (generate-docs-index.mjs / generate-domains-list.mjs / generate-coverage-gaps.mjs / adr-index.mjs / rq-index.mjs / doc-inventory.mjs / generate-doc-news.mjs) | ○ | ○ | × | × | × | 両方可。編集直前に必ず git pull origin main。CI --check で全 PR に走るため破壊は main の PR も赤化。出力フォーマット・CLI 契約の変更で .github/workflows/** の修正が要る場合は [cross-workspace]。生成器ロジック自体の改修は本マトリクス整備とは別 PR。検索インデックス (docs-vectorize.mjs) は対象外で main 専属 |
.github/workflows/** | ○ | × | × | × | × | CI workflow は main 専属 (orchestrator) |
docs/architecture/**, docs/domains/**, docs/data/**, docs/operations/**, docs/implementation/** | × | ○ | × | × | × | 公開構造ドキュメントは doc 専属 |
docs/adr/** | × | ○ | × | × | × | ADR は doc 専属。Accepted 後本文は Immutable (ADR-0031 パターン)、誤字修正は corrigendum 注記で対応 |
docs/_internal/** (ADR-0045 で再編、01_discovery/ / 02_project/ / 03_decisions/ / 04_specs/ / 05_how-to/ / 06_ops/ / biz/) | × | ○ | × | × | × | 内部運用ドキュメントは doc 専属。02_project/TODO_future.md が最コンフリクトリスク |
docs/AGENTS.md / docs/README.md / docs/SUMMARY.md / docs/index.md / docs/COVERAGE_GAPS.md | × | ○ | × | × | × | docs エントリポイント系は doc 専属 |
docs/_config.json | ○ | ○ | × | × | × | 両方可。新規 nav 登録は ADR-0055 形式 (<NS>.<group_number>.<page_index>)。編集直前に必ず git pull origin main |
CLAUDE.md | ○ | ○ | ○ | ○ | ○ | 5 クローン共有 SSoT。編集直前に必ず git pull origin main |
tasks/prompts/** | ○ | ○ | ○ | ○ | ○ | 5 クローン共有 (handover は全役割が起票・消費する)。本番プロンプト管理対象外の運用プロンプト (ADR-0132)。役目を終えたら消費者が同一 PR で archive/ へ退避 (ADR-0134)。規約の正典 = tasks/prompts/README.md |
CLAUDE.local.md | ワークスペース個別 | ワークスペース個別 | ワークスペース個別 | ワークスペース個別 | ワークスペース個別 | gitignore。個人パス・MCP 設定。担当境界 (編集可否) は本マトリクスへ委譲し重複転記しない (gitignore の重複は per-clone でドリフトするため。役割列を参照するだけに留める) |
.claude/ (hooks / skills / settings.json) | ワークスペース個別 | ワークスペース個別 | ワークスペース個別 | ワークスペース個別 | ワークスペース個別 | 各ローカル設定。互いに干渉しない |
例外運用
- 担当外ファイルを触る必要が出た場合は、相手のワークスペースが未コミットの作業を持っていないか事前確認する
- 緊急バグ修正等で main / doc / mas / ocr / drp の担当境界を一時的に越える場合は、PR タイトルに
[cross-workspace]を付記 - Claude Code web / スマホからは GAS コードを触らない。CLAUDE.md L「Workspace 運用」と本ファイルが示す doc 範囲(ドキュメント・TODO・改善提案)に厳守
- main クローンは orchestrator (ADR-0159)・GAS 実装は mas クローン担当。main 側から
cd mas && clasp push等を実行するとscripts/hooks/pre_bash_guard.shの cwd 判定でpermissionDecision=askが返る (運用ガード・Phase c で実装)。 - 各クローンの
CLAUDE.local.mdは本マトリクスを重複転記しない(委譲方式)。CLAUDE.local.md には役割(main/doc/mas/ocr/drp)・個人パス・MCP のみを書き、編集可否は本ファイルの役割列を引く。理由: CLAUDE.local.md は gitignore で git 追従しないため、マトリクスを転記すると本ファイル更新時にドリフトする。既存クローンで転記が残っている場合は一度きり除去すれば以後は自動追従(git pull のみ)になる
Claude スペースの掃除
Claude スペース(~/.claude/projects/ 配下・cwd ごとに自動生成される履歴)は GCS(gs://bizlp-claude-conversations)へ日次同期される。次のスペースは安全に削除してよい(削除前に最新同期 OK を必ず確認):
- 削除済みディレクトリを cwd に持つ「幽霊スペース」
- 実体の無い
.claude-worktreesを指す worktree スペース(worktree 運用は非推奨) - 一時
/private/tmp/...等のスクラッチスペース
アクティブな clone のスペースは削除しない。
ローカル環境の絶対パス
個人マシン固有のパス・clasp 認証情報・MCP 接続設定は CLAUDE.local.md(gitignore)に置く。
リポジトリ内の CLAUDE.md には記述しない(複数環境で同じ CLAUDE.md を共有するため)。
参考テンプレート: CLAUDE.local.md.example