Webブラウザの基礎知識とEdgeのChromium採用について

## まえがき
現在(2018/12/7)、[Microsoft Edgeがchromiumベースに移行すること](https://japan.cnet.com/article/35129766/)が発表され、一部の界隈が現在進行系でざわざわしています。

そこで、この話に関連して、改めてブラウザの基本的な情報をサラッと整理してみようと思います
自分の知識の整理も兼ねているので、間違っている話があればぜひフィードバックいただきたいです


## ウェブブラウザのプレイヤー達


[W3Counter](https://www.w3counter.com/globalstats.php)の統計では需要ブラウザとそのシェア（2018/11時点)では以下のようになっています

|ベンダー|ブラウザ|シェア|
| --- | --- | --- |
| google | Chrome | 63.5 |
| Apple | Safari | 13.9 |
| Microsoft | IE & Edge | 7.3 |
| Mozilla | FireFox | 6.6 |
| Opera| Opera | 3.0 |

※ Safariのシェアは多くがiOS(モバイル)のものと思われる
※ IE & Edgeとなっているが、IEの占める割合が大きいと思われる


[トレンド](https://www.w3counter.com/trends)を見てもchromeの一人勝ちはしばらく続きそうです
また、この数字はグローバルなものですが、日本に限ると

- iOSのシェアが高いのでSafariが多い
- IEのシェアが未だにかなり高い :-1: 

といった特徴があります。

### IEサポート問題

過去にMicrosoftはWindowsの標準ブラウザをIEからEdgeに切り替えましたが、
現在でもIEの最新版である11はサポートされるブラウザとなっています。
IE11の[サポート終了日は明言されていない](https://blogs.technet.microsoft.com/jpieblog/2018/07/18/internet-explorer-support/)ものの、windows本体のサポート期間にあわせて2023年や2025年までと世間では言われたりします。
MicrosoftとしてもユーザーにEdgeへの早期移行を期待しているようですが、
以下のような理由でまだまだIEのシェアは高く、Webアプリ開発ではIE対応のための追加コストを支払わざるを得ない状況が続いています。

- IEしか使えないレガシーな機能(ActiveXなど)に依存した社内システムのためにIEを使わざるを得ない
- 社内のセキュリティポリシーが更新されておらず、IE以外の利用が禁止されている
- ITリテラシーが高くない一部の人にとっては「インターネット=Internet Explorer」という図式が定着してしまっていてEdgeを認識していない

利用している人数が少なければ、Microsoftがサポートしていようがいまいが、個々のWebサイトではバッサリ対象外にする、という戦略も取れるのですが、日本国内では特にIEのシェアが高く、そういった判断に踏み切れない現状があります

## ウェブブラウザを構成する仕組み

話を戻します。
ウェブブラウザは多くの機能を持っていますが、その中でも中核となるのが

- HTTP通信を行うエージェント機能
- JavaScriptの実行 (JavaScriptエンジン)
- HTML/CSSのレンダリング (レンダリングエンジン)

といった機能になります。
各機能はモジュール化され名前がついています。


### ブラウザとエンジン

それでは各ブラウザが採用しているエンジンに関して整理してみます

|ブラウザ|レンダリングエンジン|JavaScriptエンジン|
| --- | --- | --- |
| Chrome | [Blink](https://www.chromium.org/blink) | [V8](https://github.com/v8/v8) |
| Safari | [WebCore](https://github.com/WebKit/webkit/tree/master/Source/WebCore) | [JavaScriptCore](https://github.com/WebKit/webkit/tree/master/Source/JavaScriptCore) |
| FireFox | [Gecko](https://github.com/mozilla/gecko-dev) ([Servo](https://github.com/servo/servo)へ移行中) | [SpiderMonkey](https://developer.mozilla.org/ja/docs/Mozilla/Projects/SpiderMonkey/Getting_SpiderMonkey_source_code) |
| IE11 | Trident  | Chakra/JScript |
| Edge(現行) | EdgeHTML | [Chakra](https://github.com/Microsoft/ChakraCore)(※1) |
| **Edge(未来)** | Blink | V8 |

※1
IE11とEdgeのChakraは名前は同じだがバージョンが違う
https://en.wikipedia.org/wiki/Chakra_(disambiguation)

※出典

[JavaScriptエンジンの比較](https://en.wikipedia.org/wiki/Comparison_of_JavaScript_engines)
[JavaScriptエンジンの実装](https://en.wikipedia.org/wiki/JavaScript_engine#Implementations)

### Edgeのchromium採用について
 
今回のEdgeのChromium採用ではEdgeのJavaScriptエンジン・レンダリングエンジンが変わることになります。
MicrosoftがEdgeのエンジンとしてChromeと同じものを採用して、独自開発でwebに追従していくことをやめ、エンジン開発のサポートに回る、というような話でした。
世の中にはすでにchromeのベースになっているエンジン(chromium)を採用したブラウザが多くリリースされていますし過去にはOperaが自社エンジンからBlinkに切り替えたこともあり、それ自体は珍しいことではないかもしれません。
一方で、レンダリングエンジンやJSエンジンを独自開発できる体力のあるプレイヤーは少なくなっていますし、
IEの時代からブラウザ競争の主役だったMicrosoftがその中核をgoogleに譲るような形になる衝撃は大きいです。


## Webの仕様策定

Webブラウザの機能はWebの標準仕様+ベンダーの独自実装によって構成されています
ただし、標準仕様といってもブラウザのバージョンごとに対応状況は異なりますし、
ベンダーの独自実装が標準仕様に取り込まれていくこともあります。
ブラウザごとの仕様の実装状況はおなじみの[caniuse.com](https://caniuse.com/)などを通じて確認することができます


ではその標準仕様がどうやって決まっているのかというと[W3C](https://www.w3.org/)と[WHATWG](https://whatwg.org/)という団体が策定をしています。
なんで標準化団体が2つもあるのかというのは歴史的な経緯がいろいろあって長くなるので割愛しますが、要点として

- 保守的で厳密な仕様を決めるW3Cと、先進的に仕様を取り入れるWHATWGによって二重管理されている状態
- とはいえ両団体の距離は近づきつつある状況

ということだけ認識しておけばいいんではないかと思います。
また標準化団体とは別に、標準仕様として取り入れてほしい機能まず提案・議論する場として[WICG](https://wicg.github.io/admin/charter.html)というコミュニティも存在しています。
ここで議論された仕様が将来的なWebの仕様として採用されていったりします
（[WICGのgithub](https://github.com/WICG)を見るとその議論が見えます)

### JacaScript(EcmaScript)の仕様策定

JavaScriptの言語単体の仕様に関しては[TC39](https://github.com/tc39)という団体が仕様を決定しています
こちらもgithub上で活発な議論が行われており、[実装・議論の進行状態](https://github.com/tc39/proposals)を見ると将来のJSの姿が垣間見えて楽しいです。
([pipeline operator](https://github.com/tc39/proposal-pipeline-operator)とか刺激的ですね)


## ポエム(Edgeの路線転換に関して思うこと)

ここから先はポエムなので興味ない人はスルーしてください

フロントエンドエンジニアの端くれとしては、今回の件で動作環境の仕様が揃うことを嬉しいと思う半面、
Edge(の仕様の差)にそこまで苦しめられた記憶もないので、特に実務にインパクトはないなあと考えています。
それぐらいにEdgeは(IEとは全く違って）Web標準に寄り添って進化をしてきたという印象をもっていますし、一部の人が騒ぐような悪ではなかったと思います。
IEのサポートが続くことのほうがよっぽどつらいです。

今後のwebをchrome(google)が圧倒的なシェアを背景に牽引していくことはしばらく続くかと思いますが、
その監視役としての役割をMicrosoftには期待したいと心から思っています。
googleが引っ張るならそんなひどいことにはならないだろうという強い信頼は持っている一方で
一方でAMPやPWA（特にAMP)周辺の仕様に関してはちょっとどうかなーと思うことがないわけではないですし、
ネイティブアプリの世界観を守っていきたいiOSとWebを拡張していきたいAndroidの対立を中立的なポジションから判断できる一定の力を持っていてほしいなあと思っています。

※追記

slackでこんな反応をいただきました
<img width="861" alt="Station.png" src="https://qiita-image-store.s3.amazonaws.com/0/48729/9f672aae-8bfb-27be-1a52-929d436050b5.png">


個人的にはIEを未だに使い続けている人・組織がwin7でEdgeつかえるようになっても、そんなに大勢に影響を与えることはなさそうかなーとは思うんですが、
改めて考えてみるIEのサポートを本格的に切るための布石かなーと邪推できなくもなさそうですね。