ruyiJS は、Firefox のコンポーネントを使って Python から JavaScript を実行する環境です。状態を保持する Context、DOM、ネットワーク API を提供します。公式リポジトリの対象は Windows x64 で、ブラウザーのウィンドウや完全なレイアウト、ページ描画はありません。スクリプトの計算結果が必要な場合と、実際の画面を確認する場合を分けて選ぶ必要があります。
ローカル AI エージェントについての Reddit 投稿で、kvyb は認証、ページ送り、フォーム、JavaScript の多いサイトを要件に挙げています。これは自動化の要件であり、ruyiJS の使用評価ではありません。後半では、実際のブラウザーと既存のログイン状態を使う別の方法として Tabbit Browser を説明します。
2026 年 10 月 28 日に公開文書を確認しました。ruyiJS のインストール、性能比較、ボット対策の検証は実施していません。PyPI 0.1.0の公開日は 10 月 22 日、GitHub リポジトリの作成日は 10 月 26 日です。両者を初回公開日として混同しないでください。調査時点の README と現行 PyPIは 0.1.6 を示しています。
要点
Python で操作する JavaScript と Web API の環境であり、完全な Firefox の画面は提供しません。
README は SpiderMonkey と Necko を使用すると説明しています。Firefox 158 という表記はプロジェクト側の説明で、独立監査の結果ではありません。
Windows x64 と Python 3.10 以降の条件を先に確認してください。
状態保持、オフライン資源、論理時計はスクリプト再生の評価に使えます。実際の互換性確認は必要です。
計算値、描画済みページ、人が確認するブラウザー作業のどれが必要かで選びます。
ruyiJS の概要
| 項目 | 文書上の動作 | 境界 |
|---|---|---|
| 実行環境 | Windows x64、Python 3.10+ | macOS、Linux のネイティブ導入は未記載 |
| JavaScript | SpiderMonkey、Context 内で状態保持 | Firefox 全体の互換性を証明しない |
| 通信 | Necko、fetch/XHR、Context 別プロキシ | 回線とサイト応答に依存 |
| ページ環境 | DOM と範囲を限定した Web API | 完全なレイアウトや描画とは異なる |
| 再生 | put_resource()、論理時計、ログ | 完全な入力と明示的な進行が必要 |
| 画面テスト | 完全な描画機能なし | 描画できるブラウザーツールを使用 |
出典は READMEです。ブラウザーエンジンの解説では JavaScript 実行と描画を区別しています。
Context が担当する処理
Python が独立した Context プロセスを操作し、その内部で SpiderMonkey、Web API、Necko が動きます。複数回の eval() で変数や関数を再利用し、Python からデータを渡して結果を受け取れます。
ボタンが見えて押せるかを確認する UI テストとは、検証対象が異なります。エージェント型ブラウザーの解説は追加の計画と操作の層を説明しています。ruyiJS の導入だけで LLM プランナーが得られるとは確認できません。DOM、Canvas 関連 API、Workers、iframe も、利用する処理ごとに動作を確かめてください。DOM を読めても、画面の幾何情報を完全に計算するとは限りません。
オフラインの小さな例から始める
対応する Windows x64 上で独立した Python 環境を作り、バージョンを固定します。以下は文書に基づく手順であり、この記事の実行ログではありません。
python -m venv .venv
.venv\Scripts\activate
python -m pip install ruyijs==0.1.6PyPIの条件を確認し、まず通信しない計算を試します。
from ruyijs import Context
with Context() as context:
context.eval("let count = 40")
print(context.eval("count += 2"))文書上の期待値は 42 です。次に、自分で用意した HTML と資源を読み込みます。
from ruyijs import Context
with Context() as context:
context.put_resource("https://example.test/app.js", "window.answer = 42")
context.load_page("https://example.test/", '''
<script src="/app.js"></script><p id="message">hello</p>
''')
print(context.eval("document.querySelector('#message').textContent"))
print(context.eval("answer"))0.1.0 の説明での期待値は hello、42 です。load_page(url, html) は基準 URL と渡された HTML を使用し、相対 URL はその基準で解決します。現行 README のトップレベル遷移 navigate(url) と同じものではありません。
状態、時刻、通信を明示的に管理する
最初のページスクリプト実行前に context.configure_fingerprint(profile) を適用し、Navigator、Screen、ビューポート、タイムゾーンなどを設定します。この設定はサイトによる受け入れを保証しません。新しい状態が必要なら Context を作り直します。JSObject と JSFunction の参照は所属 Context を閉じると無効になります。
スケジュールされた処理はホストが進めます。たとえば advance(10) を使います。論理時計は明示的に進み、システム時計では実時間の待機が発生する場合があります。通信 Promise には完了条件、期限、エラー処理が必要で、短い進行を一度呼ぶだけでは完了を証明できません。
put_resource() は固定応答によるオフライン再生に使えます。HTML、スクリプトの版、設定、期待値を一緒に保存してください。net_log() を使い、サイト互換性の切り分けと同様に通信障害と JavaScript エラーを分けます。
制限から選択を判断する
スクリーンショット、実際の要素位置、視覚的回帰には描画が必要です。viewport の設定で描画機能が追加されるわけではありません。変更履歴の Wine 修正も、ネイティブ Linux 対応の証拠にはなりません。macOS で行った今回の調査ではパッケージを実行していません。
ボット対策の例はメンテナーによる実演です。独立した成功率や、将来のサイト応答を保証するものではありません。速度とメモリも未測定です。スター数は信頼性の検証にはなりません。
ライセンス表記は MPL-2.0 で、README には再配布と商用利用に関する事前連絡のお願いもあります。組み込み前に現行 LICENSE と声明を読み、個別の利用条件を確認してください。この記事は個々の導入への判断を行いません。
Tabbit で実際のページを扱う
既存のログインで複数の資料を開き、出典付き比較表を作る場合、必要なのはブラウザーでのアクセスと結果確認です。Tabbit 中国本土版 v1.13 の更新履歴は、Codex、Cursor、Workbuddy などがユーザーとログイン状態を共有し、ブラウザーを操作する CLI 連携を説明しています。
対応クライアントで連携を設定してから、範囲を限定した読み取り専用タスクを渡します。以下は指示の例で、この記事で実行したという主張ではありません。
指定した資料ページを Tabbit で開いてください。
対応 OS、導入条件、ページ描画の対応を比較してください。
各項目に出典 URL と表示された版または日付を付けてください。
不明な項目は不明と記載し、フォーム送信やアカウント設定変更はしないでください。
Tabbit の作業例と製品解説も参考になります。設定、サイトへの権限、結果の確認は必要です。出典は中国本土のデスクトップ版であり、国際版やモバイルの対応は別途確認してください。
Firefox の自動化に関する投稿で Deep_Ad1959 は、期限切れセッションと時々現れる同意画面による不安定さを述べています。一般的な体験であり、Tabbit や ruyiJS のテストではありません。ログイン共有でもその問題は残ります。プロファイル解説ではセッションに属する情報を整理しています。
この連携と ruyiJS の Python API は異なります。Tabbit が ruyiJS を組み込み、同じフィンガープリント設定や実演を提供する証拠はありません。独立した ruyiJS プロセスが Tabbit のログインやタブを自動継承するわけでもありません。
必要な成果で選ぶ
| 目的 | 出発点 | 確認内容 |
|---|---|---|
| Windows で既知のスクリプトを実行 | 固定入力で ruyiJS を評価 | 正しい値、明示的な時刻、再現可能な入力 |
| HTTP で必要なデータを取得できる | 既存 HTTP クライアントを維持 | ブラウザーを追加せず正しい応答 |
| 画面取得とレスポンシブテスト | 完全な描画を行うツール | ピクセル、位置、操作の検証 |
| 既存ログインを使う資料調査 | 対応する Tabbit などの設定済み連携 | 出典、正しいセッション、人による確認 |
| 無人の複数 OS 向けサービス | 対応環境と運用を先に評価 | 対応ホスト、復旧、監視、タスク別テスト |
ブラウザー選択ガイドは繰り返す作業から考えます。第 2 のブラウザーとして評価すれば、一度に移行する必要はありません。
ruyiJS は文書上の対応環境でスクリプト実行と再生を検討する候補です。描画を伴う UI 自動化の汎用代替とは確認できません。まず自分の入力と既知の結果で検証し、人が監督する実ページ作業には Tabbit の連携をタスク単位で評価してください。
よくある質問
ruyiJS とは何ですか?
Firefox の構成要素と Web API を使い、独立プロセスで JavaScript を実行する Python パッケージです。文書上の対象は Windows x64 で、ウィンドウや完全なページ描画はありません。
初回公開日はいつですか?
PyPI の 0.1.0 は 2026 年 10 月 22 日公開で、GitHub リポジトリ作成は 10 月 26 日です。リポジトリの日付はパッケージの初回公開日ではありません。10 月 28 日の調査時点では README と PyPI は 0.1.6 を示しています。
macOS や Linux で動きますか?
公式の導入条件は Windows x64 と 64 ビット Python 3.10 以降です。Wine の修正はネイティブ Linux や macOS 対応を証明しません。この記事では複数 OS の導入テストを行っていません。
画面取得や UI テストで Playwright を置き換えられますか?
文書は完全なレイアウトと描画を対象外としています。画面取得、視覚的回帰、座標に依存する操作には描画できるブラウザーが必要です。DOM の読み取りと画面の検証は異なります。
すべてのボット対策を通過しますか?
普遍的な成功を保証する証拠はありません。公式の特定サンプルもネットワークや現在のサイト応答に依存します。この記事では実行や成功率の計測をしていません。
Tabbit との違いは何ですか?
Tabbit は AI 機能を備えたユーザー向けブラウザーです。中国本土版 v1.13 の文書はログイン状態を共有する Code Agent 向け CLI 連携を説明しています。ruyiJS の Python API や Firefox 構成要素を代替するものではありません。