OpenHands、GitHub Actions、Playwright-MCPを活用したブラウザ操作自動化ワークフローの実現可能性調査と実践ガイド

タグ: OpenHands GitHub GitHub Actions MCP Playwright-MCP

作成日: 2025年05月27日

音声概要

閲覧データ(過去90日間)

ページビュー数: 14回
ユニークユーザー数: 9人
平均セッション時間: 196.26秒

プロンプト

OpenHandsとGitHub ActionsとPlaywright-MCPを使って、ワークフローの中でブラウザ操作の自動化を行いたい。実現可能か調査し、可能であれば具体的な使用例をまとめて欲しい。

OpenHands、GitHub Actions、Playwright-MCPを活用したブラウザ操作自動化ワークフローの実現可能性調査と実践ガイド

1. はじめに

本レポートは、OpenHands、GitHub Actions、およびPlaywright-MCP(Model Context Protocol)を組み合わせ、ワークフロー内でのブラウザ操作の自動化を実現する可能性について調査し、具体的な使用例を提示することを目的としています。現代のソフトウェア開発において、反復的なブラウザ操作タスクの自動化は、テストの効率化、デプロイメントプロセスの迅速化、そして開発者の生産性向上に不可欠です。OpenHandsのようなAIエージェントプラットフォーム、GitHub ActionsのようなCI/CDツール、そしてPlaywright-MCPのような高度なブラウザ制御プロトコルを連携させることで、これまで手動で行っていた、あるいは限定的なスクリプトで対応していたブラウザ操作を、よりインテリジェントかつ柔軟に自動化できる可能性があります。

本調査では、これらの技術要素の概要、連携アプローチ、具体的な設定方法、そして実際のユースケースを詳細に解説します。これにより、開発者は本技術の導入検討に必要な知見を得るとともに、実践的な導入ステップを理解することができます。

2. OpenHandsとPlaywright-MCPの概要

2.1. OpenHands

OpenHands(旧OpenDevin)は、AIエージェントが人間開発者と同様の方法でタスクを実行できるオープンソースプラットフォームです 1。エージェントは、コードの読み取り、理解、変更、シェルコマンドの実行、Webブラウジング、API操作、ファイルシステム管理といった包括的な能力を備えています 1。これらの操作は、通常Dockerコンテナとして実装される保護されたサンドボックス環境内で安全に実行されます 1。

OpenHandsのアーキテクチャは主に、エージェントの抽象化、アクションと観察の履歴を追跡するイベントストリーム、そしてアクションを実行して観察結果に変換するランタイムの3つのコンポーネントで構成されています 2。特にブラウザ操作に関しては、OpenHandsはBrowserGym(ServiceNowによって開発されたPlaywrightベースのChromiumブラウザ環境)を利用して、ナビゲーション、クリック、タイピング、スクロールなどのアクションプリミティブを提供します 2。エージェントはこれらのプリミティブを通じてウェブサイトと対話し、情報を収集したりタスクを実行したりします 2。OpenHandsは、WebArenaのようなベンチマークでの評価も行われており、そのWebブラウジング能力が検証されています 2。

OpenHandsエージェントは、自然言語による指示に基づいてタスクを計画し実行します。例えば、「特定のウェブサイトから情報を抽出する」「フォームにデータを入力して送信する」といった指示を解釈し、必要なブラウザ操作を自律的に行います 1。

2.2. Playwright-MCP

Playwright-MCP (Model Context Protocol) は、Playwrightのブラウザ自動化能力を大規模言語モデル(LLM)やその他のAIエージェントが利用できるように設計されたサーバーです 6。従来のスクリーンショットや視覚ベースのモデルに依存するのではなく、主にブラウザのアクセシビリティツリーを通じて構造化されたデータに基づいてウェブページと対話します 6。これにより、高速かつ軽量で、LLMにとって親和性の高い、決定論的なツール適用が可能になります 6。

Playwright-MCPはクライアントサーバーアーキテクチャを採用しており、Playwright MCPサーバーがPlaywrightが管理するブラウザインスタンスへのアクセスを提供し、クライアント(AIエージェントなど)がMCPサーバーに接続してブラウザ操作を指示します 8。主な操作モードとして、アクセシビリティツリーを利用する「スナップショットモード」(デフォルト)と、スクリーンショットを利用する「ビジョンモード」があります 6。スナップショットモードは、構造化されたテキストデータに基づいて動作するため高速かつ信頼性が高い一方、ビジョンモードはアクセシビリティ情報が不十分なカスタムUI要素などに対応できる可能性があります 7。

Playwright-MCPは、ナビゲーション、クリック、入力、スクリーンショット取得、要素の待機など、多岐にわたるブラウザ操作ツールを提供します 6。これらのツールは、AIエージェントがより複雑なテストフローや自動化ワークフローを編成するのに役立ちます 8。特に、VS CodeのGitHub CopilotエージェントやCursor、Claude DesktopといったAI支援開発ツールとの連携が考慮されています 6。

3. 連携アプローチの比較

OpenHands、GitHub Actions、Playwright-MCPを連携させてブラウザ操作を自動化するアプローチは、主に2つのシナリオが考えられます。1つはOpenHandsの標準的なブラウザ操作機能(BrowserGymベース)をGitHub Actions内で利用するアプローチ、もう1つはOpenHandsのカスタムサンドボックス内にPlaywright-MCPサーバーを導入し、OpenHandsエージェントがMCPクライアントとして動作するより高度なアプローチです。

これらのアプローチは、セットアップの複雑さ、制御の粒度、そして対応可能なユースケースにおいてそれぞれ特徴があります。以下の表に、各アプローチの比較を示します。

Table 1: 連携アプローチの比較

特徴項目 (Feature) OpenHands標準機能 (BrowserGym) OpenHands + Playwright-MCP連携
主要なブラウザ制御方法 OpenHandsエージェントがLLMを通じてBrowserGymのアクションプリミティブを解釈・実行 2。 OpenHandsエージェントがLLMを通じてPlaywright-MCPサーバーの提供するツール(コマンド)を解釈・実行 6。エージェントはMCPクライアントとして振る舞う必要がある。
制御の粒度 BrowserGymが提供するアクションセットに依存。比較的抽象度が高い場合がある 13。 Playwright-MCPが提供する詳細なツールセットにより、より細かいブラウザ操作が可能 6。アクセシビリティツリーのrefを利用した精密な要素指定など。
セットアップの複雑性 比較的容易。OpenHandsの標準インストールとGitHub Actionsの設定で実現可能 1。 高い。OpenHandsカスタムサンドボックスの構築、Playwright-MCPサーバーの導入と設定、エージェントのMCPクライアント機能の実装(またはそのための指示)が必要 6。
利点 (Pros) 導入が容易。OpenHandsエージェントの汎用的なタスク解決能力を活用しやすい。 高度なブラウザ制御、アクセシビリティ情報に基づく堅牢な要素特定、Playwrightの豊富な機能を間接的に利用可能 6。
欠点 (Cons) 複雑な動的コンテンツや特殊なUI要素への対応が限定的である可能性。BrowserGymのアクションスペースに制約される。 セットアップと設定が複雑。OpenHandsエージェントがPlaywright-MCPツールを適切に利用するためのプロンプト設計がより重要になる。
推奨ユースケース 簡単なWebスクレイピング、基本的なフォーム入力、E2Eテストの補助、OpenHandsエージェントによる一般的なWebタスクの自動化。 複雑なWebアプリケーションの精密なテスト、動的コンテンツへの高度な対応、アクセシビリティを重視したテスト、Playwrightの知見を活かした自動化。
データソース 1 6

この比較から、プロジェクトの要件や開発チームのスキルセットに応じて適切なアプローチを選択することが重要であると理解できます。単純なタスクであればOpenHandsの標準機能で十分対応可能ですが、より高度で精密なブラウザ制御が求められる場合は、Playwright-MCPとの連携が有力な選択肢となります。ただし、後者はその分、導入と運用のコストが高くなることを考慮に入れる必要があります。

4. 具体的な使用例

ここでは、前述の2つの連携アプローチに基づいた具体的な使用例を、GitHub Actionsワークフローの設定、OpenHandsへのタスク定義(プロンプト)、期待される出力と成果物の観点から解説します。

4.1. シナリオ1:OpenHands標準機能とGitHub Actionsの連携

このシナリオでは、OpenHandsが標準で備えるBrowserGymベースのブラウザ操作機能をGitHub Actionsワークフロー内で活用します。

4.1.1. GitHub Actionsワークフローの設定

OpenHands Resolver(openhands-resolver.yml)を利用して、GitHubのIssueやPull RequestのイベントをトリガーにOpenHandsエージェントを起動します 14。ワークフローファイルはリポジトリの .github/workflows/ ディレクトリに配置します。

YAML記述例 (.github/workflows/openhands-browser-task.yml):

name: OpenHands Browser Automation Task

on:  
  issue_comment:  
    types: [created]

jobs:  
  run_openhands_browser_task:  
    # コメントが特定のキーワード(例: @openhands-agent fix-me)で始まる場合にのみ実行  
    if: github.event.issue.pull_request && startsWith(github.event.comment.body, '@openhands-agent fix-me')  
    runs-on: ubuntu-latest  
    steps:  
      - name: Checkout Repository  
        uses: actions/checkout@v4

      - name: Run OpenHands Resolver  
        # 公式のOpenHands Resolver Actionまたは互換性のあるActionを指定  
        # 例: All-Hands-AI/OpenHands/.github/actions/openhands-resolver@main  
        # または xinbenlv/openhands-ai-action@v1.0.1-rc3 (プロンプトを直接渡す場合)  
        uses: All-Hands-AI/OpenHands/.github/actions/openhands-resolver@main # または適切な参照  
        with:  
          issue-number: $  
          # LLM_API_KEY, PAT_TOKENなどはsecrets経由で渡される想定 [14]

このワークフローは、Issueへのコメントが @openhands-agent fix-me で始まる場合にトリガーされます。All-Hands-AI/OpenHands/.github/actions/openhands-resolver@main の部分は、公式の openhands-resolver.yml 14 を参照して適切に設定するか、xinbenlv/openhands-ai-action 18 を使用します。後者の場合、prompt 入力で直接タスクを渡すことが可能です。

4.1.2. OpenHandsへのタスク定義 (プロンプト)

タスクは、GitHubのIssueコメントやPull Requestコメント内で、自然言語プロンプトとしてOpenHandsエージェントに与えられます 16。

プロンプト例1 (情報収集):
@openhands-agent fix-me 「https://www.example.com」にアクセスし、ページタイトルと主要な見出し(H1タグの内容)を抽出して、結果をこのIssueにコメントしてください。
OpenHandsエージェントは、この指示に基づき、指定されたURLにアクセスし、要求された情報を取得するためのブラウザ操作(ナビゲーション、DOM解析など)を計画・実行します 1。
プロンプト例2 (フォーム入力と送信):
@openhands-agent fix-me 「https://example.com/login」にアクセスし、ユーザー名入力フィールド(name=”username”)に「testuser」、パスワード入力フィールド(name=”password”)に「testpass」と入力し、ログインボタン(type=”submit”)をクリックしてください。ログイン後のページのURLを報告してください。
このプロンプトでは、フォーム要素の特定(例: name属性)、テキスト入力、ボタンクリックといった一連の操作が指示されています。OpenHandsはBrowserGymの機能を利用してこれらの操作を試みます 1。
プロンプト例3 (特定要素のテキスト抽出):
@openhands-agent fix-me 「https://example.com/products/123」にアクセスし、価格情報が表示されている要素(例:id=”product-price”)のテキストを抽出してください。
特定の要素をターゲットとした情報抽出も可能です。プロンプトで要素の特定方法に関するヒント(例: id属性)を与えることで、エージェントの精度向上が期待できます。

4.1.3. 期待される出力と成果物

OpenHandsエージェントは、実行計画、実際に行ったアクション、そして観測結果(ブラウザの表示内容やエラーメッセージなど)を、トリガーとなったGitHub IssueやPull Requestにコメントとして投稿します 14。抽出されたデータや操作結果も同様にコメントで報告されます。

スクリーンショットのようなバイナリファイルや、抽出されたデータをまとめたテキストファイルなどは、GitHub Actionsの成果物(artifacts)としてアップロード・保存することが可能です 20。これには、OpenHandsエージェントに特定のパス(例: $/openhands_output/screenshots/)にファイルを保存するよう指示し、ワークフローの後続ステップで actions/upload-artifact アクションを使用してそのパスを指定します。OpenHandsのGitHub Issue #8372 21 では、エージェントがスクリーンショットをワークスペースに保存する機能に関する議論と実装が進められており、将来的にはよりスムーズな成果物連携が期待されます。

YAML例 (成果物アップロードステップ):

      # (OpenHands実行ステップの後に追加)  
      - name: Upload Browser Automation Artifacts  
        uses: actions/upload-artifact@v4  
        with:  
          name: browser-output  
          path: |  
            $/openhands_output/screenshots/ # OpenHandsがスクリーンショットを保存する想定パス  
            $/openhands_output/extracted_data.txt # OpenHandsが抽出データを保存する想定パス

4.2. シナリオ2:Playwright-MCPとの連携

このシナリオでは、OpenHandsのカスタムサンドボックス内にPlaywright-MCPサーバーをセットアップし、OpenHandsエージェントがPlaywright-MCPの提供するツールを利用してブラウザ操作を行います。

4.2.1. Playwright-MCPサーバーのセットアップ

Playwright-MCPサーバーをOpenHandsのカスタムDockerイメージ内にインストールし、コンテナ起動時に実行されるように設定します。サーバーは npx @playwright/mcp@latest コマンドで起動できます 6。ポート番号や許可するオリジンなどの設定は、コマンドライン引数または config.json 設定ファイルで行います 6。

Dockerfile内での起動例 (概念):

# ベースイメージの指定 (例: Node.jsとPythonが利用可能なイメージ)  
FROM nikolaik/python-nodejs:python3.12-nodejs22

# Playwrightとその依存関係のインストール  
RUN npx playwright install --with-deps

# Playwright-MCPのインストール  
RUN npm install -g @playwright/mcp@latest

# OpenHandsのアプリケーションコードや依存関係のコピーとセットアップ  
# (省略)

# コンテナ起動時にMCPサーバーとOpenHandsアプリケーションを起動するスクリプト  
COPY start-services.sh /app/start-services.sh  
RUN chmod +x /app/start-services.sh

CMD ["/app/start-services.sh"]

start-services.sh の内容例:

\#\!/bin/sh  
\# Playwright-MCPサーバーをバックグラウンドで起動  
npx @playwright/mcp@latest \--port 8931 \--host 0.0.0.0 &  
\# OpenHandsアプリケーションをフォアグラウンドで起動 (実際の起動コマンドに置き換えてください)  
exec python \-m openhands.app.main

実際の起動方法は、OpenHandsのカスタムサンドボックスのアーキテクチャやエントリーポイントの設計に依存します。OpenHandsの runtime_extra_deps 15 やカスタム setup.sh 22 を利用して、サンドボックス初期化時にPlaywright-MCPサーバーをセットアップ・起動することも考えられます。

4.2.2. OpenHandsカスタムサンドボックスの設定

GitHub Actionsワークフローにおいて、OpenHands Resolverまたは関連アクションの OPENHANDS_BASE_CONTAINER_IMAGE 環境変数(または相当する入力)に、上記で作成したPlaywright-MCPを含むカスタムDockerイメージ名を指定します 15。

4.2.3. OpenHandsへのタスク定義 (Playwright-MCPツール利用の指示)

OpenHandsエージェントに対し、ローカル(サンドボックス内)で実行されているPlaywright-MCPサーバーのツールを使用するよう自然言語で指示します。これには、エージェントがMCPクライアントとして動作し、適切なHTTPリクエスト(JSON-RPC形式など)を localhost:PORT(MCPサーバーがリッスンしているポート)に送信するコードを生成・実行することが含まれます。

プロンプトは、達成したい高レベルのブラウザ操作目標(例: 「ウェブサイトにログインする」)を記述するとともに、その達成のためにPlaywright-MCPの特定のツール(例: browser_type でユーザー名を入力)を利用するようエージェントを誘導する必要があります。これは、OpenHandsを支えるLLMが、ウェブ操作を理解するだけでなく、特定のツールセット(この場合はMCPツール)の存在とそれらの適切な順序付けを理解する必要があることを意味します。このアプローチは、エージェントがツールの説明に基づいて任意のAPIやツールキットを活用できるようになるための一歩と言えます。

プロンプト例1 (MCPツールでのナビゲーションとスナップショット):
@openhands-agent fix-me Playwright-MCPサーバーの browser_navigate ツールを使い「https://www.example.com」にアクセスし、その後 browser_snapshot ツールでアクセシビリティスナップショットを取得してください。取得したスナップショットの内容を要約して報告してください。MCPサーバーはlocalhost:8931で動作しています。
このプロンプトでは、エージェントにPlaywright-MCPの具体的なツール名 (browser_navigate, browser_snapshot) と、それらが動作するエンドポイント (localhost:8931) を指示しています 6。
プロンプト例2 (MCPツールでの要素クリックと入力):
@openhands-agent fix-me Playwright-MCPサーバー(localhost:8931)を使い、「https://example.com/login」に移動してください。次に、要素「username-input」のrefを持つ要素に browser_type ツールで「mcp_user」と入力し、要素「password-input」のrefを持つ要素に「mcp_pass」と入力してください。最後に要素「login-button」のrefを持つ要素を browser_click ツールでクリックし、結果を報告してください。
ここでは、要素の ref (アクセシビリティスナップショットから得られる一意な参照ID) を利用した精密な要素操作を指示しています。これにより、視覚的な曖昧さを排除した確実なインタラクションが期待できます 6。

4.2.4. ワークフロー例

基本的なワークフロー構造はシナリオ1と類似しますが、OPENHANDS_BASE_CONTAINER_IMAGE でPlaywright-MCPを含むカスタムイメージを指定する点が主な違いとなります。

YAML例 (一部抜粋):

jobs:  
  run_openhands_mcp_task:  
    #... (if, runs-on, checkout steps はシナリオ1と同様)...  
    env:  
      OPENHANDS_BASE_CONTAINER_IMAGE: "my-registry/my-openhands-with-mcp:latest" # カスタムイメージ  
      LLM_API_KEY: $  
      #... (その他のOpenHands Resolverに必要な環境変数)  
    steps:  
      #... (Checkout step)...  
      - name: Run OpenHands Resolver with Custom Sandbox  
        uses: All-Hands-AI/OpenHands/.github/actions/openhands-resolver@main # または適切な参照  
        with:  
          issue-number: $  
      #... (成果物アップロードステップはシナリオ1と同様)...

4.3. Playwright-MCPブラウザ操作ツール一覧

Playwright-MCPは、ブラウザ操作のための多様なツールを提供します。これらのツールを理解することは、OpenHandsエージェントに適切な指示を与える上で非常に重要です。以下に主要なツールを示します。

Table 2: Playwright-MCPブラウザ操作ツール例

ツール名 (Tool Name) 説明 (Description) 主要パラメータ (Key Parameters) 利用モード (Mode) 読取専用 (Read-only)
browser_navigate 指定されたURLにナビゲートします。 url (string): ナビゲート先のURL。 Snapshot/Vision False
browser_click ウェブページ上の要素をクリックします。 element (string): 要素の人間可読な説明。<br>ref (string): ページスナップショットからの正確なターゲット要素参照。 Snapshot False
browser_type 編集可能な要素にテキストを入力します。 element (string): 要素の説明。<br>ref (string): 要素参照。<br>text (string): 入力するテキスト。<br>submit (boolean, optional): 入力後にEnterキーを押すか。<br>slowly (boolean, optional): 1文字ずつ入力するか。 Snapshot False
browser_select_option ドロップダウンでオプションを選択します。 element (string): 要素の説明。<br>ref (string): 要素参照。<br>values (array): 選択する値の配列。 Snapshot False
browser_snapshot 現在のページのアクセシビリティスナップショットを取得します。 なし Snapshot True
browser_take_screenshot 現在のページまたは特定要素のスクリーンショットを撮ります。 raw (boolean, optional): 非圧縮PNGで返すか。<br>filename (string, optional): 保存ファイル名。<br>element (string, optional): 要素の説明。<br>ref (string, optional): 要素参照。 Snapshot/Vision True
browser_wait_for 指定したテキストが出現または消失するのを待つか、指定時間待機します。 time (number, optional): 待機時間(秒)。<br>text (string, optional): 出現を待つテキスト。<br>textGone (string, optional): 消失を待つテキスト。 Snapshot/Vision True
browser_screen_click 指定されたX,Y座標でマウスクリックを実行します(ビジョンモード)。 element (string): 要素の説明。<br>x (number): X座標。<br>y (number): Y座標。 Vision False
browser_file_upload ファイルをアップロードします。 files (array): アップロードするファイルの絶対パスの配列。 Snapshot/Vision False

データソース: 6

この表は、Playwright-MCPが提供するコマンドセットの一部を示しており、ユーザーがブラウザをどの程度の粒度で制御できるかを理解するのに役立ちます。これにより、より効果的なタスク定義(プロンプト作成)が可能になります。

ブラウザ操作の自動化において、テキストベースのログだけでは不十分な場合が多く、視覚的なフィードバック(スクリーンショットなど)や構造化されたデータ出力が不可欠です。GitHub Actionsの成果物管理機能 20 を活用し、これらの情報をPRコメントにリンクするなどして、エージェントの作業内容をデバッグし検証可能にすることが、自動化の実用性を高める上で極めて重要となります。OpenHandsのIssue 21で議論されているスクリーンショット保存機能は、まさにこのニーズに応えるものです。

5. 詳細設定ガイド

OpenHandsとPlaywright-MCPを連携させるための詳細な設定項目について解説します。設定は、GitHub Actionsワークフローレベル、OpenHandsアプリケーションレベル、カスタムDockerイメージレベル、そしてPlaywright-MCPサーバーレベルと多岐にわたります。これらの設定レイヤーがどのように相互作用するかを理解することが、安定した自動化環境を構築する鍵となります。

5.1. OpenHands GitHub Actionの設定

OpenHands Resolverや xinbenlv/openhands-ai-action を使用する際の主要な設定項目です。

5.2. Playwright-MCPサーバーの設定

Playwright-MCPサーバーは、コマンドライン引数またはJSON設定ファイルで詳細な動作を制御できます。

5.3. Dockerによるカスタム環境構築

Playwright-MCPをOpenHandsのサンドボックス内で利用するためには、カスタムDockerイメージの構築が必要です。

5.4. 設定パラメータ一覧表

以下に、OpenHands GitHub ActionとPlaywright-MCPサーバーの主要な設定パラメータをまとめます。

Table 3: 主要設定パラメータ

ツール (Tool) パラメータ名 (Parameter Name) 説明 (Description) 設定方法 (How to Set) 使用例 (Example Value)
OpenHands GitHub Action (Resolver) LLM_API_KEY LLMサービスのAPIキー。 Workflow Secret $
OpenHands GitHub Action (Resolver) LLM_MODEL 使用するLLMモデル。 Workflow Env Var / Secret anthropic/claude-3-5-sonnet-20240620
OpenHands GitHub Action (Resolver) OPENHANDS_BASE_CONTAINER_IMAGE カスタムサンドボックスイメージ。 Workflow Env Var / Secret my-registry/my-openhands-with-mcp:latest
OpenHands GitHub Action (Resolver) PAT_TOKEN GitHubリポジトリアクセス用PAT。 Workflow Secret $
xinbenlv/openhands-ai-action prompt エージェントへの自然言語タスク指示。 Workflow Input “「example.com」から価格情報を抽出してください。”
Playwright-MCP Server --port <number> サーバーがリッスンするポート。 MCP CLI Arg / MCP JSON Key (server.port) 8931
Playwright-MCP Server --browser <name> 使用するブラウザ。 MCP CLI Arg / MCP JSON Key (browser.browserName) chromium
Playwright-MCP Server --headless ヘッドレスモードで起動。 MCP CLI Arg / MCP JSON Key (browser.headless) (引数のみ、または true)
Playwright-MCP Server --allowed-origins <origins> 許可するオリジン。 MCP CLI Arg / MCP JSON Key (network.allowedOrigins) * または https://example.com
Playwright-MCP Server --vision ビジョンモードを有効化。 MCP CLI Arg / MCP JSON Key (vision) (引数のみ、または true)
Playwright-MCP Server --config <path> 設定ファイルパス。 MCP CLI Arg config/mcp_server_config.json

CI/CDパイプラインにおける自動化では、セキュリティが最優先事項です。APIキーやパーソナルアクセストークンなどの機密情報は、必ずGitHub Secretsのような安全な場所に保管し、ワークフローからは参照する形でのみ利用してください 14。また、サンドボックス環境(Docker)の利用 1 や、ワークフローの実行権限の適切な管理 14 も、意図しない副作用やセキュリティリスクを低減するために不可欠です。特に、コンテナ内からホストOS上のサービス(例: ローカルで実行中のLLMサーバー)にアクセスするために host.docker.internal 27 を利用する際は、ネットワークの露出範囲に十分注意する必要があります。

6. 高度な考慮事項

OpenHands、GitHub Actions、Playwright-MCPを用いたブラウザ操作自動化を実践する上で、エラーハンドリング、セキュリティ、動的コンテンツへの対応、そしてパフォーマンスといった高度な側面を考慮することが、より堅牢で実用的なシステムを構築するために重要となります。

6.1. エラーハンドリングとデバッグ戦略

AIエージェントが関与する自動化システムのデバッグは、従来のコードデバッグとは異なる側面を持ちます。エージェントの「思考プロセス」(LLMへのプロンプトとLLMからの応答)、実行したアクション、環境の状態(ブラウザのDOM、スクリーンショットなど)、そして最終的な結果を総合的に把握する必要があります。

6.2. セキュリティに関する考慮事項

自動化ワークフロー、特にCI/CDパイプラインに組み込む場合、セキュリティは最優先で考慮すべき事項です。

6.3. 動的コンテンツと複雑なインタラクションへの対応

現代のWebアプリケーションは動的なコンテンツが多く、ユーザーインタラクションも複雑化しています。これらに対応するためには、自動化ツールとエージェントの双方が高度な能力を持つ必要があります。

自動化の粒度と堅牢性の間にはトレードオフが存在します。Playwright-MCPは ref を用いた要素指定など、非常に細かい粒度での制御を提供し、これはUIが安定している場合には強力です 6。一方で、UIが頻繁に変更される環境では、このような精密な指定が逆に自動化を脆くする可能性があります。LLMを活用するOpenHandsのようなエージェントに対して、より高レベルで目標指向の指示を与えることで、LLMが多少のUI変更に適応し、より堅牢な自動化が実現できるかもしれません。これは、各操作を直接制御する代わりに、エージェントの適応能力に期待するアプローチです。

6.4. パフォーマンスとスケーラビリティ

Playwright-MCPのようなエージェントとツール間の対話プロトコルの標準化は、今後のAIエージェント開発において重要なテーマです 8。OpenHandsとPlaywright-MCPの連携は、AIエージェントが様々なツールやAPIを発見し、理解し、利用するための標準化された方法への需要を示唆しています。今後、このようなプロトコルがさらに発展・普及し、AIが活用できるツールやサービスのエコシステムが拡大していくことが期待されます。

7. 結論と推奨事項

7.1. 総括

本調査の結果、OpenHands、GitHub Actions、およびPlaywright-MCPを連携させることによるワークフロー内でのブラウザ操作自動化は、技術的に実現可能であることが確認されました。
OpenHandsの標準的なブラウザ操作機能(BrowserGymベース)でも、GitHub Actionsを介して基本的なWebタスクを実行できます 1。これは比較的導入が容易なアプローチです。
一方、OpenHandsのカスタムサンドボックス内にPlaywright-MCPサーバーを導入し、OpenHandsエージェントをMCPクライアントとして機能させることで、より詳細かつ堅牢なブラウザ制御が期待できます 6。このアプローチはセットアップの複雑性が増しますが、アクセシビリティツリーを活用した精密な要素特定や、Playwrightの豊富な機能を間接的に利用できるメリットがあります。

7.2. 各アプローチの推奨利用シナリオ

7.3. 今後の展望と発展可能性

7.4. 最終的な推奨事項

  1. 段階的アプローチの採用: まずはOpenHandsの標準機能とGitHub Actionsの連携から始め、基本的なブラウザ操作タスクの自動化を試みることを推奨します。これにより、セットアップのハードルを低く抑えつつ、OpenHandsエージェントの能力と限界を把握できます。その上で、より高度な制御や堅牢性が求められる特定のユースケースに対して、Playwright-MCPの導入を検討するのが現実的です。この段階的な導入は、新しい技術をスムーズに組織に取り込む上で効果的です。
  2. プロンプトエンジニアリングへの注力: OpenHandsエージェントの性能は、与えられる自然言語プロンプトの質に大きく依存します 19。タスクの目的、操作対象、期待する結果を具体的かつ明確に記述することが、自動化の成功率を高める鍵となります。特にPlaywright-MCPのツールを利用させる場合は、どのツールをどのように使うべきかまで示唆するような、より詳細なプロンプト設計が求められます。プロンプトエンジニアリングは、LLMを活用した高度な自動化システムを使いこなす上で中心的なスキルとなります。
  3. セキュリティ対策の徹底: APIキーやパーソナルアクセストークンの安全な管理(GitHub Secretsの利用 14)、サンドボックス環境(Docker 1)の適切な運用、ワークフロー実行権限の最小化 14 など、セキュリティ対策は常に最優先事項としてください。自動化ワークフローがアクセスできる範囲や権限を慎重に検討し、潜在的なリスクを低減するための措置を講じることが不可欠です。

これらの推奨事項に従うことで、OpenHands、GitHub Actions、Playwright-MCPを活用したブラウザ操作自動化の導入を、より安全かつ効果的に進めることができるでしょう。

8. 付録

A. BrowserGymアクションスペース詳細

OpenHandsが内部的にブラウザ操作を行う際に利用するBrowserGymは、Playwrightをベースとしたアクションセットを提供します。これらのアクションは、OpenHandsエージェントがLLMを通じて解釈し、実行する基本的なブラウザ操作コマンドとなります。以下に、BrowserGymの主要なアクションとその概要、一般的なパラメータ、そして対応するPlaywrightの機能を示します。この情報は、OpenHandsの標準機能でブラウザ操作を行う際のプロンプト作成や、エージェントの動作理解の助けとなります。

Table 4: BrowserGym主要アクションとPlaywrightマッピング例

BrowserGymアクション (Action) 説明 (Description) パラメータ例 (Example Parameters) Playwright機能例 (Corresponding Playwright Function(s))
goto 指定されたURLに移動します。 url (string) page.goto()
click 指定された要素をクリックします。 bid (string, 要素ID), button (string, “left”/”right”/”middle”), modifiers (list,) element.click()
fill / type 指定された入力フィールドにテキストを入力します。 bid (string, 要素ID), text (string) element.fill(), element.type()
select_option ドロップダウンリストからオプションを選択します。 bid (string, 要素ID), options (string or list) element.select_option()
press 指定されたキーまたはキーの組み合わせを押します。 bid (string, 要素ID), key_comb (string, 例: “Enter”, “Control+C”) element.press()
focus 指定された要素にフォーカスします。 bid (string, 要素ID) element.focus()
clear 入力フィールドの内容をクリアします。 bid (string, 要素ID) element.clear()
scroll ページを指定された量だけスクロールします。 delta_x (float), delta_y (float) page.mouse.wheel()
mouse_move マウスカーソルを指定された座標に移動します。 x (float), y (float) page.mouse.move()
mouse_down / mouse_up マウスボタンを押す/離す操作。 x (float), y (float), button (string) page.mouse.down(), page.mouse.up()
drag_and_drop ある要素から別の要素へドラッグ&ドロップします。 from_bid (string), to_bid (string) element.drag_to() (または mouse.down/move/up の組み合わせ)
go_back ブラウザの履歴を一つ戻ります。 なし page.go_back()
go_forward ブラウザの履歴を一つ進みます。 なし page.go_forward()
take_screenshot 現在のページのスクリーンショットを撮ります。 (パラメータはBrowserGymの実装による) page.screenshot()
send_msg_to_user ユーザーにメッセージを送信します(エージェントからの情報提供用)。 text (string) (BrowserGym内部機能)

データソース: 13 (BrowserGymのアクション関数の定義を参照)
注: bid はBrowserGym内部で要素を識別するためのID(BrowserGym ID)を指すことが一般的です。パラメータの詳細はBrowserGymの具体的な実装やバージョンによって異なる場合があります。

B. 参考資料とリンク集

引用文献

  1. OpenHands: The Open Source Devin AI Alternative - Apidog, 5月 27, 2025にアクセス、 https://apidog.com/blog/openhands-the-open-source-devin-ai-alternative/
  2. openreview.net, 5月 27, 2025にアクセス、 https://openreview.net/pdf/95990590797cff8b93c33af989ecf4ac58bde9bb.pdf
  3. open-operator/open/openhands.md at main · All-Hands-AI/open-operator - GitHub, 5月 27, 2025にアクセス、 https://github.com/All-Hands-AI/open-operator/blob/main/open/openhands.md
  4. System Architecture OpenHands, 5月 27, 2025にアクセス、 https://docs.all-hands.dev/modules/usage/architecture/backend
  5. OpenHands : An Open Platform for AI Software Developers as Generalist Agents PDF, 5月 27, 2025にアクセス、 https://www.slideshare.net/slideshow/openhands-an-open-platform-for-ai-software-developers-as-generalist-agents/274830722
  6. microsoft/playwright-mcp: Playwright MCP server - GitHub, 5月 27, 2025にアクセス、 https://github.com/microsoft/playwright-mcp
  7. Microsoft Playwright MCP: Tutorial for Beginners - Hugging Face, 5月 27, 2025にアクセス、 https://huggingface.co/blog/lynn-mikami/microsoft-playwright-mcp
  8. Playwright MCP: Expert Strategies for Success - Codoid Innovations, 5月 27, 2025にアクセス、 https://codoid.com/automation-testing/playwright-mcp-expert-strategies-for-success/
  9. Modern Test Automation With AI (LLM) and Playwright MCP - DZone, 5月 27, 2025にアクセス、 https://dzone.com/articles/modern-test-automation-ai-llm-playwright-mcp
  10. Playwright MCP - Scraping Smithery MCP database Tutorial with Cursor - ScrapingBee, 5月 27, 2025にアクセス、 https://www.scrapingbee.com/blog/playwright-mcp-web-scraping-smithery-tutorial-cursor/
  11. Using an MCP Server in GitHub Copilot, 5月 27, 2025にアクセス、 https://markheath.net/post/2025/4/10/mcp-playwright
  12. openhands.agenthub.browsing_agent - All Hands AI, 5月 27, 2025にアクセス、 https://docs.all-hands.dev/modules/python/openhands/agenthub/browsing_agent
  13. BrowserGym/browsergym/core/src/browsergym/core/action/functions.py at main · ServiceNow/BrowserGym - GitHub, 5月 27, 2025にアクセス、 https://github.com/ServiceNow/BrowserGym/blob/main/browsergym/core/src/browsergym/core/action/functions.py
  14. OpenHands/openhands/resolver/README.md at main · All-Hands …, 5月 27, 2025にアクセス、 https://github.com/All-Hands-AI/OpenHands/blob/main/openhands/resolver/README.md
  15. Custom Sandbox OpenHands, 5月 27, 2025にアクセス、 https://docs.all-hands.dev/modules/usage/how-to/custom-sandbox-guide
  16. Using the OpenHands GitHub Action - All Hands AI, 5月 27, 2025にアクセス、 https://docs.all-hands.dev/modules/usage/how-to/github-action
  17. OpenHands/.github/workflows/openhands-resolver.yml at main · All …, 5月 27, 2025にアクセス、 https://github.com/All-Hands-AI/OpenHands/blob/main/.github/workflows/openhands-resolver.yml
  18. OpenHands AI Action - GitHub Marketplace, 5月 27, 2025にアクセス、 https://github.com/marketplace/actions/openhands-ai-action
  19. Prompting Best Practices OpenHands, 5月 27, 2025にアクセス、 https://docs.all-hands.dev/modules/usage/prompting/prompting-best-practices
  20. Storing and sharing data from a workflow - GitHub Docs, 5月 27, 2025にアクセス、 https://docs.github.com/actions/using-workflows/storing-workflow-data-as-artifacts
  21. Allow the agent to save a browser screenshot as an image · Issue #8372 · All-Hands-AI/OpenHands - GitHub, 5月 27, 2025にアクセス、 https://github.com/All-Hands-AI/OpenHands/issues/8372
  22. Repository Customization - OpenHands - All Hands AI, 5月 27, 2025にアクセス、 https://docs.all-hands.dev/modules/usage/customization/repository
  23. Playwright Browser Automation - MCP Server - Magic Slides, 5月 27, 2025にアクセス、 https://www.magicslides.app/mcps/microsoft-playwright-browser-automation
  24. Creating a Docker container action - GitHub Docs, 5月 27, 2025にアクセス、 https://docs.github.com/en/actions/sharing-automations/creating-actions/creating-a-docker-container-action
  25. Docker Container Action - GitHub Marketplace, 5月 27, 2025にアクセス、 https://github.com/marketplace/actions/docker-container-action
  26. How can a GitHub owner run and external PR through GitHub Actions? - Stack Overflow, 5月 27, 2025にアクセス、 https://stackoverflow.com/questions/77894343/how-can-a-github-owner-run-and-external-pr-through-github-actions
  27. [Bug]: LLM Connection Fails for Dockerized OpenHands to Host Ollama - UI Settings Override `host.docker.internal` · Issue #8318 - GitHub, 5月 27, 2025にアクセス、 https://github.com/All-Hands-AI/OpenHands/issues/8318
  28. OpenHands Feature Overview - All Hands AI, 5月 27, 2025にアクセス、 https://docs.all-hands.dev/modules/usage/key-features
  29. Configuration Options - OpenHands - All Hands AI, 5月 27, 2025にアクセス、 https://docs.all-hands.dev/modules/usage/configuration-options
  30. Understanding GitHub Actions, 5月 27, 2025にアクセス、 https://docs.github.com/articles/getting-started-with-github-actions
  31. Playwright MCP Server Explained: A Guide to Multi-Client Browser Automation - QA Touch, 5月 27, 2025にアクセス、 https://www.qatouch.com/blog/playwright-mcp-server/
  32. OpenHands OpenHands, 5月 27, 2025にアクセス、 https://docs.all-hands.dev/
  33. Fullstack Open Source Projects That Will Help You Become AI Devs (Python, JavaScript, AI), 5月 27, 2025にアクセス、 https://dev.to/fast/fullstack-open-source-projects-that-will-help-you-become-ai-devs-python-javascript-ai-4m9a
  34. Welcome to BrowserGym’s documentation! - Read the Docs, 5月 27, 2025にアクセス、 https://browsergym.readthedocs.io/latest/
タグ: OpenHands GitHub GitHub Actions MCP Playwright-MCP