block-beta columns 1 A["<b>共有作業空間</b><br>A・B・C・D が同じ1枚の紙に書き込む<br>→ 変更が衝突する"]:1 B["<b>分離作業空間</b><br>各自にコピーを配り、独立して作業する<br>→ 最後に比較して統合する"]:1 style A fill:#f8d7da,stroke:#dc3545 style B fill:#d4edda,stroke:#28a745
第11章 互いに邪魔しない作業空間をつくる
11.1 導入:同じノートに同時に書く問題
4人班で実験レポートを仕上げる場面を考える。
- Aさんは表の数値を修正する
- Bさんはグラフを描き直す
- Cさんは考察の文章を書く
- Dさんは全体の誤字を直す
役割分担は第7章で学んだ通り、明確にできている。依存関係も第8章で設計した。通信プロトコルも第9章で整えた。自律的にタスクを取る仕組みも第10章で導入した。
では、全員が同じ紙1枚に赤ペンで直接書き込むとしたらどうなるか。
Aさんが表の数値を直している最中に、Dさんが同じ行の誤字を修正する。Bさんがグラフの位置を変えたら、Cさんが書いていた考察のスペースがなくなる。しかも、誰がどこを変えたのか、後からでは判別がつかない。
問題は役割分担にはない。問題は、全員が同じ場所で同時に作業していることにある。
この状況を解消する方法は単純である。各自にコピーを1部ずつ渡し、別々の紙で作業する。最後に4人の変更を比較し、どれを採用するかを統合担当が判断すればよい。
第7章から第10章までは「誰が何をするか」を設計してきた。本章では「どこでやるか」を設計する。役割の分離だけでは足りず、作業空間の分離が必要になるのである。
11.2 なぜ干渉が起きるか
干渉の原因を整理する。
複数の担当が同時に作業するとき、干渉が起きる条件は次の通りである。
- 同じ対象を触る(同じファイル、同じ変数、同じデータ)
- 同時に変更する(一方の変更がもう一方を上書きする)
- 変更の記録が残らない(誰がいつ何を変えたか追跡できない)
この3つがすべて揃うと、干渉が発生する。逆に言えば、どれか1つでも断てば干渉は防げる。
| 干渉の条件 | 断つ方法 |
|---|---|
| 同じ対象を触る | 担当ごとに触る対象を完全に分ける(ただし現実には難しいことが多い) |
| 同時に変更する | 一度に1人しか変更できないようにする(ロック) |
| 変更の記録が残らない | 各自に独立した作業空間を与え、変更履歴を残す(分離) |
本章では、2番目のロックと3番目の分離を掘り下げる。
11.3 解決策1:ファイルロック
最も直感的な方法は、使っている間は他の人が触れないようにする——ファイルロックである。
物理実験で例える。ある精密機器を使うとき、壁に「使用中:Aさん 14:00〜」と札を掛ける。他の人はその札を見て、使い終わるまで待つ。使い終わったら札を外し、次の人が使える。
flowchart TD S1["A: ファイルXの<br>ロックを取得 → 編集開始"] S2["B: ファイルXの<br>ロックを要求 → 待機"] S3["A: 編集完了<br>→ ロックを解放"] S4["B: ロックを取得<br>→ 編集開始"] S1 --> S2 --> S3 --> S4 style S1 fill:#d4edda,stroke:#28a745 style S2 fill:#f8d7da,stroke:#dc3545 style S3 fill:#fff3cd,stroke:#ffc107 style S4 fill:#d4edda,stroke:#28a745
ロックの利点は仕組みが単純なことである。「使っている人がいたら待つ」だけでよい。
しかし、ロックには大きな弱点がある。
弱点1:待ち時間が長くなる。Aさんの作業が長引けば、Bさんはずっと待たなければならない。並列化の利点が失われる。
弱点2:デッドロック。2人が互いに相手のロックを待ち続ける状況が起こりうる。
A: ファイルXのロックを持っている。ファイルYが欲しい → 待ち
B: ファイルYのロックを持っている。ファイルXが欲しい → 待ち
→ 両者とも永遠に待ち続ける(デッドロック)
物理実験で言えば、Aさんがオシロスコープを使いながらマルチメーターを待ち、Bさんがマルチメーターを使いながらオシロスコープを待つ——互いに「先に返してくれ」と言い合って作業が止まる状況である。
ロックは短時間の排他的な操作には向くが、長い作業を並列に進めたいときには限界がある。
11.4 解決策2:作業空間の分離
もう1つのアプローチは、そもそも同じ場所で作業しないことである。各担当に独立した作業空間(コピー)を与え、それぞれの空間で自由に作業する。最後に結果を持ち寄って統合する。
これを作業空間分離(worktree isolation)と呼ぶ。
flowchart TD
S["元の資料(共有)"] --> A["作業空間A"]
S --> B["作業空間B"]
S --> C["作業空間C"]
S --> D["作業空間D"]
A -- "作業" --> M["統合<br>どの変更を採用するか判断"]
B -- "作業" --> M
C -- "作業" --> M
D -- "作業" --> M
M --> F["完成版"]
図: 分離→作業→統合の流れ
作業空間分離の流れは次の通りである。
手順1:分離(分岐)。元の資料のコピーを各担当に配る。全員が同じ初期状態から出発するが、以後の変更は互いに影響しない。
手順2:作業。各担当が自分の作業空間で自由に作業する。Aさんが表を直しても、Bさんのコピーには影響しない。
手順3:統合(合流)。全員の作業が終わったら、変更を持ち寄る。同じ箇所を複数人が変えていた場合は、どちらを採用するか判断する。
ここで重要なのは、分離は万能ではないということである。統合の段階で、2人が同じ箇所を異なる方向に変更していれば、衝突(conflict)が起きる。衝突を解消するには、人間(統合担当)が「どちらの変更を採用するか」を判断しなければならない。
| 方法 | 利点 | 弱点 |
|---|---|---|
| ファイルロック | 衝突が起きない。仕組みが単純 | 待ち時間が長くなる。デッドロックのリスク |
| 作業空間分離 | 全員が同時に作業できる | 統合時に衝突が起こりうる。統合の判断が必要 |
作業空間を分離すれば干渉は防げるが、最後に変更を持ち寄る統合のステップが不可欠である。統合なしの分離は、バラバラの断片を残すだけで、仕事は完成しない。
ここで、もう1つの視点を整理する。第10章で学んだタスクの状態管理と、本章で学ぶ作業空間の管理は別の問題である。
| 管理の対象 | 何を管理するか | 状態の例 |
|---|---|---|
| タスク(仕事の状態) | 何をするか、誰が担当か | pending → in_progress → completed |
| 作業空間(場所の状態) | どこで作業するか | なし → 使用中 → 片付け済み / 保留 |
タスク表は「仕事の予定表」であり、作業空間は「個別の作業机」である。予定表だけでは同じ机の上の衝突は防げない。両方を設計して初めて、複数の担当が安全に並列作業できる。
11.5 物理実験の系の分離との対応
作業空間の分離は、物理実験における系の分離と同じ発想である。
物理実験では、外部からの干渉を遮断するためにさまざまな分離手法が使われる。これらは、AI の作業空間分離と構造的に同じ問題を解いている。
| 物理実験の分離手法 | 何を遮断するか | AI作業空間分離での対応 |
|---|---|---|
| 電磁シールド | 外部の電磁波が測定信号に混入する | 他の担当の変更が自分の作業空間に混入する |
| 振動遮断台 | 建物の振動が精密測定を乱す | バックグラウンドで動く他のタスクが作業中のファイルを変える |
| 独立測定系 | 一方の測定が他方の測定条件を変えてしまう | 一方の担当の編集が他方の担当の前提を壊す |
| クリーンルーム | 微粒子が実験試料を汚染する | 不要なファイルや設定が作業空間に紛れ込む |
電磁シールドの例をもう少し掘り下げる。
微弱な電気信号を測定するとき、周囲の電磁波(スマートフォン、蛍光灯、他の実験装置)が信号に混入すると、正しい測定ができない。そこで、測定系を金属箱(電磁シールド)で囲み、外部の電磁波を遮断する。
この「遮断」は、信号が外から中に入るのを防ぐだけでなく、中から外に漏れるのを防ぐ効果もある。AI の作業空間分離でも同じことが起きる。自分の変更が他の担当に影響しないこと(外に漏れない)と、他の担当の変更が自分に影響しないこと(外から入らない)の両方向の遮断が、分離の本質である。
もう1つ重要な点がある。電磁シールドは永久に閉じておくわけではない。測定が終われば箱を開け、結果を取り出し、他の測定結果と比較・統合する。作業空間の分離も同じで、作業中は閉じ、完了後は開けて統合する。
分離は「閉じ込める」ことが目的ではなく、作業中の干渉を防ぎつつ、最後にきれいに結果を取り出せるようにすることが目的である。
11.6 手順で見る:作業空間の分離と統合
11.3〜11.4節の概念を、手順モデルで確認する。
手順モデル:作業空間の分離
- 元のフォルダ(共有プロジェクト)をコピーして、各担当に独立した作業空間を渡す
- 各担当は自分の作業空間のファイルだけを編集する。互いのコピーには触れない
- 全担当の作業が完了したら、変更箇所を一覧にして比較する
- 統合担当(人間)が、どの変更を採用するかを判断する
たとえば、調査担当と構成担当が同じ report.txt を編集する場合を考える。
| 手順 | 担当 | 作業空間 | 行動 |
|---|---|---|---|
| 1 | — | 共有 → コピー | 調査担当用・構成担当用に2つの作業空間を作成 |
| 2 | 調査担当 | workspace_調査 | report.txt を「温度: 78.3℃(改訂版)」に編集 |
| 3 | 構成担当 | workspace_構成 | report.txt を「温度: 78.3℃(図を追加)」に編集 |
| 4 | 統合担当 | — | 両者の変更を並べて比較し、採否を判断する |
2人が同じファイルを編集しても、作業空間が分かれているため干渉しない。ここから先——どちらの変更を採用するかの判断——は統合担当(人間)の仕事である。
統合では、ファイルごとに3つのパターンで判断する。
| パターン | 状態 | 判断 |
|---|---|---|
| 新規ファイル | 片方の担当だけが新しいファイルを作った | 無条件に追加する |
| 片方だけ変更 | 1人だけが既存ファイルを変更した | そのまま採用する |
| 両方が変更 | 2人が同じファイルを変更した | 衝突として記録し、人間が判断する |
これは第12章の権限設計と同じ発想である。自動で処理できるものは自動で、判断が必要なものは人間に返す。
作業が終わった後の片付けも重要である。
- 変更がなかった作業空間 → そのまま削除してよい
- 変更があった作業空間 → 統合するまで保持する。統合後に削除する
物理実験で「何も書かなかった実験用紙は捨ててよい。途中まで書いたものは、捨てるか残すかを決める」というのと同じ判断である。
11.7 第12章への橋渡し
本章では、複数の担当が同時に作業するときの干渉防止を学んだ。ファイルロック(使っている間は待つ)と作業空間分離(各自に独立したコピーを与える)の2つのアプローチがあり、どちらも利点と弱点がある。
ここまでで、本書の技術的な道具立ては一通り揃った。
| 章 | テーマ | 設計の対象 |
|---|---|---|
| 第7章 | 役割分担 | 誰がやるか |
| 第8章 | 依存関係 | どの順番でやるか |
| 第9章 | 通信プロトコル | どう連絡するか |
| 第10章 | 自律 | 自分で見つけて動けるか |
| 第11章 | 作業空間分離 | どこでやるか |
しかし、最後に1つ残っている問いがある。
AI にどこまで任せてよいのか。
第3章で AI に道具を持たせた。第10章では自律的に仕事を取る仕組みを入れた。道具を持ち、自律的に動く AI は便利だが、便利さが増すほど危険も増す。ファイルを読めるなら秘密のファイルも読めてしまう。コマンドを実行できるなら破壊的なコマンドも実行できてしまう。外部に接続できるなら意図しない情報を送ってしまうこともある。
次の第12章——本書の最終章——では、権限・安全・倫理を扱う。「AI に何ができるか」ではなく「AI に何を許すか」を設計し、最後に人間が責任を持つ構造を学ぶ。
演習:別作業机方式でミニ教材を作る
形式:3〜4人1組、30分
テーマ:以下から1つ選ぶ。
- 「高校生向けに”摩擦力”を説明する1枚教材を作る」
- 「研究室の新人向けに”装置の使い方”を1枚にまとめる」
- 「学園祭の案内チラシを作る」
準備物:
教員は最初に共通素材を全グループに配布する。
- 元の説明文(または下書き)のコピー × 人数分
- 各自の作業用紙(白紙)
役割:
| 役割 | 担当内容 |
|---|---|
| A:説明文改善 | 文章表現を直す |
| B:図表改善 | 図やレイアウトを直す |
| C:例題担当 | 例題や具体例を追加する |
| D:統合担当 | 最後に各自の変更を集め、完成版を作る |
ルール:
- 各担当は元の原稿に直接書き込まない。自分専用のコピーで作業する
- 作業用紙には必ず次の3つを書く
- タスク名(何を変えたか)
- 変更箇所(どこを変えたか)
- 戻したいときの目印(元の記述を残しておく)
- 15分経過時点で教員がイベントカードを出す
- 「AとBが同じ箇所を変えた」→ どちらを採用するか判断
- 「Cの変更だけ戻したい」→ Cの作業用紙を見て、元の記述に戻す
- 最後の5分で統合担当が、どの変更を採用するかを判断し、完成版をまとめる
振り返りの問い:
- 別々の紙で作業したことで、比較はしやすかったか
- 元の原稿を残しておいたことで、「戻す」操作はできたか
- 統合の段階で、同じ箇所への変更が衝突したとき、判断基準は何だったか
- もし全員が1枚の紙に直接書き込んでいたら、「戻す」はできたか
- 「どこで作業したか」を記録しておく意味が実感できたか
発展(アプリで試す):Codex App の Worktree 機能を使い、同じファイルを2つの独立した作業空間で編集させよ。diff pane で両者の変更を比較し、部分採用で統合せよ。
章末課題
課題:自分の長期課題を、分離作業空間つきで設計する
今学期の課題や研究活動から、複数の改善案や並列作業が起こりそうなものを1つ選び、作業空間分離の設計書を作成せよ。
想定する作業の例:
- 実験レポートの改善(複数の箇所を同時に修正する)
- プレゼン資料の改訂(デザインと内容を並行で直す)
- 卒研の文献整理(複数の文献を並行で読む)
- 研究紹介ポスターの作成(文章と図を並行で作る)
必須項目:
- 全体課題:何を完成させるか(1〜2文)
- 分けるべき作業空間:2〜4個の作業空間を定義し、各空間で触る対象を明記する
- 干渉点の特定:どの変更が衝突しそうかを具体的に挙げる
- 分離方法の選択:各干渉点に対して、ロックと分離のどちらを使うか、理由とともに記述する
- 統合の設計:
- いつ統合するか(全員が完了したら? 途中で段階的に?)
- 衝突が起きたとき、誰がどの基準で判断するか
- 片付けの基準:
- 変更がなかった作業空間をどう扱うか
- 統合後の作業空間をどう扱うか(削除? 保管?)
- 復旧の設計:もし統合に失敗したとき、どうやって元の状態に戻すか
提出形式:設計書(図+説明文400〜700字)
評価観点:
- 役割分担と作業空間分離が区別できているか(「誰が」と「どこで」が混同されていないか)
- 干渉点が具体的に特定されているか
- 分離方法の選択に妥当な理由があるか
- 統合の手順と判断基準が明示されているか
- 片付けと復旧まで設計されているか(分離して終わりではない)
- 第8章(依存関係)、第10章(自律)の考え方と整合しているか
第11章のまとめ
本章では、複数の担当が同時に作業するときの干渉防止——作業空間分離(worktree isolation)——を学んだ。
要点を整理する。
- 役割分担(「誰が何をするか」)だけでは干渉は防げない。作業空間の分離(「どこでやるか」)が別途必要である
- 干渉は、同じ対象を・同時に変更し・記録が残らないとき起きる。この3条件のどれかを断てばよい
- ファイルロックは「使っている間は他は待つ」仕組み。単純だが、待ち時間が長くなり、デッドロックのリスクもある
- 作業空間分離は各担当に独立したコピーを与える仕組み。全員が同時に作業できるが、最後の統合で衝突が起こりうる
- 物理実験の電磁シールドや振動遮断台と同じ発想である。外部からの干渉を遮断し、かつ自分の変更も外に漏らさない——両方向の遮断が分離の本質
- 分離は万能ではない。統合の設計と、片付けの基準まで含めて、初めて作業空間分離は完結する
次の最終章では、AI に道具と自律性を持たせたとき、何をどこまで許し、どこで人間が責任を持つか——権限・安全・倫理を扱う。