最近の変化に対する注意点
ここまでにご紹介した大きな変化は、総じて使いやすさや安定動作の向上に寄与し、現状でのSeleniumの利用をさらに推し進めることでしょう。しかし一方では、以前の常識からずいぶん変わってしまって、過去の知識にとらわれていると思わぬ事故を招きかねないようなこともあります。SeleniumやWebDriverは今なお過渡期の一面を持つことを十分に認識して、最新の状態を注意深く見守っていく必要があります。
筆者が最近気になった、次の3点の変化のポイントをご紹介します。
- W3C WebDriver規格の策定に伴う基本仕様の変更
- ヘッドレスブラウザの勢力図の変化
- これからのSelenium IDE
W3C WebDriver規格の策定に伴う基本仕様の変更
WebDriverがW3Cの明示的な規格となる中で、かつては曖昧で実装に幅があったAPIが狭義に再定義されたり、今までには無かった仕様が追加されたりしています。これらは今後の最新のソフトウェアだけで考慮されることではなく、既存のブラウザドライバなどにも生じうる動きです。例えば、IEDriverServerは最近W3C対応版として作り直され、一部の仕様が変更されました。
以前と比べてどのような変更があるのか、W3C WebDriverの最新の仕様はW3Cの標準・草稿一覧から確認できますので、ぜひ一度チェックしてみましょう。筆者がチェックしていて気になった点は次の通りです。
スクリーンショット
かつてSeleniumのAPIで一風変わっていたのがスクリーンショットのAPIで、得られるスクリーンショットの取得範囲がブラウザ実装により異なるという、実に曖昧な仕様でした。W3Cの規格においてはこのような仕様は継承されず、スクリーンショットの取得範囲はフレームバッファの内容、つまり画面上に見えている範囲という仕様に一律に規定されました(2017年7月現在)。これにより、ページ全体のスクリーンショットを取れるブラウザは規格外になりました。
自動操作の明示
Webブラウザに自動操作のAPIが標準搭載されるということは、悪意あるユーザやソフトウェアにより不正にリモート利用されうる隙が生まれる、とも言えるでしょう。W3C WebDriverでは、WebDriverにより自動操作されているかどうかを明示的に示す真偽値の実装が規定されました(2017年7月現在)。これを活用することで、ユーザが意図しない自動操作など、WebDriverが不正に利用されるケースをある程度は抑制可能になるとみられます。
例えば最近のSafariやGoogle Chrome/Chromiumでは、WebDriverによる自動操作の際にGUI上にその旨が明示されたり、JavaScriptでnavigator.webdriverの値がtrueになったりするようになりました。
![Google Chromeの自動操作中の表示](http://cz-cdn.shoeisha.jp/static/images/article/10225/102205_03.gif)
![Safariの自動操作中の表示](http://cz-cdn.shoeisha.jp/static/images/article/10225/102205_04.gif)
ヘッドレスブラウザの勢力図の変化
Seleniumを活用するうえで避けて通れないのが、CIサーバーなどGUIコンソールを持たないヘッドレス環境での利用です。このような環境では仮想的なフレームバッファによりWeb画面をレンダリングする手法がよく併用され、特に簡便のためにヘッドレス動作専用ブラウザが利用されることも多いです。これまで、ヘッドレス動作専用ブラウザとしてはPhantomJSやHtmlUnitDriverが有名でよく使われてきましたが、これらは一般的なブラウザと微妙に動作が異なる場合も少なくなく、利用範囲は限定的でした。
最近になり、Google Chrome/ChromiumやFirefoxなどの一般的なブラウザにもヘッドレス動作モードが実装されつつあります。Google Chrome/Chromiumはバージョン59でヘッドレス動作モードが安定リリースされました。Firefoxではバージョン55から安定リリースされる予定です(2017年7月現在)。Seleniumユーザからの注目度は安定リリース前から高く、ヘッドレスブラウザの勢力図は近日中に大きく変わることでしょう。
そして、単にヘッドレス動作であるというだけの、PhantomJSなどの専用ブラウザの利用意義は、急速に薄れつつあります(なんと2017年4月にはPhantomJSのメンテナーであったVitaly Slobodinが悲観して引退してしまうという事件まで起こりました!)。
これは筆者の私感ですが、今後、仮にヘッドレス動作専用のブラウザが残っていくとしたら、おそらくもっと別の意図やメリットを含んだものが中心となっていくのではないでしょうか。例えば2015年から開発が進んでいるjBrowserDriverがあります。これはJava SDKに含まれるWebKitをブラウザとして利用するもので、JavaバインディングでSeleniumを利用する場合にブラウザドライバ等の環境構築無しにすぐに手軽に始められるというメリットを含んでいます。
これからのSelenium IDE
最後になりましたが、WebDriverを中心としたSeleniumの発展の裏で、どうしても影に隠れてしまうものにいま一度光を当ててみましょう。Selenium IDEです。
![SeleniumIDE](http://cz-cdn.shoeisha.jp/static/images/article/10225/102205_05_s.png)
SeleniumIDE
Selenium IDEはSelenium Coreの実装の一種で、XUL/XPCOMベースのFirefoxアドオンとして実装されています。内部実装は古いですが、主に非プログラマであるユーザからの根強い支持を得ており、長年有効活用されてきました。
しかし、Selenium IDEは、今年大きな岐路を迎えています。FirefoxアドオンのアーキテクチャがWebExtensionsに完全に変更され、XUL/XPCOMが廃止されるのです。これにより、今のSelenium IDEはまったく使用できなくなると考えられます。
現状のままですと、今年2017年11月リリース予定のFirefox 57から、Selenium IDEは完全に使えなくなってしまう見込みです。企業向けの延長サポート版であるFirefox ESRを利用の場合はもう少し延命できますが、それでも来年2018年3月リリースのFirefox ESR 59から完全に使えなくなる見込みです。
直接的な解決方法は、Selenium IDEをXUL/XPCOMベースからWebExtensionsベースに変更し、新しいFirefoxに対応させることです。しかしこれは非常に大がかりな対応になるはずである一方、公式リポジトリ上では対応を進めている素振りが見られず、該当するissueもありません(2017年7月現在)。開発メンバーだけでなく、コミュニティ全体の意識の範囲外になっているようにも見えます。
しかし、このような状況を悲観しなすすべもなく諦める必要は、本来はありません。SeleniumやWebDriverは、オープンソースの開かれたコミュニティで開発されてきたものです。仮に直接的にコードを書けなくても、意見を表明し開発者にはたらきかけることは自由です。残り時間は少なくなりつつありますが、Selenium IDEをよく使っているので今後も開発を継続されたい、という希望を多く挙げていくことは、現状を変える第一歩になるかもしれません。EOLになる前に言っておきたいことがある方は、まず宣言を!