並列セッション共有アーキテクチャ
2026-04-24 作成 / 複数 Claude Code セッション間で作業状況をリアルタイム共有する仕組み
一言で説明すると
共有黒板モデル。
ファミレスの厨房に 全員が見える一枚の黒板 がある。
各コック(=各 Claude Code セッション)が、自分の注文を受けたとき・作業中・完成したときに黒板にチョークで書き足す。
他のコックは黒板を見れば「今誰が何を作っているか」「さっき誰が何を作り終えたか」が分かる。
| 黒板のたとえ | 実体 |
| 黒板 | tmp/sessions/ フォルダ |
| チョーク(書き込みツール) | scripts/session/session_lib.py |
| 黒板を写真に撮って壁に貼る | 部署/調査分析部/output/session_board.html |
| 写真を撮る人(3分毎に壁紙を更新) | cron SessionBoard_3min |
物理的な構造
セッションA(秘書モード) セッションB(別の作業)
│ │
│ register "作業タイトル" │ register "別作業"
▼ ▼
┌─────────────────────────────────────────────────┐
│ F:\claude-work\tmp\sessions\ │
│ ├─ active\ │
│ │ ├─ 20260424_130842_fe5c6240.json │◀─ A 本人が書き込む
│ │ └─ 20260424_150000_abcd1234.json │◀─ B 本人が書き込む
│ ├─ work_log\ │
│ │ ├─ 20260424_130842_fe5c6240.jsonl │◀─ A の作業履歴(追記)
│ │ └─ 20260424_150000_abcd1234.jsonl │◀─ B の作業履歴(追記)
│ └─ done\ ← 終わったら移動 │
└─────────────────────────────────────────────────┘
▲ ▲
│ list で他セッションを読み取る │ list で他セッションを読み取る
│ │
セッションA セッションB
衝突しない理由: 各セッションは 自分の JSON にしか書き込まない。お互いの JSON は 読むだけ。ダッシュボード.md を複数セッションが同時編集していた時代の「最終更新」上書き合戦を構造的に回避している。
3種類のファイルと役割
| ファイル | 役割 | 書き込みタイミング |
active/<session_id>.json |
今走っているセッションの 現在状態(title・現在作業・最終活動時刻) |
register / log / task するたびに上書き |
work_log/<session_id>.jsonl |
そのセッションの 履歴全件(append-only・1行=1イベント) |
log するたびに 1 行追加 |
done/<session_id>.json |
終了セッションのアーカイブ |
close または 60分無活動で自動移動 |
共有の流れ(具体例)
14:00
セッションA で「ad_full_audit 完了」とログを書き込む
→ active/A.json の last_activity_at 更新
→ work_log/A.jsonl に 1 行追加
14:03
cron(SessionBoard_3min) が発火、全 JSON をスキャン
→ session_board.html を再生成
→ A の最新状態が HTML に反映される
14:05
セッションB が起動
→ SessionStart hook が session_start_hook.py を発火
→ B 自身を active/ に登録
→ B 自身に additionalContext として「並列アクティブ: A」を注入
→ B の AI は「A が動いてるんだな」と認識して作業開始
14:06
セッションB で内川様が「A で今何やってる?」と聞く
→ B の AI は active/A.json と work_log/A.jsonl を読む
→ 「A は ad_full_audit を 14:00 に完了しました」と答える
なぜこの構造なのか(設計意図)
- 同時編集の衝突回避: 各セッションが別ファイルにしか書かないので、ロック不要
- 永続化: ファイルシステムなので、セッション間・PC 再起動後でも保持
- 可視化の外出し: ボード HTML は別 cron が作るので、セッション側は書き込むだけでよい(責務分離)
- 失敗してもハング無し: hook が落ちても exit 0 を返す設計なので、Claude Code 本体の起動を止めない
- ヒューマンリーダブル: JSON/JSONL はテキストなので、エディタで直接読める・git で差分追跡できる
主要コマンド(AI が手動で叩く場合)
# 新セッション登録(session_id が stdout に出る)
py -3 scripts/session/session_lib.py register "作業タイトル"
# 進捗ログ(大きな完了・判断転換点ごとに)
py -3 scripts/session/session_lib.py log <sid> completed "概要" [ref1] [ref2]...
# 現在の作業を更新
py -3 scripts/session/session_lib.py task <sid> "現在の作業"
# 他セッション一覧(並列状況を把握したい時)
py -3 scripts/session/session_lib.py list
# セッション終了
py -3 scripts/session/session_lib.py close <sid> "最終サマリ"
# 60分無活動のセッションを done/ に移動
py -3 scripts/session/session_lib.py cleanup 60
SessionStart hook に session_start_hook.py が登録されているため、新しい Claude Code セッション起動時には register が自動で発火する。AI は手動コマンドを叩かなくても登録される。
Google Docs と何が違うのか
共有 Google Docs の file-system 版。
複数人が同じドキュメントに直接書くのではなく、
- 各自が自分のメモ帳に書く(各セッションが自分の
active/<id>.json に書き込む)
- 3分ごとに別の人が全員のメモ帳を回収して壁に貼る(cron が
session_board.html を再生成)
- 誰でもその壁を見に行ける(ブラウザで HTML を開く・AI も
list コマンドで読む)
…という構造。衝突しない・中央サーバーいらない・永続化される・人間も AI も読める。
関連ファイル一覧
| ファイル | 役割 |
scripts/session/session_lib.py | CLI ツール(register / log / task / close / list / cleanup) |
scripts/session/session_board.py | HTML ボード生成スクリプト |
scripts/session/session_start_hook.py | SessionStart hook 本体(新セッション自動登録) |
scripts/cron/session_board.bat | cron 経由の HTML 再生成 wrapper |
scripts/cron/tasks.yaml | SessionBoard_3min cron タスク定義 |
.claude/settings.local.json | SessionStart hook 登録(2件・inject_session_context + session_start_hook) |
.claude/.current_session_id | 現セッションの ID(hook が書き込み・AI が読む) |
部署/調査分析部/output/session_board.html | ボード本体(3分毎更新) |
tmp/sessions/active/ | アクティブセッションメタの置き場 |
tmp/sessions/work_log/ | 作業履歴ログの置き場 |
tmp/sessions/done/ | 終了セッションアーカイブの置き場 |
memory/feedback_session_board_manual_ops.md | AI の行動ルール |
CLAUDE.md §セッション開始・終了プロトコル | AI 必読のプロトコル |