ほとんどの企業には、APIがまったく存在しないアプリが少なくとも1つあります。これまでのレッスンで扱ったツールは、そうしたアプリには届きません。呼び出す対象が存在しないからです。
架空のエンジニアリングコンサルティング会社であるMeridianには、このようなアプリがあります。PlotDeskという、これも架空の古い図面管理ソフトです。毎週金曜日、担当者が1日を費やして同じ画面をクリックし続け、PDFのプロットセットをエクスポートしています。PlotDeskにはAPIもコマンドラインもありません。あるのはウィンドウとボタンだけです。
コンピューター操作(computer use)を使えば、Claudeはスクリーンショットを見て、何をクリックし、どのテキストを入力するかを判断することで、人間と同じようにウィンドウとボタンを通じてPlotDeskを操作できます。
Meridianは、Claudeにプロジェクト MEG-2026-0142 の本日分のPDFプロットセットをエクスポートさせたいと考えています。
各アクションを誰が実行するのかを確認する
API経由では、Claudeがデスクトップに直接接続することはありません。Claudeが生成するのは、ツール呼び出しを含む応答だけです。実際にMessages APIを呼び出すPythonプログラムは、あなたのプログラムです。そのプログラムがデスクトップ上で各アクションを実行し、結果を送り返します。
この一連の流れは次のとおりです。Claudeがスクリーンショットを要求します。あなたのプログラムがスクリーンショットを取得し、画像として送り返します。Claudeはそれを見て、指定した座標でのクリックや入力すべきテキストなど、次のアクションを送ります。あなたのプログラムがそのアクションを実行し、タスクが完了するまでこのループが繰り返されます。これは、すでにおなじみのツールループと同じものですが、結果の一部がスクリーンショットになっている点が異なります。
Meridianのエクスポート全体は、7つのアクションで完了しました。
| Claudeのアクション | 何が起きたか |
|---|---|
screenshot | ClaudeがPlotDeskのウィンドウを見つける |
left_click | Project numberフィールド上で |
type | MEG-2026-0142 |
left_click | Open上で |
screenshot | PlotDeskがプロジェクトを表示:Pump Station Replacement、22シート |
left_click | Export PDF上で |
screenshot | ステータスバーに「Exported MEG-2026-0142_plots.pdf」と表示される |
デスクトップを専用コンテナで実行する
Claudeは画面に表示されているものに基づいて行動します。ウェブページや画像内のテキストが、あなたの指示を上書きしたり、Claudeを誤った判断に導いたりする可能性があります。1つの誤ったアクションがもたらす被害を抑えるために、デスクトップには、そのタスクに必要なものだけを含む専用のコンテナまたは仮想マシンを用意してください。 次のように設定します。
- 各セッションに専用のコンテナを用意する。
- コンテナには認証情報を持たせず、ホストからマウントされたディレクトリも持たせない。
- コンテナは、タスクが使用するネットワークホストにしかアクセスできないようにする。
あなたのプログラムとあなたのAPIキーは、コンテナの外側に置いたままにします。
アクションを実装し、ループの実行はSDKに任せる
PythonおよびTypeScript SDKには、computer toolsetと呼ばれるクラスがあります。これをサブクラス化し、タスクに必要な各アクションについて1つずつメソッドを書きます。このクラスは、ツールセット用のtoolsエントリを自動的に構築してくれるもので、ベータ版です。Pythonの場合、SDKのバージョン1.12.0以降が必要です。
Meridianは、このツールセットのうち3つのアクション、screenshot、left_click、typeを実装しています。実装していないアクションは、無効として扱われた状態でAPIに送信されます。
各メソッドは1行で、処理をbackendに委ねます。backendは、VNCクライアントやxdotoolなど、デスクトップを制御する何らかの仕組みに対する、あなた自身のラッパーです。このPythonおよびTypeScriptによる最小限のVNCの例(新しいタブで開きます)は出発点として適していますが、本番環境向けではありません。
自分のクラスのインスタンスを、プロンプトとあわせてtoolsに渡します。SDKのヘルパーであるTool Runnerが、Claudeがツール呼び出しを伴わずに応答するまで、このループをあなたの代わりに実行してくれます。
2026年10月時点で、このツールセット(新しいタブで開きます)はClaude APIと、Google Cloud上のClaude Models(Google managed)で利用できます。Amazon Bedrock、Microsoft Foundry、およびClaude Platform on AWSには、これより前のベータ版のツールバージョンがあります。これらは異なるtoolsエントリと、ベータ機能を有効にするリクエストヘッダーであるベータヘッダーを必要とします。
クリックと入力を人間に承認させる
インスタンスを作成する際に、confirmという関数を渡します。SDKは各アクションの前にこの関数を呼び出します。Trueが返された場合、そのアクションは実行されます。それ以外が返された場合はアクションが拒否され、Claudeには人間がそれを却下したことが伝えられます。
confirmは、アクションとその入力は見えますが、画面は見えません。デスクトップを見ている人間であれば、Claudeがクリックしようとしている位置に何があるかを確認できます。そのためMeridianは、スクリーンショットは自動的に承認し、クリックとtypeアクションは、デスクトップを監視している担当者、すなわちオペレーターに毎回送って判断を仰ぐようにしています。
以下はMeridianのプログラムです。このうち3つの名前は、SDKのものではなくMeridian独自のコードに由来します。backend、ask_operator、TASKです。ask_operatorはオペレーターにアクションを提示し、その回答を返します。TASKにはプロンプトが格納されています。
コンピューター操作が適しているかどうかを判断する
スクリーンショットはすべて会話に残り続けるため、ステップを重ねるごとにコストが増えていきます。そのため、そのソフトウェアにMCPサーバー(自身の機能をツールとしてClaudeに提供するサービス)、API、またはコマンドラインがある場合は、そちらを使ってください。コンピューター操作は、PlotDeskのように、これらのいずれも持たないソフトウェア向けです。
タスクがウェブページの範囲内で完結する場合は、browser useツール(新しいタブで開きます)のほうが適しています。このツールはページ自体を読み取り、ページ上で操作を行うため、デスクトップ全体を必要としません。
重要なポイント
- Claudeはアクションを要求し、あなたのプログラムがそれを実行します。
- デスクトップは、セッションごとに専用のコンテナ内で実行されます。
- 実装するのは、タスクに必要なアクションだけです。
- Meridianの
confirm関数は、クリックとtypeアクションをすべて人間に送って承認を求めます。 - 直接的なインターフェースが存在する場合はそれを使い、存在しない場合にコンピューター操作を使ってください。