Handoff・Scratchpad・Token Burning:長いAIタスクでコンテキストを管理する方法

約13分developer-tools
#ハンドオフ#スクラッチパッド#トークンバーニング#デタッチドHEAD#アップストリーム#.gitignore#AIコーディングツール#用語集
※編集方針:以下の業務状況および人物は、用語の理解を助けるための仮想シナリオです。実際の著者の経験や特定の企業での出来事を再現したものではありません。
3週間の休暇を前に、進行中のAI開発タスクを他のチームメンバーに引き継ぐ必要がある状況を想定してみましょう。
調べてみると、このような状況にぴったりの表現がありました。

席を外す前に、次の担当者へ状況を正確に引き継ぐこと:ハンドオフ

markdown
1# 핸드오프 문서
2- 진행 상황: 결제 모듈 80% 완료
3- 남은 작업: 환불 API 연동
4- 막힌 부분: 외부사 문서 응답 대기 중
これまでに何を行い、何が残っており、どこで立ち往生しているのかを、次の担当者が最初から迷わないように整理して引き渡す作業です。リレーでバトンを渡す際、ただ投げるのではなく、相手がしっかりと受け取ったことを確認してから手を離すのに似ています。
進行状況と行き詰まった箇所をドキュメントに残し、次の担当者がそのまま引き継げる仕組み
進行状況と行き詰まった箇所をドキュメントに残し、次の担当者がそのまま引き継げる仕組み
ドキュメントを整理していると、これまでにエージェントが作業中に残した一時的なメモファイルが目に留まりました。もう一度開いてみると、思った以上に充実した内容が書かれていました。

正式なドキュメントではないものの、残り続けているメモファイル:スクラッチパッド

text
1scratchpad.md
2- 외부사 API 응답 형식이 문서와 다름 (실제로는 배열)
3- 테스트 계정 비밀번호는 슬랙 #payment-dev 참고
正式なコミットには含まれないこのファイルを読み返してみると、実は最も実践的な情報がすべてここに書かれていました。公式文書としてまとめるには少しハードルの高い雑多なメモを、後で参照するために気軽に書き留めておく一時的なノートです。形式張ってはいませんが、すぐに役立つ情報だけが集まっている、会議中に手のひらに書き留めるメモのようなファイルでした。このファイルへのリンクも、ハンドオフ用のドキュメントに残しておきました。
正式なドキュメントにまとめる前に、気軽に残しておく一時的なノート
正式なドキュメントにまとめる前に、気軽に残しておく一時的なノート
最後に、大きなタスクを一つエージェントに任せようとしたところ、チームのチャンネルで同僚が事前に注意を促してくれました。

休暇前に大きなタスクをまとめて指示してはいけない理由:トークンバーニング

同僚は「それを今丸ごと頼んでしまうと、休暇中に(トークンの)制限をすべて使い切ってしまうかもしれないよ」と教えてくれました。
text
1이번 달 사용량: ▓▓▓▓▓▓▓░░░ 72%
会話が長くなり作業が複雑になるほど、それだけ処理すべき量も増え、設定された制限(トークン)をそれだけ早く消費することになります。同じ目的地を目指すにしても、運転の仕方によってガソリンが多く消費されるのと同じ理屈でした。大きなタスクは分割して依頼することにし、スケジュールを立て直しました。
タスクが大きくなるほど、設定された制限をそれだけ早く消費していく様子
タスクが大きくなるほど、設定された制限をそれだけ早く消費していく様子
スケジュールを立て直している最中、以前テスト用に作成しておいたブランチを開いたところ、見慣れない警告が表示されました。
text
1You are in 'detached HEAD' state at a1b2c3d
公式ドキュメントを調べてみると、ブランチ名ではなく、特定のコミットを直接チェックアウトしたときにこのような状態になると書かれていました。
どのブランチにも属さず、特定のコミット地点に直接留まっている状態のため、ここでさらにコミットを重ねても、後でブランチを作成しておかないとその記録が浮いた状態になり、見失われがちになります。名前の書かれた船ではなく、一時的にブイに繋がれたような状態だったため、急いで新しいブランチを作成して移動させました。
ブランチ名がなく、特定のコミット地点にのみ留まっている状態
ブランチ名がなく、特定のコミット地点にのみ留まっている状態
ターミナルの警告文を確認し、一瞬動きを止める手の動作をクローズアップした場面
このブランチを整理しながらリモートリポジトリの設定を再確認していたところ、以前の同僚が設定していたリモート名が一つ目に留まりました。

オリジナルのリポジトリを継続して参照する必要があるとき:アップストリーム

bash
1$ git remote -v
2origin (내 포크)
3upstream (원본 저장소)
同僚が以前このオープンソースライブラリをフォークして使用していた際に設定したリモートリポジトリの一覧を見て、気になって調べてみました。
自分が複製して使っているリポジトリではなく、その大元となるオリジナルのリポジトリを指す名前でした。原作者が新しいバージョンをリリースするたびに、このパスを通じて最新の内容を自分の環境に取り込むことができます。川の上流から流れてくる水流を意味する言葉(Upstream)が、そのままリポジトリ名に使われているのでした。
オリジナルのリポジトリから最新の内容を取り込む、川の流れのような経路
オリジナルのリポジトリから最新の内容を取り込む、川の流れのような経路
最後にコミット前のステータスを確認したところ、git statusに表示され続けていたログファイルが気になりました。

コミットしたくないファイルが追跡されてしまうとき:.gitignore

bash
1$ git status
2Untracked files:
3 debug.log
4 node_modules/
毎回これらのファイルを無視して進めていましたが、今回は完全に表示されないようにする方法を調べてみました。ツールが教えてくれた通りに一つのファイルにリストを記述しておくと、それ以降は二度と表示されなくなりました。
コミットの対象から完全に除外したいファイルやフォルダーのリストをあらかじめ記述しておくファイルです。家事代行サービスに「この部屋には手をつけないでください」と事前に張り紙をしておくようなものです。これで引き継ぎドキュメントの整理終わりました。
コミット対象から完全に除外するファイルやフォルダーをあらかじめ記述しておくリスト
コミット対象から完全に除外するファイルやフォルダーをあらかじめ記述しておくリスト
片付けられたデスクの上、キャリーバッグを引いてオフィスを後にする開発者の後ろ姿
退勤の直前になって、ようやく引き継ぎドキュメントを閉じました。3週間後にこのドキュメントを読むのがチームメンバーではなく自分自身かもしれないという気がして、最後の段落は他人に宛てたものではなく、戻ってくる自分自身に宛てたメッセージのように書き直しました。

よくある質問

ハンドオフ用のドキュメントはどの程度詳しく書くべきですか?

受け取る人が背景の補足説明なしで、すぐに作業を引き継げるレベルが基準となります。特に行き詰まっている箇所とその理由は、同じ試行錯誤を繰り返さないように詳しく記述する必要があります。

デタッチドHEAD(detached HEAD)状態で誤ってコミットした場合、すべて消えてしまいますか?

すぐに消えてしまうわけではなく、しばらくはシステム内に残っているため、復旧する方法がある場合がほとんどです。ただし、時間が経つと整理されて消えてしまう可能性があるため、気づいた時点で早急にブランチを作成して移動させるのが安全です。

すでにコミットされたファイルを後から.gitignoreに追加した場合、すぐに消えますか?

いいえ、すでに追跡対象となっているファイルは、別途追跡を解除するコマンドを実行する必要があります。.gitignoreは、今後新しく追加されるファイルに対して適用されます。

AIコーディングツール用語集シリーズの第11回です。次回予告 ・ 第12回:複数のリポジトリを行き来しながら統合リリースを準備した日(オーケストレーター vs ワーカー ・ デリゲート ・ MCP ・ フォーク ・ リリースタグ ・ サブモジュール)

参考・根拠

関連記事