HermesAgentで動的Web UIを堅牢に自動操作:AI駆動RPAの次世代アプローチ
WebサイトのUIテストや定型業務の自動化において、「昨日まで動いていたスクリプトが、CSSのクラス名変更で動かなくなった」という経験は、多くのWebエンジニアが直面する課題です。従来のセレクタベースの自動化は、UIのわずかな変更にも弱く、メンテナンスコストの高さが悩みの種でした。この課題に対し、LLMを活用した AI駆動RPA が新たな解決策として注目されています。本記事では、具体的な実装ソフトウェアである HermesAgent を中心に、人間のように画面の文脈を理解してブラウザを操作する、柔軟で堅牢な Web自動化 の手法を、具体的なコードと共に解説します。
はじめに:なぜ今、AI駆動ブラウザ操作が必要なのか
これまでWebブラウザの自動操作は、SeleniumやPlaywrightといったツールが主流でした。これらのツールは非常に強力ですが、その操作ロジックはHTMLの構造に強く依存します。例えば、「#submit-button というIDを持つ要素をクリックする」「.product-item というクラスを持つ要素のリストを取得する」といった具合に、CSSセレクタやXPathを使って操作対象を特定するのが一般的です。
このアプローチの最大の問題は、その「脆さ」です。フロントエンドの改修でIDやクラス名が変更されたり、DOM構造がリファクタリングされたりすると、自動化スクリプトは即座に動作しなくなります。特に、A/BテストでUIが動的に変化する場合や、React/Vue.jsなどで構築されたSPA(シングルページアプリケーション)では、要素の特定がさらに複雑になり、メンテナンスコストは増大する一方でした。
こうした背景から、HTML構造ではなく、人間のように「見た目」や「文脈」でUI要素を認識し、操作するアプローチが求められるようになりました。近年のLLM(大規模言語モデル)の進化は、この ブラウザ自動操作 のあり方を根本から変える可能性を秘めています。自然言語で与えられた指示と画面のスクリーンショット情報から、LLMが「次に何をすべきか」を判断する。これがAI駆動による Web自動化 の核心であり、本記事で紹介する HermesAgent は、その実装を強力に支援するフレームワークです。
HermesAgentとは:Web UI自律操作のためのフレームワークとそのアーキテクチャ
HermesAgent は、LLMを活用してWebブラウザの自律的な操作を実現するために設計された、オープンソースのフレームワークです。その最大の特徴は、開発者がCSSセレクタやXPathを直接記述することなく、自然言語による指示で複雑なWeb操作を定義できる点にあります。
HermesAgent のアーキテクチャは、主に3つのコンポーネントで構成されています。
- Observation(観測): 現在のブラウザ画面の状態を把握するモジュールです。スクリーンショットを撮り、HTMLのDOM構造を取得して、LLMが解釈しやすい形式に変換します。単なるピクセル情報だけでなく、各UI要素の役割(ボタン、入力フィールドなど)やテキストラベル、位置情報などを抽出します。
- Reasoning(推論):
HermesAgentの頭脳にあたる部分で、LLMが中心的な役割を担います。Observationモジュールから受け取った画面情報と、ユーザーから与えられた目標(例:「ユーザー名とパスワードを入力してログインする」)を基に、次に行うべき具体的なアクションを決定します。この思考プロセスは、多くの場合Chain of Thought(CoT)のような形式で実行され、なぜそのアクションを選択したのかという論理的な連鎖を生成します。 - Action(行動): Reasoningモジュールが決定した操作を、実際にブラウザ上で実行します。内部的にはPlaywrightのような実績のあるブラウザ自動化ライブラリを利用しており、「‘ログイン’と書かれたボタンをクリックする」「‘email’というラベルの入力欄に
[email protected]と入力する」といった指示を具体的なブラウザAPIの呼び出しに変換します。
この3ステップを繰り返すことで、HermesAgent は目標達成まで自律的にブラウザ操作を続けます。HTMLの構造が変更されても、画面上のラベルや配置といった視覚的な情報が変わらなければ、エージェントは操作を継続できる可能性が高く、これが従来の自動化手法に対する大きな優位性となります。
HermesAgentによるWebサイトの基本操作実践:要素特定とアクション実行
理屈を理解したところで、実際に HermesAgent を使ったコードを見ていきましょう。ここでは、Pythonを使って簡単なログインフォームの操作を自動化する例を紹介します。まずは、必要なライブラリをインストールします。
pip install hermes-agent openai
次に、エージェントを実行するスクリプトを作成します。ここではOpenAIのAPIを利用するため、事前にAPIキーを環境変数 (OPENAI_API_KEY) に設定しておく必要があります。
import asyncio
from hermes_agent import HermesAgent
async def main():
# HermesAgentを初期化
# `headless=False` にするとブラウザの動作を目で確認できます
agent = HermesAgent(headless=False)
try:
# 目標を自然言語で設定
goal = (
"https://example-login-page.com にアクセスし、"
"ユーザー名入力欄に 'testuser'、"
"パスワード入力欄に 'password123' と入力してから、"
"ログインボタンをクリックしてください。"
)
# エージェントにタスクを実行させる
result = await agent.run(goal)
print("タスク実行結果:", result)
finally:
# エージェントをクリーンアップ
await agent.close()
if __name__ == "__main__":
asyncio.run(main())
このコードのポイントは、操作対象を特定するためのCSSセレクタやXPathが一切登場しない点です。agent.run() に渡しているのは、人間が読むための自然言語の指示だけです。HermesAgent は内部で以下の処理を自動的に行います。
- 指定されたURLにアクセスし、スクリーンショットとDOMを取得。
- 取得した情報をLLMに渡し、「ユーザー名入力欄」「パスワード入力欄」「ログインボタン」が画面上のどの要素に対応するかを推論させる。
- LLMの推論結果に基づき、Playwrightを通じてテキスト入力やクリックといったアクションを実行する。
このように、開発者は「何をしたいか」という意図を記述することに集中でき、UIの具体的な実装詳細から解放されます。これにより、テストコードの可読性が向上し、UI変更に対する耐性も格段に高まります。
動的なWeb UIへの適応と堅牢な操作ロジックの構築
HermesAgent の真価が最も発揮されるのは、ReactやVue.jsなどで構築された、動的なWeb UIを操作する場面です。ユーザーのアクションに応じてコンテンツが非同期で読み込まれたり、UI要素が後から描画されたりするケースでは、従来の自動化スクリプトは sleep による固定時間の待機や、複雑な waitForSelector のような処理を多用する必要があり、不安定さの原因となっていました。
HermesAgent は、操作の各ステップで画面を「観測」し直すため、こうした動的な変化に自然に対応できます。例えば、「国を選択するドロップダウンで『日本』を選ぶと、都道府県を選択する新しいドロップダウンが表示される」というUIを考えてみましょう。
従来のスクリプトでは、「国を選択」→「都道府県ドロップダウンが表示されるまで待機」→「都道府県を選択」という手順を明示的にコーディングする必要がありました。一方、HermesAgent に「国に日本、都道府県に東京を選択する」というゴールを与えれば、エージェントは最初の操作後に画面が変化したことを認識し、新たに出現した都道府県ドロップダウンを自ら見つけて操作を継続します。
ただし、LLM活用 に基づくこのアプローチも万能ではありません。UIが曖昧な場合(例:同じ「詳細」ボタンが複数ある)、LLMが操作対象を誤認識する可能性があります。このような場合のベストプラクティスは以下の通りです。
- 指示をより具体的にする: 「テーブルの3行目にある『詳細』ボタンをクリック」のように、位置や文脈に関する情報を指示に加える。
- 操作を小さなステップに分割する: 一つの長大な指示を与えるのではなく、「まず検索欄にキーワードを入力する」「次に表示された結果から特定の項目をクリックする」のように、タスクを論理的な単位に分割して順次実行させる。
- アサーションを挟む: 各ステップの後に、期待通りの状態になっているか(例:「『ようこそ、testuserさん』というテキストが表示されていること」)を確認する指示をゴールに含めることで、操作の成功を保証しやすくなります。
これらの工夫により、LLMの推論の揺らぎを抑制し、より堅牢で信頼性の高い自動化ロジックを構築できます。
セキュアな実行環境と操作の可視化:HermesAgentを安全に運用する
AIエージェントにブラウザ操作を委ねることは強力ですが、同時に新たなリスクも生じます。特に、エージェントが意図しない操作を行った場合の影響や、問題発生時のデバッグの難しさは重要な懸念点です。HermesAgent は、これらの課題に対応するための仕組みを備えています。
第一に、セキュアな実行環境 の構築です。HermesAgent をDockerコンテナのようなサンドボックス環境で実行することは、セキュリティの基本原則です。これにより、万が一エージェントが予期せぬWebサイトにアクセスしたり、ファイルをダウンロードしようとしたりしても、その影響をコンテナ内に封じ込め、ホストシステムを保護できます。公式ドキュメントでは、最小限の権限でコンテナを実行するための設定例が提供されていることが多く、本番運用を見据えるなら必ず検討すべきです。
第二に、操作プロセスの可視化 です。HermesAgent は、実行したタスクの各ステップにおける思考プロセスやアクションを詳細にログとして記録する機能を持ちます。一般的に、以下のような情報が出力されます。
- スクリーンショット: 各ステップでエージェントが見ていた画面。
- LLMの思考ログ (Chain of Thought): 「目標は〜である。現在の画面には〜という要素が見える。したがって、次に行うべきアクションは〜だ」といった、LLMの推論過程。
- 実行されたアクション: 実際にブラウザで実行されたコマンド(
click,typeなど)とその対象要素。
これらのログを追うことで、エージェントがなぜその操作を選択したのかを後から正確に把握できます。自動化が失敗した場合でも、どのステップの認識や判断に誤りがあったのかを特定しやすくなり、デバッグ効率が大幅に向上します。
開発ワークフローへの統合と今後の展望
HermesAgent のようなAI駆動の自動化ツールは、単体で利用するだけでなく、既存の開発ワークフローに組み込むことでその価値を最大化できます。
例えば、E2E (End-to-End) テスト の領域では、テストシナリオの記述方法が大きく変わる可能性があります。JestやPytestといったテストフレームワークと HermesAgent を連携させれば、テストケースを自然言語で記述できるようになります。
# pytestでの利用イメージ
from hermes_agent import HermesAgent
async def test_user_signup_flow(): # asyncキーワードを追加
agent = HermesAgent()
goal = "ユーザー登録ページにアクセスし、新規ユーザーとして登録を完了させる"
result = await agent.run(goal)
# 最終的な画面の状態をアサーション
assert "登録が完了しました" in result.final_page_content
await agent.close()
このようなテストは、仕様書やユーザーストーリーに近い言葉で記述できるため、エンジニア以外のステークホルダー(QA担当者やプロダクトマネージャーなど)にとっても理解しやすく、テストシナリオのレビューや作成に参加しやすくなるというメリットも考えられます。
2026年現在、マルチモーダルLLMの性能は日々向上しており、HermesAgent のようなフレームワークのUI認識精度もそれに伴って高まると期待されます。今後は、テキストだけでなく、アイコンや画像で表現されたボタン、グラフやチャートといった、より複雑なUI要素の理解と操作も可能になっていくでしょう。Webエンジニアにとって、セレクタのメンテナンスから解放され、アプリケーションの振る舞いという本質的なテストや自動化に集中できる未来は、もうすぐそこまで来ていると言えるかもしれません。


