CLAUDE LABEN
WWDC — WWDC 2026でSiriはGoogle Geminiベースと確定。ChatGPT等への外部ハンドオフは廃止され、サードパーティAI選択はEU(DMA)で当面非対応にBILLING — 6/15の課金変更まで残り6日。Agent SDK・headless Claude Code・GitHub Actions・他社エージェントがAPIレート準拠の月次クレジットへ移行OUTAGE — claude.ai・Claude Code・Coworkで障害が報告(6月)。スケジュール実行はfallbackModelとリトライ前提の設計が安全ですDYNAMIC-WORKFLOWS — Max・TeamプランとAPIでdynamic workflowsがデフォルトON。コードベース横断のバグ探索や独立検証に活用ULTRACODE — Claude Codeの新設定ultracodeがeffortメニューに追加。xhigh固定でワークフロー判断はClaudeに委ねますOPUS4.8 — Claude Opus 4.8が主要プランのデフォルトとして定着。コーディング・エージェント・推論を強化WWDC — WWDC 2026でSiriはGoogle Geminiベースと確定。ChatGPT等への外部ハンドオフは廃止され、サードパーティAI選択はEU(DMA)で当面非対応にBILLING — 6/15の課金変更まで残り6日。Agent SDK・headless Claude Code・GitHub Actions・他社エージェントがAPIレート準拠の月次クレジットへ移行OUTAGE — claude.ai・Claude Code・Coworkで障害が報告(6月)。スケジュール実行はfallbackModelとリトライ前提の設計が安全ですDYNAMIC-WORKFLOWS — Max・TeamプランとAPIでdynamic workflowsがデフォルトON。コードベース横断のバグ探索や独立検証に活用ULTRACODE — Claude Codeの新設定ultracodeがeffortメニューに追加。xhigh固定でワークフロー判断はClaudeに委ねますOPUS4.8 — Claude Opus 4.8が主要プランのデフォルトとして定着。コーディング・エージェント・推論を強化
記事一覧/Claude.ai
Claude.ai/2026-04-20上級

Claude Computer Use2026 — ブラウザ・デスクトップ・CLIを横断した自動化の全技術

Claude Computer Useの完全ガイド。macOS一般提供を受け、ブラウザ操作・デスクトップ自動化・CLI連携の実践手順から本番環境への組み込みパターンまで徹底解説します。

Claude Computer Use2デスクトップ自動化ブラウザ自動化6Claude API99RPA

プレミアム記事

Claude Computer Use を本番環境で使い始めて半年ほど経ちますが、最初に感じた「これは本当に動くのか?」という半信半疑は、今では「どこまで任せられるか」という問いに変わっています。macOS での一般提供が始まり、実務での採用事例も増えてきた今、改めてこの機能の全体像と実践的な使い方を整理したいと思います。

Computer Use の本質 — スクリーンショットと操作の繰り返し

Computer Use が他のAI機能と根本的に異なる点は、Claudeが「見る→判断する→操作する」というループを自律的に回す点にあります。内部的には次の流れで動いています。

スクリーンショットを取得 → Claudeがその画像を見てどこをクリックすべきか判断 → 座標を指定してクリック・入力・スクロールを実行 → 再度スクリーンショットを取得して結果を確認 → 次の操作へ

この設計の妙は、GUI を解析する専用のビジョンモデルを使っていないことです。Claude の汎用的なマルチモーダル理解力を使っているため、見たことのないUIにも柔軟に対応できます。その代わり、ピクセル座標の精度に限界があり、密集したUIや動的コンテンツでは誤操作が発生しやすいという特性もあります。

使う前にこの特性を理解しておくことが、実務での成功率を大きく左右します。

セットアップ — APIキーから動作確認まで

1. 必要なもの

pip install anthropic pillow

モデルは claude-opus-4-6 または claude-sonnet-4-6 を使います。Computer Use は現時点で Bedrock や Vertex AI でも利用できますが、最新機能は Anthropic API 直接接続で最も早く使えます。

2. 最小構成のコード

import anthropic
import base64
from PIL import ImageGrab
 
client = anthropic.Anthropic()
 
def take_screenshot():
    """スクリーンショットを取得してbase64エンコードする"""
    screenshot = ImageGrab.grab()
    screenshot = screenshot.resize(
        (screenshot.width // 2, screenshot.height // 2)
    )  # コスト削減のためリサイズ
    screenshot.save("/tmp/screen.png")
    with open("/tmp/screen.png", "rb") as f:
        return base64.standard_b64encode(f.read()).decode("utf-8")
 
def run_computer_use_task(task: str):
    screenshot_b64 = take_screenshot()
    
    response = client.messages.create(
        model="claude-sonnet-4-6",
        max_tokens=4096,
        tools=[
            {
                "type": "computer_20241022",
                "name": "computer",
                "display_width_px": 1280,
                "display_height_px": 800,
            }
        ],
        messages=[
            {
                "role": "user",
                "content": [
                    {
                        "type": "image",
                        "source": {
                            "type": "base64",
                            "media_type": "image/png",
                            "data": screenshot_b64,
                        },
                    },
                    {"type": "text", "text": task}
                ],
            }
        ],
    )
    return response

このコードはClaudeに「現在のスクリーンショットを見て、タスクを実行してください」と指示するものです。実際にはここから操作ループを実装する必要があります。

3. 操作ループの実装

Computer Use の核心は、Claudeが tool_use ブロックで操作を返してきたとき、実際にその操作を実行してから、結果のスクリーンショットをClaudeに返すループです。

import subprocess
import time
 
def execute_action(action: dict) -> str:
    """Claudeが指示したアクションを実行する"""
    action_type = action.get("action")
    
    if action_type == "screenshot":
        return take_screenshot()
    
    elif action_type == "left_click":
        x, y = action["coordinate"]
        subprocess.run(["cliclick", f"c:{x},{y}"])  # macOS
        # Linux の場合: subprocess.run(["xdotool", "click", "--clearmodifiers", "1"])
        time.sleep(0.5)
        return take_screenshot()
    
    elif action_type == "type":
        text = action["text"]
        subprocess.run(["cliclick", f"t:{text}"])
        time.sleep(0.3)
        return take_screenshot()
    
    elif action_type == "key":
        key = action["key"]
        subprocess.run(["cliclick", f"kp:{key}"])
        time.sleep(0.3)
        return take_screenshot()
    
    elif action_type == "scroll":
        x, y = action["coordinate"]
        direction = action.get("direction", "down")
        amount = action.get("amount", 3)
        if direction == "down":
            subprocess.run(["cliclick", f"dd:{x},{y}"])
        return take_screenshot()
    
    return take_screenshot()
 
def run_task_with_loop(task: str, max_iterations: int = 20):
    """操作ループを伴う完全なタスク実行"""
    messages = [
        {
            "role": "user",
            "content": [
                {
                    "type": "image",
                    "source": {
                        "type": "base64",
                        "media_type": "image/png",
                        "data": take_screenshot(),
                    },
                },
                {"type": "text", "text": task}
            ],
        }
    ]
    
    for i in range(max_iterations):
        response = client.messages.create(
            model="claude-sonnet-4-6",
            max_tokens=4096,
            tools=[{
                "type": "computer_20241022",
                "name": "computer",
                "display_width_px": 1280,
                "display_height_px": 800,
            }],
            messages=messages,
        )
        
        # stop_reason が "end_turn" なら完了
        if response.stop_reason == "end_turn":
            print("タスク完了")
            break
        
        # tool_use ブロックを処理
        tool_results = []
        for block in response.content:
            if block.type == "tool_use" and block.name == "computer":
                new_screenshot = execute_action(block.input)
                tool_results.append({
                    "type": "tool_result",
                    "tool_use_id": block.id,
                    "content": [
                        {
                            "type": "image",
                            "source": {
                                "type": "base64",
                                "media_type": "image/png",
                                "data": new_screenshot,
                            },
                        }
                    ],
                })
        
        # メッセージ履歴を更新
        messages.append({"role": "assistant", "content": response.content})
        messages.append({"role": "user", "content": tool_results})
    
    return response

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
macOS一般提供後の最新セットアップから本番環境導入まで、手を動かしながら理解できる
ブラウザ・デスクトップ・CLIの3ルートを使い分けるアーキテクチャ設計の考え方
スクリーンショットの最適化・エラーリカバリ・コスト管理の実践ノウハウ
Stripe による安全な決済 · いつでもキャンセル可能
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

Claude.ai2026-05-22
Claude の output_format タグで仕様逸脱を抑える運用 — 個人開発アプリのコピーライティング自動化で固まった設計
Claude の output_format タグを軸に、ストア説明文や ASO コピーを多言語で量産しても仕様が崩れない設計を、個人開発アプリの実運用から書き起こしました。
Claude.ai2026-04-25
Extended Thinking が「動いていない」時に疑うべき7つの原因 — 表示と実体の食い違いを見抜く
「思考プロセスが表示されない」「Extended Thinking をONにしているのに普段と変わらない」と感じた時の原因切り分けを、API・チャット・SDK・モデルの4方向から体系的に解説します。実装バグの見抜き方まで踏み込んでいます。
Claude.ai2026-04-19
拡張思考(Extended Thinking)が本当に力を発揮する場面と、その引き出し方
Claude の拡張思考機能(Extended Thinking)が有効な場面と無効な場面を実例で解説。トークンバジェットの最適設定から、思考プロセスを設計に活かす実践的ノウハウまで。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →