第11章 互いに邪魔しない作業空間をつくる

11.1 導入:同じノートに同時に書く問題

4人班で実験レポートを仕上げる場面を考える。

  • Aさんは表の数値を修正する
  • Bさんはグラフを描き直す
  • Cさんは考察の文章を書く
  • Dさんは全体の誤字を直す

役割分担は第7章で学んだ通り、明確にできている。依存関係も第8章で設計した。通信プロトコルも第9章で整えた。自律的にタスクを取る仕組みも第10章で導入した。

では、全員が同じ紙1枚に赤ペンで直接書き込むとしたらどうなるか。

Aさんが表の数値を直している最中に、Dさんが同じ行の誤字を修正する。Bさんがグラフの位置を変えたら、Cさんが書いていた考察のスペースがなくなる。しかも、誰がどこを変えたのか、後からでは判別がつかない。

問題は役割分担にはない。問題は、全員が同じ場所で同時に作業していることにある。

この状況を解消する方法は単純である。各自にコピーを1部ずつ渡し、別々の紙で作業する。最後に4人の変更を比較し、どれを採用するかを統合担当が判断すればよい。

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

共有作業空間と分離作業空間の対比

第7章から第10章までは「誰が何をするか」を設計してきた。本章では「どこでやるか」を設計する。役割の分離だけでは足りず、作業空間の分離が必要になるのである。

11.2 なぜ干渉が起きるか

干渉の原因を整理する。

複数の担当が同時に作業するとき、干渉が起きる条件は次の通りである。

  1. 同じ対象を触る(同じファイル、同じ変数、同じデータ)
  2. 同時に変更する(一方の変更がもう一方を上書きする)
  3. 変更の記録が残らない(誰がいつ何を変えたか追跡できない)

この3つがすべて揃うと、干渉が発生する。逆に言えば、どれか1つでも断てば干渉は防げる。

表 1: 干渉を断つ3つの方法
干渉の条件 断つ方法
同じ対象を触る 担当ごとに触る対象を完全に分ける(ただし現実には難しいことが多い)
同時に変更する 一度に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)が起きる。衝突を解消するには、人間(統合担当)が「どちらの変更を採用するか」を判断しなければならない。

表 2: ロックと分離の比較
方法 利点 弱点
ファイルロック 衝突が起きない。仕組みが単純 待ち時間が長くなる。デッドロックのリスク
作業空間分離 全員が同時に作業できる 統合時に衝突が起こりうる。統合の判断が必要
重要分離は万能ではない。統合の設計まで含めて初めて完結する

作業空間を分離すれば干渉は防げるが、最後に変更を持ち寄る統合のステップが不可欠である。統合なしの分離は、バラバラの断片を残すだけで、仕事は完成しない。

ここで、もう1つの視点を整理する。第10章で学んだタスクの状態管理と、本章で学ぶ作業空間の管理は別の問題である。

表 3: タスクの管理と作業空間の管理の区別
管理の対象 何を管理するか 状態の例
タスク(仕事の状態) 何をするか、誰が担当か pending → in_progress → completed
作業空間(場所の状態) どこで作業するか なし → 使用中 → 片付け済み / 保留

タスク表は「仕事の予定表」であり、作業空間は「個別の作業机」である。予定表だけでは同じ机の上の衝突は防げない。両方を設計して初めて、複数の担当が安全に並列作業できる。

11.5 物理実験の系の分離との対応

作業空間の分離は、物理実験における系の分離と同じ発想である。

物理実験では、外部からの干渉を遮断するためにさまざまな分離手法が使われる。これらは、AI の作業空間分離と構造的に同じ問題を解いている。

表 4: 物理実験の分離手法とAI作業空間分離の対応
物理実験の分離手法 何を遮断するか AI作業空間分離での対応
電磁シールド 外部の電磁波が測定信号に混入する 他の担当の変更が自分の作業空間に混入する
振動遮断台 建物の振動が精密測定を乱す バックグラウンドで動く他のタスクが作業中のファイルを変える
独立測定系 一方の測定が他方の測定条件を変えてしまう 一方の担当の編集が他方の担当の前提を壊す
クリーンルーム 微粒子が実験試料を汚染する 不要なファイルや設定が作業空間に紛れ込む

電磁シールドの例をもう少し掘り下げる。

微弱な電気信号を測定するとき、周囲の電磁波(スマートフォン、蛍光灯、他の実験装置)が信号に混入すると、正しい測定ができない。そこで、測定系を金属箱(電磁シールド)で囲み、外部の電磁波を遮断する。

この「遮断」は、信号が外から中に入るのを防ぐだけでなく、中から外に漏れるのを防ぐ効果もある。AI の作業空間分離でも同じことが起きる。自分の変更が他の担当に影響しないこと(外に漏れない)と、他の担当の変更が自分に影響しないこと(外から入らない)の両方向の遮断が、分離の本質である。

もう1つ重要な点がある。電磁シールドは永久に閉じておくわけではない。測定が終われば箱を開け、結果を取り出し、他の測定結果と比較・統合する。作業空間の分離も同じで、作業中は閉じ、完了後は開けて統合する

分離は「閉じ込める」ことが目的ではなく、作業中の干渉を防ぎつつ、最後にきれいに結果を取り出せるようにすることが目的である。

11.6 手順で見る:作業空間の分離と統合

11.3〜11.4節の概念を、手順モデルで確認する。

手順モデル:作業空間の分離

  1. 元のフォルダ(共有プロジェクト)をコピーして、各担当に独立した作業空間を渡す
  2. 各担当は自分の作業空間のファイルだけを編集する。互いのコピーには触れない
  3. 全担当の作業が完了したら、変更箇所を一覧にして比較する
  4. 統合担当(人間)が、どの変更を採用するかを判断する

たとえば、調査担当と構成担当が同じ report.txt を編集する場合を考える。

表 5: 作業空間分離の実行例
手順 担当 作業空間 行動
1 共有 → コピー 調査担当用・構成担当用に2つの作業空間を作成
2 調査担当 workspace_調査 report.txt を「温度: 78.3℃(改訂版)」に編集
3 構成担当 workspace_構成 report.txt を「温度: 78.3℃(図を追加)」に編集
4 統合担当 両者の変更を並べて比較し、採否を判断する

2人が同じファイルを編集しても、作業空間が分かれているため干渉しない。ここから先——どちらの変更を採用するかの判断——は統合担当(人間)の仕事である。

統合では、ファイルごとに3つのパターンで判断する。

表 6: 統合の判断基準
パターン 状態 判断
新規ファイル 片方の担当だけが新しいファイルを作った 無条件に追加する
片方だけ変更 1人だけが既存ファイルを変更した そのまま採用する
両方が変更 2人が同じファイルを変更した 衝突として記録し、人間が判断する

これは第12章の権限設計と同じ発想である。自動で処理できるものは自動で、判断が必要なものは人間に返す

作業が終わった後の片付けも重要である。

  • 変更がなかった作業空間 → そのまま削除してよい
  • 変更があった作業空間 → 統合するまで保持する。統合後に削除する

物理実験で「何も書かなかった実験用紙は捨ててよい。途中まで書いたものは、捨てるか残すかを決める」というのと同じ判断である。

11.7 第12章への橋渡し

本章では、複数の担当が同時に作業するときの干渉防止を学んだ。ファイルロック(使っている間は待つ)と作業空間分離(各自に独立したコピーを与える)の2つのアプローチがあり、どちらも利点と弱点がある。

ここまでで、本書の技術的な道具立ては一通り揃った。

表 7: 後半章で設計してきたもの
テーマ 設計の対象
第7章 役割分担 誰がやるか
第8章 依存関係 どの順番でやるか
第9章 通信プロトコル どう連絡するか
第10章 自律 自分で見つけて動けるか
第11章 作業空間分離 どこでやるか

しかし、最後に1つ残っている問いがある。

AI にどこまで任せてよいのか。

第3章で AI に道具を持たせた。第10章では自律的に仕事を取る仕組みを入れた。道具を持ち、自律的に動く AI は便利だが、便利さが増すほど危険も増す。ファイルを読めるなら秘密のファイルも読めてしまう。コマンドを実行できるなら破壊的なコマンドも実行できてしまう。外部に接続できるなら意図しない情報を送ってしまうこともある。

次の第12章——本書の最終章——では、権限・安全・倫理を扱う。「AI に何ができるか」ではなく「AI に何を許すか」を設計し、最後に人間が責任を持つ構造を学ぶ。

演習:別作業机方式でミニ教材を作る

形式:3〜4人1組、30分

テーマ:以下から1つ選ぶ。

  • 「高校生向けに”摩擦力”を説明する1枚教材を作る」
  • 「研究室の新人向けに”装置の使い方”を1枚にまとめる」
  • 「学園祭の案内チラシを作る」

準備物

教員は最初に共通素材を全グループに配布する。

  • 元の説明文(または下書き)のコピー × 人数分
  • 各自の作業用紙(白紙)

役割

表 8: 演習の役割
役割 担当内容
A:説明文改善 文章表現を直す
B:図表改善 図やレイアウトを直す
C:例題担当 例題や具体例を追加する
D:統合担当 最後に各自の変更を集め、完成版を作る

ルール

  1. 各担当は元の原稿に直接書き込まない。自分専用のコピーで作業する
  2. 作業用紙には必ず次の3つを書く
    • タスク名(何を変えたか)
    • 変更箇所(どこを変えたか)
    • 戻したいときの目印(元の記述を残しておく)
  3. 15分経過時点で教員がイベントカードを出す
    • 「AとBが同じ箇所を変えた」→ どちらを採用するか判断
    • 「Cの変更だけ戻したい」→ Cの作業用紙を見て、元の記述に戻す
  4. 最後の5分で統合担当が、どの変更を採用するかを判断し、完成版をまとめる

振り返りの問い

  • 別々の紙で作業したことで、比較はしやすかったか
  • 元の原稿を残しておいたことで、「戻す」操作はできたか
  • 統合の段階で、同じ箇所への変更が衝突したとき、判断基準は何だったか
  • もし全員が1枚の紙に直接書き込んでいたら、「戻す」はできたか
  • 「どこで作業したか」を記録しておく意味が実感できたか

発展(アプリで試す):Codex App の Worktree 機能を使い、同じファイルを2つの独立した作業空間で編集させよ。diff pane で両者の変更を比較し、部分採用で統合せよ。

章末課題

課題:自分の長期課題を、分離作業空間つきで設計する

今学期の課題や研究活動から、複数の改善案や並列作業が起こりそうなものを1つ選び、作業空間分離の設計書を作成せよ。

想定する作業の例

  • 実験レポートの改善(複数の箇所を同時に修正する)
  • プレゼン資料の改訂(デザインと内容を並行で直す)
  • 卒研の文献整理(複数の文献を並行で読む)
  • 研究紹介ポスターの作成(文章と図を並行で作る)

必須項目

  1. 全体課題:何を完成させるか(1〜2文)
  2. 分けるべき作業空間:2〜4個の作業空間を定義し、各空間で触る対象を明記する
  3. 干渉点の特定:どの変更が衝突しそうかを具体的に挙げる
  4. 分離方法の選択:各干渉点に対して、ロックと分離のどちらを使うか、理由とともに記述する
  5. 統合の設計
    • いつ統合するか(全員が完了したら? 途中で段階的に?)
    • 衝突が起きたとき、誰がどの基準で判断するか
  6. 片付けの基準
    • 変更がなかった作業空間をどう扱うか
    • 統合後の作業空間をどう扱うか(削除? 保管?)
  7. 復旧の設計:もし統合に失敗したとき、どうやって元の状態に戻すか

提出形式:設計書(図+説明文400〜700字)

評価観点

  • 役割分担と作業空間分離が区別できているか(「誰が」と「どこで」が混同されていないか)
  • 干渉点が具体的に特定されているか
  • 分離方法の選択に妥当な理由があるか
  • 統合の手順と判断基準が明示されているか
  • 片付けと復旧まで設計されているか(分離して終わりではない)
  • 第8章(依存関係)、第10章(自律)の考え方と整合しているか

第11章のまとめ

本章では、複数の担当が同時に作業するときの干渉防止——作業空間分離(worktree isolation)——を学んだ。

要点を整理する。

  1. 役割分担(「誰が何をするか」)だけでは干渉は防げない。作業空間の分離(「どこでやるか」)が別途必要である
  2. 干渉は、同じ対象を・同時に変更し・記録が残らないとき起きる。この3条件のどれかを断てばよい
  3. ファイルロックは「使っている間は他は待つ」仕組み。単純だが、待ち時間が長くなり、デッドロックのリスクもある
  4. 作業空間分離は各担当に独立したコピーを与える仕組み。全員が同時に作業できるが、最後の統合で衝突が起こりうる
  5. 物理実験の電磁シールドや振動遮断台と同じ発想である。外部からの干渉を遮断し、かつ自分の変更も外に漏らさない——両方向の遮断が分離の本質
  6. 分離は万能ではない。統合の設計と、片付けの基準まで含めて、初めて作業空間分離は完結する

次の最終章では、AI に道具と自律性を持たせたとき、何をどこまで許し、どこで人間が責任を持つか——権限・安全・倫理を扱う。