ブラウザワークフローの堅牢性を高めるSkyvern:導入とPythonサンプルコード
ソフトウェアエンジニアの視点から、このツールがどのように役立つのか、導入方法、サンプルコードのイメージを分かりやすくご説明しますね!
従来のブラウザ自動化ツール(SeleniumやPlaywrightなど)は、ウェブサイトのDOM構造(XPathやCSSセレクタ)に依存するため、サイトのレイアウトが少し変わるだけでスクリプトが壊れてしまうという課題がありました。Skyvernは、この問題をAIの力で解決します。
UI変更に強い
Skyvernは、従来のセレクタではなく、コンピュータービジョンで画面を視覚的に理解し、LLMで次に取るべき行動を推論します。これにより、ウェブサイトのデザインやレイアウトが変更されても、スクリプトを書き直す必要性が大幅に減ります。これは、メンテナンスコストの削減に直結します。
ゼロショット対応
事前にトレーニングされていない、全く新しいウェブサイトでも、人間が操作するようにタスクを完了させることができます。
自然言語による指示
複雑な手順を自然言語(英語など)のプロンプトとして与えるだけで、ログイン、フォーム入力、ファイルダウンロードなどの一連の操作を自動で実行させることができます。
複雑な状況への対応
2要素認証(2FA)やCAPTCHAなど、従来の自動化が苦手としていた複雑な認証プロセスにも対応できる可能性があります。
API駆動
SkyvernはシンプルなAPIエンドポイントを提供しているため、自社の内部ツールやアプリケーションから簡単に呼び出すことができ、多数のタスクを同時に実行するなど、高いスケーラビリティを持った自動化システムを構築できます。
Skyvernはオープンソースで、Dockerを使ったセルフホスト(自前での運用)が可能です。Pythonでの利用が主になります。
前提条件の準備
Dockerがインストールされていること。
Python環境が整っていること。
LLMサービス(例
OpenAI, Anthropic)のAPIキーを用意すること(Skyvernの頭脳として使われます)。
Skyvernのセットアップ
GitHubリポジトリをクローンし、Dockerを使ってSkyvernのバックエンドサービスを起動します。
Pythonクライアントのインストール
Pythonのパッケージマネージャー(pip)を使ってSkyvernのクライアントライブラリをインストールします(具体的なパッケージ名は公式ドキュメントで確認してください)。
# クライアントライブラリのインストールイメージ
pip install skyvern-client
ここでは、特定のウェブサイトのログインとデータ抽出を自動化するサンプルを想定します。
import os
from skyvern_client import SkyvernClient, TaskInput
# 環境変数からAPIキーを取得
LLM_API_KEY = os.environ.get("OPENAI_API_KEY") # 実際のLLMプロバイダーに応じて変更
# Skyvernクライアントの初期化 (セルフホストの場合のエンドポイントを設定)
skyvern = SkyvernClient(
skyvern_url="http://localhost:8000",
api_key="YOUR_SKYVERN_API_KEY" # Skyvern自体の認証キー
)
# 実行したいタスクの定義
task_description = (
"URLにアクセスし、ユーザー名 'user123' とパスワード 'password456' でログインしてください。 "
"その後、ページ上部にある『最新の注文番号』を抽出してください。"
)
task_input = TaskInput(
url="https://example.com/portal/login",
# ユーザーが実行してほしい具体的なタスク内容を自然言語で記述
description=task_description,
# 抽出してほしいデータの形式(JSONスキーマなどで指定)
output_schema={
"type": "object",
"properties": {
"latest_order_id": {"type": "string", "description": "最新の注文番号"}
},
"required": ["latest_order_id"]
}
)
print("タスクを開始します...")
try:
# タスクの実行
result = skyvern.run_task(task_input=task_input)
print("\n タスクが完了しました!")
print(f"最終ステータス: {result.status}")
print(f"実行ログ(サマリー): {result.summary}")
# 抽出されたデータの表示
extracted_data = result.extracted_data
if extracted_data and 'latest_order_id' in extracted_data:
print(f"\n 抽出された注文番号: {extracted_data['latest_order_id']}")
else:
print("\n抽出データが見つかりませんでした。")
except Exception as e:
print(f"\n エラーが発生しました: {e}")
# 実際のコードは公式ドキュメントを参照してください。
Skyvernは、「壊れないRPA(ロボティック・プロセス・オートメーション)」を実現する、エンジニアにとって非常に魅力的なツールと言えるでしょう。