さよなら2017年、FirefoxとSelenium

この記事は[Selenium/Appium Advent Calendar 2017](https://qiita.com/advent-calendar/2017/selenium)の1日目の記事です。

こんにちは！
今年はどうでしたか！！ 来年はどうなりますか！！！ ちっともわかりませんね！！！！
でも予定をチェックするだけでなんとなく来年がわかるような気がしてきますよね、ふしぎ！！！！！


Firefoxは予定通りめっちゃ変わってしまいました
===========================================

変わるわよ〜変わるわよ〜と昨年 2016年から何度も具体的なスケジュールつきで広報されていたFirefox。特に予定は変わらずいろいろと変わりました。
Selenium目線でのトピックスを振り返ってみましょう。

* [ヘッドレスモード](https://qiita.com/hiroshitoda/items/4ccd0a466a76c8d17d76) が実装されました。
* [Firefox 55からSelenium IDEが使えなくなりました。](https://qiita.com/hiroshitoda/items/f01cf25fd972f03c24ed)
* ブラウザエンジンが刷新された、Firefox Quantumがリリースされました。
* geckodriverは10回もリリースされましたが、████すみませんなんでもないです。

けっこう変化が大きかったので、なんだか誤解してとらえられているケースがあったようにも感じています。ていうか自分もちゃんと調べるまで思い込みで誤解していることが多かった！
2018年を迎える前に、ありがちな誤解は解いておきましょう。いくぞーーー！！！


ありがちな誤解シリーーーズ
==========================

## Selenium IDEがFirefox 55で使えなくなったのは、FirefoxのアドオンのアーキテクチャがWebExtensionsだけになったから

→違います。

FirefoxのアドオンのアーキテクチャがWebExtensionsのみになったのはFirefox 57からです。

Firefox 55でフライング気味にSelenium IDEが使えなくなったのは、おそらくは段階的に廃止されていた古いアーキテクチャのXUL/XPCOMのAPIのうち何かが大当たりしてしまったですとか、Firefox内部でのモジュール置き換えの悪影響を受けてしまったですとか、解析はしていませんがいろいろと心当たりがある状態です。

FirefoxがWebExtensionsへの移行を発表したのは [2015年8月](https://blog.mozilla.org/addons/2015/08/21/the-future-of-developing-firefox-add-ons/) までさかのぼりますので、対応する人材がいれば十分に対応する時間はあったとも言えるでしょうが、実際に使えなくなってからようやく移行プロジェクトがまともに動き出すのは、まあ人情ですよね。しょうがない。


## Firefox Quantumから、ブラウザエンジンは刷新されてGeckoじゃなくなったのでgeckodriverは動かない

→違います。

確かにブラウザエンジンは刷新されましたが、依然としてGeckoのままです。

Firefox Quantumは特定のバージョンを表すのではなく、GeckoのコードベースをC++からRustに置き換えていく過渡期の一連のバージョン（Firefox 61あたりまで）のことを指しています。
この取り組みについては、もともとmozilla wikiでは [Oxidation](https://wiki.mozilla.org/Oxidation) と表現されていたのですが、何かのタイミングでQuantumという呼称が表に出たようです。 

コードベースをRustに置き換えるにあたって、プロトタイピングのためにまず [Servo](https://github.com/servo/servo) という新しいブラウザエンジンが作られています。このため、あたかもGeckoがServoに置き換えられたように感じてしまうかもしれませんが、実際の動きとしてはServoプロジェクトの成果をGeckoに取り込むような感じであって、Geckoは内部実装が変わっただけで残っていることになります。

ですので、Geckoの自動化APIとしてのMarionetteも残っていますし、これを操作するgeckodriverも以前と同じ形で残っていることになります。
（なおまったくの余談ですが、geckodriverもOxidationの一環でRustで書かれています）

一方、Servoの成果には [WebDriver APIへの対応も含まれています](https://github.com/servo/servo/tree/master/components/webdriver_server)
 ので、もしかして長い目線で見るとMarionetteが廃止されて、直接WebDriverで動かせるようになる日が来るのかもしれませんね。

## 俺たちの愛したSelenium IDEは死んだ！ もういない！！

→ちげーよ！！！

Firefox Quantumでも利用可能な [新しいSelenium IDEの開発が既に始まっています。](https://github.com/seleniumhq/selenium-ide)
ベースになっているのは [Sideex](http://sideex.org/) で、以前のSelenium IDEのデザインを踏襲する形になっています。
まだまだ開発中ですが、けっこう良い感じに開発が進んできているように思います。ユーザーの皆さんはぜひ、がんがん使ってがんがんフィードバックしていきましょう！

## 今年だけで10回もリリースがあったんならそろそろgeckodriverもバッチリ使えるんじゃねーの

→ ███████████████

# そんなわけで2018年もFirefoxを活用していきましょう

ニコニコ。

# おまけ: Iceweaselについて

Debian系のLinuxでは商標の問題でFirefoxの名称やロゴが利用できず、代わりに「Iceweasel」に名称を変えたブラウザを利用していました。このことは、 [Raspbian](https://www.raspberrypi.org/downloads/raspbian/) でSeleniumを使っていた人なんかにはおなじみかもしれませんね。

しかしこの商標問題は既に2016年にクリアされていて、それ以降はFirefox ESRが普通に使えるようになっています。Iceweaselをインストールしようとしても移行パッケージ扱いになり、実態としてはFirefox ESRがインストールされます。

```bash
$ aptitude show iceweasel

Package: iceweasel                       
Version: 52.5.0esr-1~deb9u1
State: not installed
Priority: optional
Section: web
Maintainer: Maintainers of Mozilla-related packages <pkg-mozilla-maintainers@lists.alioth.debian.org>
Architecture: all
Uncompressed Size: 240 k
Depends: firefox-esr
Description: Web browser based on Firefox - Transitional package
 This is a transitional package, it can be safely removed.
```

なのでたとえば、Iceweaselのヘッドレスモード対応バージョンというのは、厳密に言えば今後あらわれないと考えられるでしょう。

# 今回はここまで

次回は...誰かー！ 誰か来てくれーーー！！！
Selenium/Appium Advent Calendar 2017はまだまだ君の挑戦を待っているぜ！