CLIツール
Skyvern-AI/rustwright avatar
Skyvern-AI/rustwright

Rustwright: Rust CDPエンジン上のPlaywright API

このプロジェクトは「Playwright's API on a Rust CDP engine, Chromium browser automation for Python & Node, no driver subprocess. (Alpha).」を基盤として、実践的に使えるオープンソース実装を提供し、再利用可能なツールチェーンと統合手段を備えています。

スター 888フォーク 58PythonMIT
GitHub

ひと目でわかる

これは何?
PlaywrightをRustで書き直し、NodeドライバのサブプロセスなしでChromiumを直接駆動します。アルファ版、Chromiumのみ。
誰に向いている?
Chromiumを対象にPlaywright APIを保ちつつNodeドライバを外したいPython利用者には候補になります。Firefox、WebKit、広いNode API、完全な動作互換が必要な案件には向きません。
商用利用できる?
できます。MIT は寛容なライセンスで、著作権表示とライセンス表示を残せば、使用・改変・販売が可能です。
今もメンテナンスされている?
されています。最後のコミットは 3 日前です。
何の言語で書かれている?
主に Python です(GitHub の言語統計による)。

回答はプロジェクトの GitHub データ(最終同期:2026年9月14日)と当サイトの分析に基づくもので、法的助言ではありません。

オープンソース詳細解説

PlaywrightのRust書き換え

RustwrightはPythonとNode向けのブラウザ自動化ライブラリで、Playwright APIを維持しながら、Nodeドライバを、生のChrome DevTools Protocolを話すネイティブRustエンジンに置き換えます。ドロップイン置換として説明されており、インストールして1つのインポートを変更するだけで、既存のコードがRustエンジン上で動作します。プロジェクトはアルファ版で、Chromiumのみをサポートしています。FirefoxとWebKitは明示的にエラーになります。

1つのRustコア、薄いバインディング

アーキテクチャは単一のRustコアです。Tokio上に構築された非同期CDPクライアントで、WebSocketとオプトインのUnixパイプトランスポートを備え、Chromiumと直接通信します。薄いPyO3(Python)とnapi-rs(Node)バインディングがプロセス内で公開します。パスにドライバサブプロセスはありません。既存のChromiumまたはChromeバイナリは、RUSTWRIGHT_CHROMIUM、CHROME、またはCHROMIUMを設定することで使用できます。

言語サポートとAPIカバレッジ

PythonバインディングはPlaywrightの同期APIの約96%、536メソッド中515をカバーし、そのうち411は共有パリティレジストリでテストされています。非同期APIは536中488を提供します。Nodeバインディングは初期段階で、launch、newPage、goto、click、fill、title、textContent、evaluate、screenshot、closeのみをブリッジします。加えて、共有C ABIを介してGo、Java、C#/.NET、Ruby、PHP向けのアルファバインディングと、ネイティブRust APIがあり、CIでクロス言語等価性が検証されています。

エージェント向けCLIとMCPサーバー

プロジェクトには2つのエージェント向けツールが同梱されています。rustwright-cliはシェルまたはエージェントループから永続的なChromiumセッションを駆動し、open、snapshot、click、closeコマンドを提供し、コンパクトなアクセシビリティツリーとセッションスコープの要素参照を生成します。rustwright-mcpはネイティブRust MCPサーバーで、stdioを介して任意のMCPクライアントにbrowser_*ツールを公開し、インラインPNGスクリーンショットと設定可能なスクリーンショットサイズ制限をサポートします。以前のPython MCPサーバーは非推奨であり、ネイティブサーバーが完全なツールパリティに達するまで残ります。

自動化検出と入力処理

Nodeドライバがロードされないため、Rustwrightはその自動化シグネチャを一切発行しません。__playwright__binding__グローバルも、ドライバブートストラップも、デフォルトパスでのRuntime.enableもなく、isAutomatedWithCDPの背後にあるコンソールシリアライゼーションリークを閉じます。ヘッドレスアイデンティティはデフォルトで正規化されます。入力イベントは合成DOM呼び出しではなく、実際のCDP入力イベントを介してディスパッチされます。READMEはこれが検出不可能ではないと明示しています: CAPTCHAやCloudflareバイパスではなく、依然としてCDPプリミティブを使用します。ローカルフィンガープリントテストでは、SannySoft、BrowserScan、DeviceAndBrowserInfoはクリーンで、CreepJSはヘッドレスを検出します。

パフォーマンス数値はローカル診断

見出しの数値はローカル診断であり、CI上限の証拠ではありません。1回の開発ホスト実行(ウォームブラウザ、5回の反復)は17ケース平均のうち16で勝利し、2.55倍の高速化(5256ms対playwright-pythonの13418ms)でした。フォームフィル診断では、クライアントライブラリのメモリがplaywright-pythonで133.5 MiB、Rustwrightで40.6 MiBと測定され、約70%削減されました。別の非同期並行性診断では約66%削減されました。READMEは、Chromiumが支配するプロセス全体のメモリはほぼ同等であり、これらはデモグレードの診断であると注意を促しています。

制限、ロードマップ、ライセンス

Rustwrightはアルファ版です: API形状はカバーされていますが、完全な動作パリティは証明されていません。Chromiumのみで、FirefoxとWebKitは計画されていません。非同期並行性は、プロセスあたり約25以下の並行ワークフローに推奨されます。OOPIFには残存するギャップがあります。ロードマップには、Kotlinバインディング、CIベースのベンチマーク証拠、Nodeサーフェスの拡大、OOPIFギャップの解消が含まれます。テレメトリはプロセスごとに1つのengine_launchedイベントをPostHogに送信し、バージョン、OS、CPUアーキテクチャを含み、URLやページコンテンツは含みません。DISABLE_TELEMETRY=1またはDO_NOT_TRACK=1で無効にできます。プロジェクトはMITライセンスで、著作権2026 Ikonomos Inc(dba Skyvern)、標準MIT条項は使用、コピー、変更、配布を許可しますが、保証はありません。

既存のPlaywrightコードを移すときは、まずPythonのsync_apiかasync_apiかを分けて確認します。READMEが示すPython同期APIの対応範囲は536メソッド中515、非同期APIは488ですが、API名が存在することと動作互換が証明されていることは同じではありません。Node版はlaunch、newPage、goto、click、fill、title、textContent、evaluate、screenshot、closeに限られるため、複雑なNodeワークフローをそのまま置換する前提には向きません。

Chromiumの場所はRUSTWRIGHT_CHROMIUM、CHROME、CHROMIUMで指定できます。初回はpip install rustwrightとpython -m rustwright install chromiumを使い、対象ページの操作、スクリーンショット、終了までを小さなケースで確認します。READMEの速度とメモリ値はウォームブラウザを使った開発ホスト上の診断で、Chromiumを含むプロセス全体のメモリ削減を示すものではありません。アルファ版、Chromium限定、OOPIFの残りの差分を許容できる用途に範囲を絞るべきです。

編集部の結論

Chromiumを対象にPlaywright APIを保ちつつNodeドライバを外したいPython利用者には候補になります。Firefox、WebKit、広いNode API、完全な動作互換が必要な案件には向きません。最初にRUSTWRIGHT_CHROMIUMを固定し、利用するAPIとOOPIFを含む実ページのケースを確認してください。

公式情報源

  1. Official README
  2. Project repository
コミュニティノート

コミュニティノート