本文へスキップ
記事一覧

WebSummoner 1.0:Selenoid、ふたたびこの世へ

Ghazi Triki 著 · 3 分で読めます

WebSummoner のリリースを告知するビジュアル
この記事の内容

リリースのお知らせ

Docker 上で動く 7 つの最新ブラウザ、セッションごとに 1 つのコンテナ、音声付きの録画。2024 年 12 月からアーカイブされている Selenoid を WebSummoner がどのように引き継いでいるのか、そしてなぜ私たち自身のホスティングインフラの中核で稼働しているのかをご紹介します。

チームで Selenium のテストを実行しているなら、Selenoid をご存じの可能性は高いでしょう。テストセッションのたびに Docker コンテナ内で新しいブラウザを起動し、終了後に破棄する小さな Go プログラムです。高速で軽量であり、長年にわたって自前のハードウェアでブラウザグリッドを動かす最も簡単な方法でした。2024 年 12 月 17 日、その作者たちはリポジトリをアーカイブしました。告知もなければ、別れの投稿もありません。GitHub が読み取り専用のプロジェクトに付ける灰色のバナーが表示され、それで終わりでした。

2016 年 8 月:Aerokube で Selenoid の最初のコミット

2024 年 12 月 17 日:リポジトリがアーカイブされ、読み取り専用に

2026 年 9 月:WebSummoner 1.0.0。7 つの最新ブラウザ、1 行で済む移行

その朝、何かが壊れたわけではありません。そして、それこそが問題なのです。アーカイブされたテストツールは、自分ではコントロールできないスケジュールで劣化していきます。新しいブラウザのバージョンは届かず、ドライバーはずれていき、ある日、何年もグリーンだったテストスイートが、アプリケーションとはまったく関係のない理由で失敗し始めます。

オープンソースはリポジトリとともに終わらない

リポジトリのアーカイブはメンテナンスの終わりであって、生命の終わりではありません。Selenoid は Apache 2.0 ライセンスで公開されており、利用するすべての人に、改変と再配布の永続的な権利を与えています。プロジェクトの作者が離れても、コードは利用可能なまま残り、新しいメンテナーがそれを引き継ぐことができます。Aerokube は Selenoid を開発し、8 年間にわたって支えてきました。アーカイブするかどうかは彼らが決めることであり、Selenoid が成し遂げたことの功績は今も彼らのものです。WebSummoner はその継続です。Selenoid の最後のコミットから出発し、その良さを生んだ設計を守りながら、独自の名前、組織、イメージ、ドメインを持っています。RIADVICE ではすでに Selenoid を本番環境で運用しており、それを引き継ぐことは、私たちにとっても、Selenoid に依存しているほかのすべての人にとっても、理にかなった判断でした。

WebSummoner 1.0.0 をリリースしました:ブラウザのフリートを、セッション単位の一時的な環境として Docker コンテナに呼び出す、高速な Selenium ハブです。

Selenoid を置き換えるのではなくフォークした理由

フォークした理由は二つあります。

  1. 自社のインフラ:WebSummoner は、RIADVICE のホスティングインフラを支える基盤の一部です。ブラウザのアップデート、ドライバーの修正、セキュリティパッチを受け取れなくなった本番の依存関係を、アーカイブされたまま放置することはできませんでした。また、より重いものに移行すれば、きちんとメンテナンスするよりも高くついたでしょう。

  2. コミュニティ:世界中のチームが、何年もかけて Selenoid の上にテストスイートを築いてきました。それらのチームは、ゆっくりと朽ちていくのではなく、メンテナンスされた継続版を手にするべきでした。Selenoid は重要な点をしっかり押さえていました。約 10 MB の単一の Go バイナリで、Java ランタイムもデータベースも不要、ブラウザは約 1 秒で起動し、セッションごとに 1 つのコンテナを使うため、テスト間で何も漏れ出しません。

私たちはそのすべてを守り、それ以外を最新の状態にしました。2024 年から止まっていたブラウザ、ドライバー、ベースイメージ、ツールチェーンです。Selenoid は、いわば完成したソフトウェアです。最新の機能は必要なく、必要なのは最新のブラウザ、それに合ったドライバー、そして着実な修正です。それこそが、私たちが引き受けた仕事です。互換性は後から考えたことではなく、最初に下した決定です。Selenoid のクライアントが送るものは、今後も永続的にすべて受け付けます。

1.0.0 の新機能

7 つのブラウザ、すべて最新

ブラウザバージョン
Chrome152
Firefox155
Edge152
Opera(復活)135
Brave(新規)1.94
Yandex26.6
Safari(WebKitGTK、新規)2.52.6

すべてのイメージが、公開されたイメージに対して分離された環境で実行される同じコンテナテストスイートに合格しています。ドライバー自体が対応できない 2 つのケースは、隠さずにスキップとして文書化しています。このうち 3 つは、それ自体がニュースです。 Brave と Safari は今回初めて公開されます。Selenoid は Brave のイメージを一度も提供したことがなく、Safari のソースもイメージとしてリリースされたことはありませんでした。Opera は死の淵から復活しました。Selenoid における最後の Opera イメージは 2024 年 4 月のもので、Selenium プロジェクトが Opera のサポートを打ち切って以来、Selenium 4 では使えない状態が続いていました。

Brave がラインナップに加わる

Brave は今回初めて公開されます。Selenoid では一度も提供されていませんでしたが、今ではほかの 6 つと並ぶファーストクラスのイメージです。Brave は独自の体系でリリース番号を付けているため、ビルドツールが各リリースに組み込まれた Chromium のバージョンを読み取り、対応するドライバーと自動的に組み合わせます。ユーザーが Brave でブラウジングしているなら、Chrome とまったく同じようにテストできます。同じケーパビリティ、同じライブ画面、同じ録画、そして同じテストスイートに同じように合格しています。

Opera がふたたび動作

Selenium は 4.3.0 で Opera のサポートを打ち切りました。誰もが繰り返し勧める回避策、つまり Chrome for Testing の chromedriver で Opera を操作する方法では、セッションは問題なく始まるものの、ページがウィンドウを開くたびにレンダラーがクラッシュします。解決の鍵は、エラーメッセージを正しく読むことでした。OperaDriver のバージョンチェックは警告であって、拒否ではありません。Opera 自身のドライバーは Opera を正しく操作でき、ハブがお客様に代わってモダンなプロトコルを要求します。

Safari をファーストクラスのターゲットに

Safari も今回初めて公開されます。イメージは、Safari が搭載しているのと同じエンジンである WebKitGTK をソースからビルドしたものです。Selenoid にはビルドファイルがありましたが、イメージは一度もリリースされなかったため、これが pull できる最初のイメージになります。これまで動作しなかった二つの機能、ファイルアップロードとプロキシのケーパビリティは、ハブ自体で処理するようになったため、この修正は新旧を問わずどのイメージにも適用されます。残る二つの癖は、それぞれテストに 1 行を加えるだけで対処でき、その方法はドキュメントに記載しています。

すべてのブラウザで音声付きの録画

セッションの録画で、7 つのブラウザすべてにおいて音声を確実に記録できるようになりました。メディアや WebRTC のテストが失敗しても、無音の動画になることはもうありません。音声が不要な場合は、ケーパビリティ一つでオフにできます。

運用のために設計

Prometheus の /metrics エンドポイント、HEAD リクエストに応答するヘルスプローブ、キューが満杯のときの適切な 429、すべてのイメージで動作するファイルアップロード、ソフトウェア部品表(SBOM)付きの署名済みリリースイメージ、そして Docker ソケットが何を意味するのかを率直に記したセキュリティポリシーを備えています。

刷新された UI

ブラウザ画面、ログ、キューを表示するグリッドのライブビューである WebSummoner UI を、ゼロから作り直しました。よく練られたダークテーマ、公式のブラウザロゴ、セッションとキューのリアルタイム統計、そして接続状態の正直な表示を備えています。既存のコマンドラインや Compose ファイルを変更する必要はありません。

モダンなツールチェーン

Go 1.27、テストスイートには Java 25、UI には React 19、ブラウザイメージには Ubuntu 26.04 を採用し、CI で依存関係の更新と脆弱性チェックを行い、検索可能なドキュメントサイトも用意しました。プロジェクトのどの部分をビルドするにも、必要なのは Docker だけです。マルチハブクラスター向けのロードバランサーと、コマンド一つで済むインストーラーも、ハブとともに進化しました。

今、選ぶのであれば

Selenoid が担っていた役割を完全に代替できるものはありませんが、正直に見て適した選択肢はあります。

Selenium Grid:リファレンス実装です。分散モードが必要で、Java のフットプリントを気にしないのであれば、適切な選択です。

Moon:Kubernetes 上で運用し、並列セッションが 4 つを超える場合に商用ライセンスを受け入れられるのであれば、この選択肢です。

WebSummoner:Docker ホストや仮想マシン向けで、必要なものがすべてそろった小さく高速なハブを求める場合に適しています。

ドキュメントでは、Selenoid、Moon、Selenium Grid、Selenide、Playwright、Puppeteer とのソースで検証した比較を常に最新の状態で掲載しており、それぞれを選ぶべき場合についても説明しています。

Selenoid からの移行

クライアントの接続先を新しいハブに向けてください。selenoid:options、X-Selenoid-* ヘッダー、/aerokube/... パス、cm selenoid start、UI の --selenoid-uri フラグは、すべて引き続き動作し、今後も動作し続けます。

唯一の変更点:Docker イメージ内で、設定の場所が /etc/selenoid から /etc/websummoner に移りました。そのマウントを更新すれば完了です。

私たちのお約束

  • 互換性を永続的に。 Selenoid のケーパビリティ名、ヘッダー、パス、コマンドは恒久的に受け付けます。期限付きで非推奨にすることはありません。1 スプリント分のコストがかかる移行など、誰も実施しないからです。
  • 最新のブラウザ。 イメージは各ベンダーの安定版リリースに追随し、それぞれに対応するドライバーを組み合わせます。テストスイートに合格するまで、どのイメージにもタグは付けません。
  • セキュリティを常に最新に。 依存関係は毎週更新し、すべてのビルドで脆弱性チェックを実行します。ハブのイメージには署名を付け、ソフトウェア部品表を同梱しています。
  • 本番環境を第一に。 WebSummoner は私たち自身が運用しています。リリースするのは、私たち自身が依存しているものです。
  • 動作しないことも明記するドキュメント。 制限事項を含む完全な説明は、リリースのお知らせに掲載しています。

WebSummoner は、自らが勝てる領域、つまり速度、シンプルさ、運用コストの面で、最大規模のグリッドと競うことを目指しています。すべての変更は、その基準に照らして評価されます。

提供開始

Shell
websummoner \
    -p 4444:4444 \
    -v $PWD/browsers.json:/etc/websummoner/browsers.json:ro \
    -v /var/run/docker.sock:/var/run/docker.sock \
    websummoner/websummoner:latest

テストの接続先を http://localhost:4444/wd/hub に向けてください。リリースノートの全文、移行ガイド、ディスカッションには、いずれもワンクリックでアクセスできます。

📣 1.0.0 のお知らせ:リリースノートの全文と、ご質問はこちら 📖 ドキュメント:ガイド、リファレンス、移行ガイド 💻 ソースコード:Apache-2.0、GitHub で公開

Selenoid を運用していて、移行の際に何かが期待どおりに動作しない場合、それは私たちにとってサポートの質問ではなくバグです。Selenoid の上に何かを構築してメンテナンスしてきた方は、ぜひお知らせください。それが引き続き動作するよう対応します。

ブラウザのフリートを Docker コンテナに呼び出す。

セッション単位の一時的な環境を備えた、高速な Selenium ハブ。

組織での WebSummoner の運用にサポートが必要ですか。

お問い合わせ

WebSummoner は、RIADVICE が Apache-2.0 のもとで開発、メンテナンスしています。Aerokube と Ivan Krutov による Selenoid、そして Kirill Merkushev によるオリジナルの UI を基盤としています。

この記事を共有