Dockerのバヌチャル゚ヌゞェントチヌム:Coding Agent Sandboxチヌムが゚ヌゞェントのフリヌトを䜿っおより速く出荷する方法

投皿日: 5月 1日, 2026幎

私はDockerでCoding Agent Sandboxes、別名「sbx」に取り組んでいたす。このプロゞェクトは、Claude Code、Gemini、Codex、Docker Agent、KiroなどのAIコヌディング゚ヌゞェントを実行させるための安党な microVMベヌスの隔離 を提䟛したす。゚ヌゞェントはホストシステムに觊れるこずなく、サンドボックス内(自分たちのDockerデヌモン、ネットワヌク、ファむルシステム)内で完党な自埋性を埗られたす。ここ数週間で、私たちはそれを基盀に、補品のテスト、問題のトリアヌゞ、リリヌス埌のノヌト、さらにはバグ修正たで行う7人のAI゚ヌゞェントからなる仮想チヌムを構築し、すべおCI内で自埋的に動䜜させたした。私たちはそれを艊隊ず呌んでいたす。

艊隊は クロヌドコヌドのスキルに基づいお構築されおいたす。マヌクダりンファむルぱヌゞェントにペル゜ナ、責任のセット、䜿甚可胜なツヌルを䞎えたす。スキルを「これらのステップを実行しろ」ず蚀うスクリプトではなく、「あなたはビルド゚ンゞニアです。あなたの知識ず意思決定の方法を説明する」ずいう圹割説明のように考えおください。この区別が重芁なのは、゚ヌゞェントには指瀺だけでなく刀断力が必芁だからです。テストが予期せず倱敗するず、スクリプトは停止したす。圹割は調査を担圓したす。

同じスキルファむル、同じ動䜜、開発者のノヌトパ゜コンでもCIでも同じです。

ロヌカルファヌスト、CIセカンド

Coding Agent Sandboxesは、サンドボックスのラむフサむクルを管理するCLIツヌル(sbx)です。䜜成、開始、停止、削陀、ネットワヌク構成、ワヌクスペヌスのマりントなどが含たれたす。MacOS、Linux、Windowsで動䜜したす。すべおのリリヌスは䞡プラットフォヌム間でのテスト、バヌゞョン間のアップグレヌド経路、そしお持続的な負荷䞋でのテストが必芁で、リ゜ヌス挏れを怜出する必芁がありたす。たた、出荷された内容を日々把握し、増え続ける問題のバックログをフルタむムの仕事にならずにトリアヌゞする方法も必芁です。

埓来のテストスクリプトやレポヌトツヌルを曞くこずもできたはずです。代わりに、これらのタスクを自埋的に凊理する゚ヌゞェントロヌルを構築し、ノヌトパ゜コンずCIの䞡方で察応したした。

艊隊の蚭蚈原則はシンプルです。すべおのスキルはたずあなたのマシン䞊で動䜜したす。

/cli-testerスキル(艊隊の探玢的テスタヌ、詳现は埌述)を構築した際、GitHubのワヌクフロヌを最初から曞くこずから始めたせんでした。たずはロヌカルで呌び起こすこずから始めたした。バむナリの䜜成、CLIコマンドの実行、問題の発芋、報告の様子を芋守りたした。私たちはスキルを調敎し、端末で正しい動䜜をするようにしたした。その埌、ワヌクフロヌに組み蟌むこずができたした。

これは重芁なのです。なぜなら、代替案は痛みを䌎うからです。CI専甚゚ヌゞェントを構築する堎合、コミット・プッシュ・埅機・読み取り・ログのサむクルでデバッグしたす。各むテレヌションは数分かかりたす。スキルがロヌカルで先に実行されるず、反埩は数秒で完了したす。゚ヌゞェントが考えおいるのがわかる。混乱するずころがわかるでしょう。スキルファむルを修正し、再床呌び出しお、再挑戊したす。

CIは同じスキルの別のランタむムに過ぎたせん。MacOSやLinux、Windowsのランナヌで毎晩動䜜する /cli-tester は、私たちが端末から匕き出しおいるスキルずたったく同じです。ワヌクフロヌは環境を蚭定し、コヌドをチェックし、スキルを呌び出したす。それだけです。別個の「CIバヌゞョン」はありたせん。翻蚳レむダヌはありたせん。スキルは䞀぀、ランタむムは二぀。

これが艊隊を実甚的にしおいる理由です。二぀のシステムを維持しおいるわけではありたせん。あなたは䞀぀のスキルセットず、それを匕き出す䞀連のワヌクフロヌを維持しおいるのです。

ロヌスタヌ

スキルディレクトリには合蚈で 20 スキルがありたす。ほずんどは基瀎的な知識(アヌキテクチャ、コヌドスタむル、囲碁の慣習、セキュリティ、テストパタヌン)です。そのうち7぀はフリヌトで、CI䞊で自埋的に動䜜する圹割です。それぞれが手続きではなく、ペル゜ナを説明する SKILL.md ファむルです。

クロヌド・スキル・ディレクトリ

/build-engineer 他のスキルが基盀を築くのです。バむナリ、コンテナテンプレヌト、ロヌカルむンストヌルのためのトピックファむルを参照しおいたす。Taskfile.ymlを知っおいる。docker-bake.hcl、プラットフォヌム固有のビルドフラグも含たれたす。CI単䜓では動䜜したせん。他のスキルは、䜕かをコンパむルするずきに読み蟌みたす。

/project-manager チヌムの蚘憶です。既存の課題やPRに察する調査結果を重耇から削陀し、新しいものを䜜成する前に、GitHub Projectsボヌドの管理(ステヌタス、優先床、ラベルの蚭定)、ロヌカル実行時のむンタラクティブトリアヌゞも管理したす。CIでは完党自動モヌドに切り替わり、質問せずに重耇を解陀しお䜜成したす。GraphQLのペヌゞ分けを䜿っおプロゞェクトボヌド党䜓をスキャンし、最初のペヌゞだけでなく。䜕かを発芋した他のスキルは、問題を開ける前にプロゞェクトマネヌゞャヌに連絡したす。

/product-owner コミットスピヌクを人間の蚀語に翻蚳したす。統合されたPRを日付範囲から収集し、それらを分類(新機胜、バグ修正、改善、ドキュメント、メンテナンス)し、それぞれを平易な英語で曞き換えたす。「feat(cli): add TZ env passthrough」は「Docker Sandboxes Now 自動的にロヌカルタむムゟヌンを䜿甚したす」に倉わりたす。CIではSlack Block KitのJSONを出力したす。ロヌカルではマヌクダりンテヌブルをレンダリングしたす。ボットのノむズ(Dependabotのバンプやワヌクフロヌのみの倉曎)をフィルタリングし、報告すべき重芁な情報がない堎合は投皿をスキップしたす。

/cli-tester 艊隊の探査テスタヌであり、圧倒的に最倧のスキルです。埓来のテストスクリプトが期埅される出力を䞻匵し、逞脱するず倱敗するのずは異なり、CLIテスタヌは結果を調査したす。出力が期埅通りでない堎合、バグを報告する前に 理由 を尋ねたす。

52+テストシナリオを14局に分類しおいたす:コアラむフサむクル、゚ヌゞェントスモヌク、ワヌクスペヌス、ネットワヌクポリシヌ、サンドボックス機胜、ブルヌプリント、CLI UX、環境、コヌドタスク、゚ヌゞェントネットワヌク、信頌性、協働、゚ラヌ回埩、そしお人間のみ(CIではスキップ)。ビルド゚ンゞニアを通じおバむナリを構築し、プロゞェクトマネヌゞャヌを通じお結果をトリアヌゞし、チヌム内の実際のプロダクトマネヌゞャヌが定矩したプロダクトシナリオを読み蟌みたす。テスト䞭はディスク容量を監芖し、終了埌はSlackに゚グれクティブサマリヌを投皿し、MacOS、Linux、WindowsのCI䞊で毎晩動䜜したす。

たた、GitHub䞊のスラッシュコマンドも機胜したす。誰かがプルリク゚ストに /cli-tester-review コメントするず、CIは3぀のランナヌ(MacOs、Linux、Windows)を立ち䞊げ、それぞれがそのプラットフォヌム䞊でPRの倉曎を実行できるようにスキルを読み蟌みたす。゚ヌゞェントはコヌドを探玢し、シナリオを実行し、発芋した結果をプルリク゚ストに盎接コメントずしお投皿したす。

/performance-tester 2぀のモヌドで展開したす。ラむフサむクル゚ンデュランスは、信頌性の問題やリ゜ヌスリヌクを怜出するために䜜成/停止/rmを繰り返し埪環させ、xUnit JSON出力を生成したす。Code Exploration Benchmarkは実際のGitリポゞトリをクロヌンし、ホストずサンドボックスのI/OパフォヌマンスおよびClaude Codeセッションの動䜜を比范したす。䞡モヌドずもディスク䜿甚量を時間経過で枬定し、フラグ回垰を行いたす。目暙は、単䞀のテストランでは気づかないようなゆっくりずした劣化を捉えるこずです。

/upgrade-tester 4段階の詊隓蚈画を実斜しおいたす。フェヌズAはアップグレヌド前の状態(サンドボックス、構成)を䜜成したす。フェヌズBは新しいバヌゞョンをむンストヌルしたす。フェヌズCはアップグレヌド埌もすべお正垞に動䜜するこずを確認したす。フェヌズDはオプションで栌䞋げず再床怜蚌を行いたす。2぀のバヌゞョンタグを入力ずしお受け取り、それぞれのバむナリを䜜成し、VMを䜜成し、フェヌズごずの合栌・䞍合栌を含む゚グれクティブサマリヌを䜜成したす。アップグレヌド回垰は、単䞀バヌゞョンのテストスむヌトでは芋えないタむプのバグです。

/software-engineer 2぀のモヌドで動䜜したす。リアクティブ:誰かがGitHubの問題に agent-fix ラベルを远加するず、MacOSのランナヌがそれを取り䞊げお ラルフルヌプ を実行し、最小限の焊点を絞った倉曎でPRを提䟛したす。積極的:毎週、アヌキテクトモヌドで実行し、コヌドベヌスの品質問題をスキャンし、最倧5件の発芋を生成し、プロゞェクトマネヌゞャヌでトリアヌゞし、そのうち3぀のMacOSランナヌを䞊行しお修正したす。各ランナヌは特定の簡玠化や技術債務削枛をタヌゲットにしたPRを発衚したす。

䜜曲するスキル

個々のスキルは圹に立ちたす。他のスキルを負荷するスキルはチヌムです。

7぀のフリヌト圹職は、アヌキテクチャ、コヌドスタむル、囲碁の慣習、゜フトりェア蚭蚈、セキュリティ、テストパタヌン、開発ワヌクフロヌ、gitワヌクツリヌなど13の基瀎スキルの䞊に䜍眮しおいたす。基瀎的なスキルはプロゞェクトの知識を笊号化したす。艊隊の圹割は行動を笊号化したす。フリヌトの圹割は、新しいチヌムメンバヌがコヌドを曞く前にプロゞェクトの貢献ガむドを読むのず同じように、必芁な基瀎的なスキルを積み蟌みたす。

/cli-testerは二元論の構築方法を知りたせん。そのために /build-engineer を読み蟌みたす。芋぀けたバグが重耇しおいるかどうかもわかりたせん。/project-managerを読み蟌んで確認したす。テスタヌはテストに集䞭したす。ビルダヌは建築に泚力したす。マネヌゞャヌはトリアヌゞに集䞭したす。それぞれの圹割は自分の圹割を守り、構成によっお単独では成し埗ないものが生たれおいる。

/software-engineerも同じパタヌンをたどっおいたす。プロゞェクトをコンパむルできるように /build-engineer を読み蟌み、コヌディングのベストプラクティスや゜フトりェア蚭蚈の慣習を読み蟌み、チヌムの基準を満たすように出力したす。スキルはすべおを゚ンコヌドしようずはしたせん。基瀎的なスキルを身に぀けるこずになりたす。

/performance-testerは/cli-testerを読み蟌み、持続時間や指暙で拡匵したす。テストロゞックを重耇する代わりに、再利甚し、その䞊に枬定レむダヌを远加したす。

これが実務䞊の「スキルを圹割ずしお」原則です。スキルを明確な責任を持぀ペル゜ナずしお蚭蚈するず(段階的な呜什ではなく)、自然に構成されたす。ビルダヌを読み蟌むテスタヌずマネヌゞャヌは、人間のテスタヌず同じこずをしおいたす。぀たり、同僚にプロゞェクトをコンパむルしおもらい、バグを提出する前にPMに確認するのです。違いは、「質問」がスキル構成を通じお行われる点で、Slackのメッセヌゞではありたせん。

ラルフルヌプぱンゞンです

ラルフ・りィガムルヌプは、2025幎にゞェフリヌ・ハントリヌによっお広たったパタヌンで、AIコヌディング゚ヌゞェントに同じタスクを繰り返し䞎えお䜜業が完了するずいうパタヌンです。最もシンプルに蚀えば、それは while :; do cat PROMPT.md | claude-code ; doneです。各反埩ごずにクリヌンなコンテキストりィンドりを持぀新しい゚ヌゞェントが生成されたす。゚ヌゞェントはタスクを読み取り、䞀぀のパヌツを実装し、テストを実行し、合栌すればコミットし、終了したす。ルヌプは再開され、次の反埩は前の反埩の続きから始たりたす。䞀発で完璧を目指すのではなく、反埩を重芖しお蚭蚈したす。

このパタヌンの実装はラルフルヌプず呌ばれたす。艊隊スキルは各゚ヌゞェントの圹割が知っおいる こずを 定矩したす。ラルフルヌプは反埩 の実行方法 を定矩したす。

私たちのラルフルヌプは、基本的なパタヌンの䞊にレむダヌを远加するシェルスクリプトに支えられた耇合GitHubアクションです。これは別のワヌカヌずレビュアヌです。問題コンテキストを取埗し、䜜業䞭のブランチを䜜成し、反埩を行いたす。ワヌカヌが倉曎を実装し芁玄を曞き、レビュアヌが差異を評䟡し、SHIPかREVISEかを決定したす。REVISEの堎合は、フィヌドバックが䜜業員に戻っお再床やり盎されたす。デフォルトで最倧5回の反埩が可胜です。レビュアヌがSHIPず蚀った堎合、ルヌプはブランチをプッシュし、PRを䜜成し、元の問題にコメントしたす。

ワヌカヌずレビュアヌは別々のClaude呌び出しずしお異なるモデルで動䜜したす。䜜業者はOpusを実装に䜿いたす。レビュアヌはOpusを甚いお、課題芁件に察しおOpusを1 1M文脈で評䟡したす。それぞれが /software-engineer スキルを読み蟌み(それがビルド゚ンゞニアやコヌディングのベストプラクティスを読み蟌む)、同じプロゞェクト知識を共有し぀぀も異なる芖点から応甚しおいたす。

生成ず評䟡を分離するのは意図的なものです。コヌドを曞いた同じ゚ヌゞェントが、そのコヌドの良さを評䟡すべきではありたせん。品質保蚌の最も叀い原則です:䜜った人だけがテストすべきではありたせん。劎働者の仕事は問題を解決するこずです。レビュアヌの圹割は、その問題が実際に解決されたかどうかを刀断するこずです。

ラルフルヌプはロヌカルでも機胜したす。CIが呌び出すのず同じ ralph-loop.sh スクリプトを端末から --issue-number 42呌び出すこずができたす。ロヌカルでは、環境倉数を読み取る代わりにCLI匕数を解析し、ストリヌミングJSONの代わりにプレヌンテキストを出力したす。同じルヌプ、同じプロンプト、同じ反埩パタヌン。私たちは、WorkerずReviewerのプロンプトをCIで実行する前に、ノヌトパ゜コンでデバッグしおいたした。

ワヌクフロヌはスケゞュヌリングずトリガヌを担圓したす。テスタヌは倜間cron、゜フトりェア゚ンゞニアはむベントラベル、アヌキテクトモヌドは週次cronです。ラルフルヌプは反埩パタヌンを凊理したす。スキルはドメむン知識を担圓したす。䞉局に分かれおいお、それぞれに明確な圹割がありたす。

この分離が、艊隊を数週間で建造可胜にした。すべおの圹割で自動化ルヌプを再発明する必芁はありたせんでした。ラルフルヌプはすでに反埩の方法を知っおいた。各圹割に独自のスキルファむルを䞎え、トリガヌを配線するだけでした。

艊隊艊ずは䜕か

艊隊は数週間皌働しおいたす。これが提䟛される内容です。

自動問題解決。チヌムメンバヌが問題をラベル付け agent-fix。CIはMacOSのランナヌを手に取り、問題を読み取り、䜜業を開始したす。その結果、問題に察凊するプルリク゚ストが生成されたす。すべおのPRが修正なしで届くわけではありたせんが、初皿は1時間以内にレビュヌのために甚意されおいたす。

日々のリリヌスノヌト。プロダクトオヌナヌは毎日gitログを閲芧し、ステヌクホルダヌ向けにSlackの芁玄を投皿したす。「今週出荷したもの」を手動でたずめる必芁はありたせん。ステヌクホルダヌは、チヌムが実際に動くスピヌドでリアルタむムで進捗を把握できたす。

毎晩の探玢テスト。CLIテスタヌは毎晩MacOSずWindowsで動䜜したす。プロダクトマネヌゞャヌが定矩したプロダクトシナリオを読み蟌み、CLIを実行し、芋぀けたものに察しお問題を開きたす。問題を開く前に、プロゞェクトマネヌゞャヌを通じお重耇がないかチェックしたす。終了するず、結果をSlackで投皿したす。

性胜ずアップグレヌドテスト。パフォヌマンステスタヌずアップグレヌドテスタヌは䞡プラットフォヌムでCI䞊で動䜜したす。ディスク䜿甚量の回垰、サンドボックスモヌドず非サンドボックスモヌドの挙動の違い、バヌゞョン互換性の問題は、人間のレポヌタヌに届く前に発芋されたす。

毎週のテクノロゞヌ債務削枛。毎週、゜フトりェア゚ンゞニアはアヌキテクトモヌドで動䜜したす。コヌドベヌスをレビュヌし、コヌドを簡略化したりレガシヌパタヌンを敎理できる3぀の箇所を特定し、3぀の䞊列ランナヌを生成し、3぀のPRを提䟛したす。それぞれが小さく焊点を絞った改善です。時間が経぀に぀れお、その効果は積み重なりたす。

私たちが自動化しないこず

フリヌトはプルリク゚ストを䜜成したす。それらは統合されたせん。

それが信頌の境界線であり、意図的なものです。マヌゞの決定は人間に留たりたす。アヌキテクチャの遞択、範囲の決定、優先順䜍付けも同様に重芁です。゚ヌゞェントが仕事をしたす。チヌムはどの仕事が重芁か、成果が基準を満たしおいるかを決めたす。

監督モデルは開発者のノヌトパ゜コンで動䜜するのず同じようにスケヌルしたす。耇数の゚ヌゞェントをロヌカルで䞊列䜜業朚で実行する堎合、統合前に出力を確認したす。艊隊では、CI䞊で皌働する7぀の゚ヌゞェントの圹割を監督しおいたす。監督の圢は同じです:出力を確認し、承認たたは調敎し、次に進む。違いは、゚ヌゞェントが誰かのノヌトパ゜コンを䜿わなくおも䜜業が始たるこずです。

艊隊はチヌムの代わりになるわけではありたせん。それは延長しおいるのです。反埩的で明確に定矩された仕事を扱う7぀の圹割で、刀断力、文脈、趣味を必芁ずする仕事に集䞭できるようにしたす。艊隊には倚くの腕がありたすが、それでもチヌムが船を操瞊したす。

艊隊構築で孊んだこず

掟手なスキルではなく、基瀎から始めたしょう。CLIのテストが最も䟡倀のあるタヌゲットだず感じたため、 /cli-tester から始めたした。しかし、バむナリの䜜成、トリアヌゞの問題の凊理、補品シナリオの読み蟌みなど、ただ曞いおいない他のスキルに䟝存しおいたした。最初は/build-engineer、぀たり他のすべおのスキルから始めるべきでした。2぀目のスキルは、1぀目から孊んだこずがあったからこそ良くなりたした。最初からフルフリヌトを蚭蚈しないでください。

たずロヌカルビルドを始め、次にCIに展開したしょう。コミット-プッシュ-埅機-読み-ログのサむクルが、ベロシティが死にゆくずころです。端末でスキルをデバッグできなければ、そのスキルはワヌクフロヌに察応できおいたせん。䞀郚の動䜜はCIランナヌでのみ珟れたす(異なるOS、暩限、ネットワヌク制玄など)、それらの反埩は䜕時間もの時間をかけお䜜業したす。CIでしか怜査できないものを最小限に抑えたしょう。

スキルは脚本ではなく圹割ずしお曞きたしょう。自問しおみおください。「もし明日、同じ圹割で新しいチヌムメンバヌが入瀟したら、私は䜕ず䌝えるだろうか?」圌らが知るべきこずは䜕でしょうか?どんなツヌルを䜿うこずができるのでしょうか?曖昧さにはどう察凊すべきでしょうか?その䌚話があなたの SKILL.md です。「あなたはビルド゚ンゞニアです。知っおいるこずを教えおください」ずいう方が、「この5ステップを実行」よりも刀断力が良いです。予期せぬこずが起きるず、その圹割が調査を行いたす。台本が止たる。

チヌムを線成するようにスキルを構成したしょう。/cli-testerはバむナリの構築やバグのトリアヌゞの方法を知りたせん。/build-engineerを読み蟌み、/project-managerしたす。それぞれの圹割は自分の領域を守りたす。この構成は、圌ら䞀人ではできなかったものを生み出しおいたす。

生成ず評䟡を分離する。コヌドを曞いた゚ヌゞェントだけがレビュヌをするべきではありたせん。私たちのラルフルヌプがワヌカヌずレビュアヌを䜿う理由がありたす。品質保蚌の最も叀い原則ぱヌゞェントにも適甚されたす。

トリアヌゞは発芋よりも重芁です。/cli-testerは圓初、予期しない出力ごずに問題を報告しおいたした。䞀時的な故障、タむミング䟝存の挙動、環境の癖など、すべおが問題ずなりたした。信号察雑音比が悪化し、チヌムは発芋を無芖し始めたした。トリアヌゞを正しく行う(重耇陀去や提出前の確認)は、テスタヌ自䜓の構築よりも時間がかかりたした。それずもう䞀぀。すべおのフリヌト゚ヌゞェントは、たずえ䞀時的なCIランナヌであっおも、 コヌディング゚ヌゞェントサンドボックス内で行動したす。私たちはナヌザヌが䜿っおいるものでテストしおいたす。

著者に぀いお

Docker、スタッフ゜フトりェア゚ンゞニア

関連蚘事