Selenium Grid の概要
Selenium Grid は ブラウザテストの並列実行と分散実行 を実現する Selenium ファミリーのコンポーネントです。単一マシン上の WebDriver 実行ではなく、複数のホストやコンテナにテスト負荷を分散させることで、テスト時間の大幅な短縮とクロスブラウザ・クロスプラットフォーム検証を可能にします。
1. 目的とメリット
| 目的 | 説明 |
|---|---|
| 並列実行による時間短縮 | 同じテストスイートを複数ブラウザ/OS 組み合わせに同時実行し、CI パイプライン全体のリードタイムを短縮 |
| クロスブラウザ・クロス OS 検証 | Windows/Linux/macOS、Chrome/Firefox/Edge/Safari など複数環境での互換性を一括検証 |
| リソースの動的スケーリング | Docker/Kubernetes と連携し、需要に応じてノード数を増減することでコスト最適化 |
| 集中管理 | テストセッションの割り当て状況やノード状態をダッシュボードで一元把握 |
2. アーキテクチャ (v4 時点)
Selenium 4 では従来の Hub / Node という 2 層モデルが マイクロサービス構成 に刷新されました。
| 役割 | 主な責務 |
|---|---|
| Router | 入口となる HTTP エンドポイント。受信したセッション要求を Distributor へ転送 |
| Distributor | 利用可能ノードを評価し、最適な Node にセッションを割り当て |
| Session Map | セッション ID と Node の対応を保持し、リクエストを正しい Node にルーティング |
| Event Bus | サービス間の Pub/Sub 通信を提供し、健全性や状態を通知 |
| Node | 実ブラウザを起動してテストコマンドを実行するワーカープロセス (WebDriver インスタンス) |
| Session Queue (任意) | 要求過多時にセッション要求をキューイングし、Distributor が順次処理 |
トポロジー
すべてのコンポーネントを単一プロセスでまとめる スタンドアロン モード、役割ごとにコンテナを分割する 分散 モード、Kubernetes 用 Helm チャートなど複数のデプロイパターンが用意されています。
3. セットアップ手順 (スタンドアロン例)
-
ダウンロード
-
起動
-
接続 URL
-
WebDriver クライアントの
remote_urlにhttp://<grid-host>:4444を指定 -
http://<grid-host>:4444/uiにアクセスするとダッシュボードが確認できる
-
Docker Compose 例
SeleniumHQ が提供するselenium/standalone-chrome,selenium/standalone-firefoxイメージをdocker-compose.ymlで起動し、ホストごとにポートを公開すれば簡単に並列環境を構築できます。
4. 実行フロー
-
テストスクリプトが DesiredCapabilities (ブラウザ種別等) を添えて Router にセッション開始リクエストを送信
-
Distributor が Session Queue 経由で要求を受け取り、適切な Node を検索
-
Node がブラウザを起動し、Session Map に登録
-
以降の WebDriver コマンドは Session Map の情報に基づき該当 Node へ転送
-
テスト完了後、セッションがクローズされリソースが解放
5. よくある構成パターン
| パターン | 特徴 | ユースケース |
|---|---|---|
| 単一ホスト・スタンドアロン | 1 台で簡易 Grid。導入が容易だがスケールに限界 | 小規模チームの夜間ビルド |
| Docker Compose | 各 Node を別コンテナ化し同ホストで並列実行 | CI サーバー 1 台で多ブラウザテスト |
| Kubernetes + Autoscaling | Node Pod を HPA で自動増減 | 大規模 SaaS の本番前リグレッション |
| マルチホスト分散 | Router/Distributor を共有しノードを複数マシンに配置 | OS ごとに物理マシンが異なる環境 |
6. ベストプラクティス
-
ドライバーバージョン管理
ブラウザの自動更新に合わせて ChromeDriver / GeckoDriver 等を継続的に更新 -
コンテナ化で環境固定
ドライバーとブラウザの組み合わせを Docker イメージで明示し、動作差異を最小化 -
リソース監視
CPU・メモリ不足はテスト失敗の要因となるため、Prometheus + Grafana などで可視化 -
セッション制限
Node あたりの最大並列数 (max-sessions) を適切に設定し、過剰同時実行を防止 -
ログ集約
Grid 各コンポーネントのログを Elasticsearch 等に集約し、障害調査を効率化
7. よくある課題と対策
| 課題 | 原因 | 対策 |
|---|---|---|
| セッションタイムアウト | ブラウザ安定性・ネットワーク遅延 | タイムアウト値の調整、Node 健全性チェック |
| ドライバー互換性エラー | ブラウザとドライバーのバージョン不一致 | WebDriver Manager や CI ジョブで自動同期 |
| ポート競合 | 同一ホストで複数 Node を実行 | SE_NODE_PORT 環境変数でポートを分割 |
| リソース枯渇 | 並列数過多 | Node 数のスケールアウト、HPA 設定 |
8. Selenium Grid 3 から 4 への主な違い
| 項目 | Grid 3 | Grid 4 |
|---|---|---|
| 構成 | Hub / Node 2 層 | マイクロサービス (Router/Distributor 等) |
| プロトコル | JSON Wire Protocol | W3C WebDriver 標準のみ |
| セキュリティ | ほぼ無し | Basic 認証・JWT など拡張 |
| UI | 旧 UI | React 製ダッシュボード |
| ネイティブ Docker/K8s サポート | 限定的 | 公式 Helm チャート・Docker イメージ提供 |
9. まとめ
Selenium Grid は 自動化テストのスケールアップ を実現する必須ツールです。小規模なスタンドアロン運用からクラウドネイティブな大規模分散構成まで幅広く対応し、並列実行・環境多様性・可観測性の向上に寄与します。導入時は バージョン整合性・リソース管理・ログ集約 を意識し、継続的なメンテナンスで安定したテスト基盤を構築してください。
ChatGPT4o 生成日:2025/06/21