Geckoとは|Firefoxを支えるオープンソースのレンダリングエンジン

Web

Webブラウザがウェブページを表示するためには、HTMLやCSSを解釈して画面に描画する「レンダリングエンジン」が必要です。

その中でも、Mozillaプロジェクトによって開発された「Gecko(ゲッコー)」は、Firefox、Thunderbirdなど多くのアプリケーションで採用されているオープンソースのレンダリングエンジンです。

この記事では、Geckoの歴史、技術的特徴、主要コンポーネント、そして現在の開発状況まで詳しく解説します。

スポンサーリンク

Geckoとは

Gecko(ゲッコー)は、Mozillaプロジェクトによって開発されたオープンソースのHTMLレンダリングエンジンです。
ウェブブラウザがHTML、CSS、JavaScript、画像などを解釈し、画面に表示するための中核的な役割を担っています。

基本情報

正式名称: Gecko
読み方: ゲッコー
開発元: Mozilla Foundation / Mozilla Corporation
初版リリース: 1998年(オープンソース化)
ライセンス: Mozilla Public License version 2
対応プラットフォーム: Windows、macOS、Linux、Android

名前の由来

「Gecko」は英語で「ヤモリ」を意味します。
なぜヤモリなのかについて公式な説明は明確ではありませんが、小さくて素早く、壁を自由に登れるヤモリの特性が、軽量で高速なレンダリングエンジンのイメージと重なったためと考えられています。

Geckoの歴史

Netscape時代の開発開始(1997年〜1998年)

Geckoの開発は、1997年にNetscape社がDigitalStyle社を買収したことから始まりました。

開発の背景:

当時のNetscape Navigator 1.0から使われていた既存のレンダリングエンジンには、多くの問題がありました。

  • 動作が遅い
  • W3C標準への準拠が不十分
  • Dynamic HTMLのサポートが限定的
  • インクリメンタルリフロー機能の欠如

これらの問題を解決するため、Netscapeは新しいレンダリングエンジンを並行開発することを決定しました。

名称の変遷

Raptor(ラプター):
最初の開発コード名は「Raptor(猛禽類)」でしたが、商標問題で変更が必要になりました。

NGLayout(Next Generation Layout):
次に「NGLayout」という名前が使われました。
これは「次世代レイアウトエンジン」という意味です。

Gecko:
その後、Netscapeが「Gecko」という商標名を採用しました。
最初はMozilla Organizationが「NGLayout」の名称を使い続けましたが、最終的に「Gecko」が定着しました。

Mozilla Projectの開始(1998年)

1998年初頭、Mozillaプロジェクトが立ち上がり、新しいレンダリングエンジンのコードがオープンソースライセンスで公開されました。

1998年10月の重大決定:
Netscapeは、次期ブラウザ(後のNetscape 6)で、旧レンダリングエンジンではなくGeckoを採用すると発表しました。
この決定により、アプリケーションの大部分を書き直す必要が生じました。

これは標準準拠を重視する開発者から歓迎されましたが、Netscapeの開発者の間では、6ヶ月という短期間での書き直しに対する不満もありました。

Netscape Communicator 5.0の開発中止:
この決定により、Netscape Communicator 5.0のために行われていた作業(Marinerエンジンの改良を含む)の大部分が放棄されました。

Netscape 6のリリース(2000年)

2000年11月:
Geckoを初めて搭載したブラウザ「Netscape 6」がリリースされました。
(Netscape 5という名前は使われませんでした)

Mozilla Foundation設立(2003年)

2003年7月15日:
AOLがNetscapeのブラウザ開発を終了し、残っていたGecko開発者を解雇しました。
同日、Mozilla Foundationが非営利組織として設立され、Geckoの開発を引き継ぎました。

AOLはMozilla Foundationに200万ドルの初期支援を提供しました。

Firefox 1.0のリリース(2004年)

2004年11月9日:
Mozilla Firefox 1.0がリリースされ、Geckoはその中核的なレンダリングエンジンとして採用されました。
これにより、GeckoはW3C標準に準拠したブラウジング体験を提供する基盤となりました。

Gecko 1.9とFirefox 3.0(2008年)

2008年、Geckoはバージョン1.9に進化し、以前のソフトウェア肥大化問題に対処した結果、大幅なパフォーマンス向上を実現しました。

Firefox 3.0に搭載されたGecko 1.9の主な改善:

  • CSS2のサポート強化(collapsing margins、clearプロパティなど)
  • CSS3の初期機能(マルチカラムレイアウトなど)
  • Acid2テストに合格

Project Quantum(2016年〜)

2016年10月:
Mozillaは「Project Quantum」を発表しました。
これは、Geckoレンダリングエンジンを次世代に進化させる包括的なプロジェクトです。

Firefox 57(Firefox Quantum)リリース(2017年11月):
Project Quantumの成果を取り入れた最初のバージョンがリリースされました。

Geckoのアーキテクチャ

Geckoは、複数の主要コンポーネントから構成されています。

主要コンポーネント

HTMLパーサー:
HTMLドキュメントを解析してDOM(Document Object Model)ツリーを構築します。

CSSパーサーとスタイルシステム:
CSSを解析し、各要素のスタイルプロパティを解決します。

レイアウトエンジン:
DOMとスタイル情報を使って、要素の位置とサイズを計算し、フレームツリーを生成します。

グラフィックスエンジン:
レイアウトエンジンが生成したフレームツリーを画面に描画します。

ネットワークスタック(Necko):
HTTPやHTTP/2、HTTP/3などのプロトコルを使ってコンテンツを取得します。
TLS暗号化にはNSS(Network Security Services)ライブラリを使用します。

JavaScriptエンジン(SpiderMonkey):
JavaScriptコードを実行します。
詳細は後述します。

SpiderMonkey – JavaScriptエンジン

SpiderMonkeyは、Geckoに組み込まれたJavaScriptおよびWebAssemblyエンジンです。

開発者:
ブレンダン・アイク(Brendan Eich)がNetscape Communications社で開発し、世界初のJavaScriptエンジンとなりました。

実装言語:
C++、Rust、JavaScript(自己ホスト)

主な機能:

  • ECMAScript標準への準拠(現在はES2021 ES12以上)
  • WebAssemblyのサポート
  • JIT(Just-In-Time)コンパイラによる高速実行
  • ガベージコレクション

JITコンパイラの階層:

SpiderMonkeyは、コードの実行頻度に応じて複数のJIT階層を使い分けます。

  1. Baseline Interpreter: バイトコードを逐次解釈し、インラインキャッシュ(IC)で高速化
  2. Baseline Compiler: バイトコード全体をネイティブマシンコードに変換
  3. IonMonkey/WarpMonkey: 高度な最適化を施したマシンコードを生成

コードが頻繁に実行されるほど「ホット」と判断され、より高度なJIT階層に移行します。

XPCOMとWebIDL

XPCOM(Cross-Platform Component Object Model):
Mozillaが開発したコンポーネントモデルで、Microsoft COMに似た仕組みです。
C++、JavaScript、Rustで実装されたコンポーネントを相互に呼び出すことができます。

WebIDL:
DOM APIのインターフェース定義に使われる標準仕様です。
Geckoでは、Webページ向けだけでなく、内部コンポーネントのインターフェース定義にも使用されています。

Geckoの技術的特徴

W3C標準への厳格な準拠

Geckoは、HTML、CSS、DOM、SVGなどのW3C勧告に対する準拠度が非常に高いことで知られています。

Acid2テスト:
Gecko 1.9(Firefox 3.0)以降、Acid2テストに合格しています。

Acid3テスト:
2011年3月、Firefox 4に搭載されたGeckoでAcid3テストの100/100スコアを達成しました。

DOCTYPEスイッチング(Quirks Mode)

Geckoは、古いWebページとの互換性を保つために「Quirks Mode(互換モード)」をサポートしています。

標準準拠モード:
正しいDOCTYPE宣言があるドキュメントは、W3C標準に厳格に従ってレンダリングされます。

Quirks Mode:
DOCTYPE宣言がないか、古いDOCTYPE宣言のあるドキュメントは、Internet Explorer 5などの古いブラウザの非標準動作を模倣します。

これにより、1990年代後半に作られた古いWebサイトでも正しく表示できます。

クロスプラットフォーム対応

Geckoは、様々なオペレーティングシステムで動作するように設計されています。

対応OS:

  • Microsoft Windows
  • macOS
  • Linux(各種ディストリビューション)
  • Android
  • その他Unix系OS

マルチプロセスアーキテクチャ:

Project Electrolysis(e10s、2016年):
Webコンテンツを独立したプロセスに分離し、ブラウザの安定性を向上させました。

Project Fission(2021年):
SpectreMeltdown脆弱性の対策として、各コンテンツプロセスが単一のサイトのみを処理するモデルに変更されました。

Project Quantum – 次世代への進化

2016年10月、MozillaはGeckoを大幅に刷新する「Project Quantum」を発表しました。

開発の背景

Geckoには、マルチスレッド処理の制限によりパフォーマンスが制約されるという長年の課題がありました。
BlinkやWebKitなどの競合エンジンに対抗するため、モダンなハードウェアの並列処理能力を活用する必要がありました。

Quantumプロジェクトの目標

並列処理の実現:
レイアウト計算、レンダリングパイプライン、JavaScript実行を並列化し、マルチコアプロセッサを効果的に活用します。

Rustプログラミング言語の採用:
メモリ安全性を高めるため、Rust言語で実装された安全なコンポーネントを統合します。
これにより、C++コードベースで一般的な脆弱性を削減します。

実験的Servoプロジェクトからの統合:
Mozillaが開発していた実験的なレンダリングエンジン「Servo」から、安定した部分をGeckoに段階的に統合します。

Quantumプロジェクトの主要サブプロジェクト

Quantum CSS(Stylo):
Servoの並列スタイルシート処理システムをGeckoに統合しました。
ベンチマークでは、CPUコア数に応じてパフォーマンスが線形にスケールすることが示されています。
Firefox 57でリリースされました。

Quantum Render(WebRender):
Servoのレンダリングアーキテクチャ「WebRender」を統合しました。
従来の即時モード描画から保持モード描画に切り替え、GPUでより効率的に高速化できるようになりました。
Firefox 67(2019年)で段階的に有効化されました。

Quantum Compositor:
Geckoのコンポジターを独立したプロセスに移行しました。
グラフィックドライバーのクラッシュからブラウザタブを保護し、コンポジタープロセスがクラッシュしてもユーザーデータを失わずに透過的に再起動できます。
Firefox 53でリリースされました。

Quantum DOM:
DOM処理に協調スケジュールスレッドを導入し、プロセス数を増やさずに応答性を向上させました。
Firefox 57でコア部分が実装されました。

Firefox 57(Firefox Quantum)のリリース

2017年11月:
Project Quantumの主要コンポーネントを搭載した「Firefox 57」、通称「Firefox Quantum」がリリースされました。

主な改善点:

  • CSSとGPUレンダリングのパフォーマンス向上
  • メモリ使用量の最適化
  • より滑らかなスクロール
  • 高フレームレートの維持

Servoプロジェクトのその後

2020年8月:
MozillaはServoチームの開発者全員を解雇しました。
その後、ServoプロジェクトはLinux Foundationに移管されました。

Servoの完全な統合という当初の計画は実現しませんでしたが、Project Quantumを通じて安定した部分はGeckoに取り込まれました。

GeckoView – Android向けの再利用可能なライブラリ

2018年9月:
MozillaはGeckoViewを発表しました。
これは、Geckoをユーザーインターフェースから分離し、Androidアプリケーションに組み込みやすくしたソフトウェアライブラリです。

GeckoViewの特徴

エンジンとUIの分離:
GeckoエンジンをUIから完全に分離し、他のアプリケーションへの組み込みを容易にしました。

Android専用の最適化:
Androidプラットフォーム向けに最適化されたGeckoのバージョンです。

独立したWebエンジン:
Android上で唯一の独立したWebエンジンブラウザを実現します。
AndroidではほとんどのブラウザがWebKitベースですが、GeckoViewは独自のエンジンを提供します。

GeckoViewを使用しているアプリ

Firefox Focus 7.0(2018年9月):
GeckoViewを導入した最初のバージョンで、ページ読み込みパフォーマンスが向上しました。

Firefox Preview(2019年6月):
GeckoViewを使用した新しいAndroid向けFirefoxの開発プロジェクトとして発表されました。

Firefox for Android 79(Firefox Daylight、2020年8月):
GeckoViewエンジンを搭載した最初の安定版リリースです。

主な改善点:

  • より高速なページ読み込み
  • Enhanced Tracking Protection 2.0(強化されたトラッキング保護)
  • アドレスバーを下部に配置するオプション
  • Collectionsフィーチャー

他のレンダリングエンジンとの比較

Webブラウザのレンダリングエンジンには、Geckoの他にもいくつかの主要なエンジンがあります。

主要なレンダリングエンジン

Blink(Google):

  • 使用ブラウザ: Chrome、Edge、Opera、Vivaldi
  • 特徴: 高速、最新Web技術への迅速な対応
  • 開発元: Google(ChromiumプロジェクトWebKitからフォーク)

WebKit(Apple):

  • 使用ブラウザ: Safari、iOS上の全ブラウザ
  • 特徴: Appleデバイスとの統合、優れたパフォーマンス
  • 開発元: Apple(KHTMLからフォーク)

Gecko(Mozilla):

  • 使用ブラウザ: Firefox、Thunderbird、SeaMonkey
  • 特徴: W3C標準への厳格な準拠、プライバシー重視
  • 開発元: Mozilla Foundation

開発終了したエンジン:

  • Trident: Internet Explorerで使用
  • EdgeHTML: 旧Microsoft Edgeで使用(現在はBlinkに移行)
  • Presto: Operaで使用(現在はBlinkに移行)

Geckoの特徴と位置づけ

標準準拠:
W3C標準への厳格な準拠を重視しており、Webデベロッパーから高く評価されています。

プライバシー保護:
Mozillaのプライバシー重視の姿勢により、トラッキング保護などの機能が積極的に実装されています。

オープンソース:
完全なオープンソースプロジェクトとして、コミュニティからの貢献を受け入れています。

拡張性:
カスタマイズ性が高く、様々なアプリケーションに組み込むことができます。

なぜAppleはWebKitを選んだのか

2001年、AppleがSafariブラウザのエンジンを選択する際、GeckoではなくKHTMLをフォークしてWebKitを作成しました。

理由:
Netscape時代の技術的・管理的な判断ミスにより、Geckoにはソフトウェア肥大化の問題がありました。
Appleはより軽量なKHTMLを選択しました。

しかし、2008年までにMozillaは肥大化問題に対処し、Geckoのパフォーマンスは大幅に改善されました。

Geckoを使用しているソフトウェア

Geckoは、Webブラウザ以外にも様々なアプリケーションで使用されています。

Webブラウザ

Mozilla Firefox:
最も有名なGecko搭載ブラウザです。
デスクトップ版、Android版、iOS版(WebKit使用)があります。

Firefox派生ブラウザ:

  • LibreWolf: プライバシー強化版Firefox
  • Waterfox: 64ビット最適化とレガシー拡張機能サポート
  • Floorp: カスタマイズ性を重視した派生版
  • Pale Moon: クラシックなFirefoxの動作を維持
  • Tor Browser: 匿名性を重視したブラウザ

SeaMonkey:
2005年に開始されたMozilla Application Suiteの後継プロジェクトで、ブラウザ、メール、エディタを統合しています。

メールクライアント

Mozilla Thunderbird:
Geckoを使用してHTMLメールを表示します。
Webベースのメールインターフェースもレンダリングできます。

その他のアプリケーション

GNOME JavaScript bindings(GJS):
GNOME Shell拡張機能などで、SpiderMonkeyを使用してJavaScript開発を可能にしています。

0 A.D.(ゼロ・エー・ディー):
オープンソースのリアルタイムストラテジーゲームで、モッディングスクリプトにSpiderMonkeyを使用しています。

MongoDB:
バージョン3.2(2015年11月リリース)以降、mongoシェルとサーバーサイドJavaScript実行にSpiderMonkeyを採用しています(以前はV8を使用)。

Geckoの現在と未来

開発体制

現在、GeckoはMozilla Corporationの従業員、貢献企業の従業員、そしてボランティアによって開発されています。

開発リポジトリ:

  • メイン: Mercurialリポジトリ(hg.mozilla.org)
  • ミラー: GitHub(mozilla/gecko-dev)

リリースサイクル

高速リリースサイクル:
2011年以降、Geckoは6週間ごとにバージョンアップする高速リリースサイクルを採用しています。
バージョン番号はFirefoxやThunderbirdと統一されています。

iOS版Firefoxの特殊性

WebKit強制:
iOSでは、Appleのポリシーにより、WebKit以外のレンダリングエンジンの使用が禁止されています。
そのため、iOS版FirefoxはGeckoではなくWebKitを使用しています。

Mozillaは当初、この制限のためにiOS版Firefoxのリリースを拒否していましたが、後に方針を変更してWebKit版をリリースしました。

継続的な改善

Geckoは、Web標準の進化に合わせて継続的に改善されています。

主な開発分野:

  • パフォーマンスの向上
  • セキュリティの強化
  • 新しいWeb標準のサポート
  • プライバシー保護機能の拡充
  • WebAssemblyのサポート強化

まとめ

Geckoは、1997年のNetscape時代から開発が始まり、現在に至るまで進化を続けているオープンソースのHTMLレンダリングエンジンです。

Geckoの主な特徴:

  • Mozilla Foundationによって開発・保守
  • Firefox、Thunderbird、SeaMonkeyなどで使用
  • W3C標準への厳格な準拠
  • SpiderMonkey JavaScriptエンジンを搭載
  • クロスプラットフォーム対応(Windows、macOS、Linux、Android)
  • Project QuantumによるServo技術の統合
  • GeckoViewによるAndroid向け最適化

他のエンジンとの違い:

  • Blink(Chrome): 高速性重視、Googleのエコシステム
  • WebKit(Safari): Appleデバイスとの統合
  • Gecko(Firefox): 標準準拠、プライバシー重視、オープンソース

現在の位置づけ:
Blinkが市場シェアで圧倒的ですが、Geckoは独立したオープンソースエンジンとして、Web標準の多様性を保つ重要な役割を果たしています。

Mozillaのプライバシー重視の姿勢と、W3C標準への厳格な準拠により、GeckoはWeb開発者とプライバシーを重視するユーザーから高く評価されています。

今後も、Geckoは新しいWeb技術をサポートしながら、オープンでプライバシーを尊重するWebの実現に貢献していくでしょう。

参考情報

この記事は以下の情報源を参考に作成しました。

  • Wikipedia「Gecko」(日本語版・英語版)
  • Mozilla「Gecko — Firefox Source Docs documentation」
  • Mozilla Developer Network (MDN)「Gecko」
  • Wikipedia「SpiderMonkey」
  • SpiderMonkey公式サイト(spidermonkey.dev)
  • Wikipedia「Firefox」(英語版)
  • Mozilla「Project Quantum」関連ドキュメント

Firefoxの使い方やトラブルシューティングについては、Firefoxのツールバーを表示・非表示にする方法Firefoxのダウンロード保存先はどこ?Firefoxのブックマークをエクスポートする方法の記事も参考にしてください。

コメント

タイトルとURLをコピーしました