Join MDN and developers like you at Mozilla's View Source conference, 12-14 September in Berlin, Germany. Learn more at https://viewsourceconf.org

Mozilla ソースコードのディレクトリ構造

Mozilla ファミリ(FirefoxThunderbirdその他)に関係するすべてのプロジェクトにおいては、ソースコードがひとつのソースツリーにまとめられています。ツリーにはソースコードのみならず、サポートしているプラットフォーム(Linux や Windows、OS X など)で各プロジェクトをビルドするのに必要なコードも含まれています。どのディレクトリにどのファイルが含まれているのか、この記事で概要を説明します。

Mozilla のソースコードを確認するには、コードをダウンロードせずともブラウザで直接閲覧することができます。ブラウザで DXR(https://dxr.mozilla.org/mozilla-central/source/)にアクセスすると、Mozilla 全体にわたって最新版のソースコードを確認できます。

コードを修正したい場合は、 ソースのスナップショットをダウンロードするか、現在のソースを Mercurial からチェックアウトしてください。

このドキュメントでは、client.mk でプルすることができるディレクトリ構造を説明します。すなわち、Mozilla プロジェクトにおいて何かしらのクライアント製品が利用しているディレクトリです。Mozilla の CVS レポジトリにも他のディレクトリがありますが、Web tools や以前のコードベースに関係するソースコードが管理されています。

情報は古いですが、同じ内容について少し異なるドキュメントを参照したい場合は、ソースコードディレクトリ構造の概要を参考にしてください。また、 Gecko の構成要素に関する詳しい概要も合わせて参照してください。

accessible

アクセシビリティに関係するファイル(MSAA(Microsoft Active Accessibility)や、ATK(GTK+2 が利用する Accessibility Toolkit)がサポートするファイル)が含まれています。 Accessibility も参照してください。

addon-sdk

標準の Web 技術で Firefox アドオンを作成するための Add-on SDK に関係したコードが含まれています。

b2g

Boot2Gecko プロジェクトにおける FirefoxOS のビルドに必要なソースコードが含まれています。

browser

Firefox ブラウザのフロントエンドにあたるコード(言語は XUL や JavaScript、XBL、C++)が含まれています。これらのファイルの多くは、xpfe/ からコピーしてきたファイルに由来しています。

browser/devtools

 開発ツール(Scratchpad や Style Editor など)のフロントエンドにあたるコードが含まれています。toolkit/devtools も参照してください。

browser/extensions

ビルトイン拡張の PDF.jsShumway に関するコードが含まれています。

browser/themes

それぞれの OS(Linux や Mac、Windows)に合わせたブラウザのスキンを構成する、画像や CSS ファイルが含まれています。

build

ビルドプロセスに用いる様々なファイルが含まれています。config/ も参照してください。

caps

Capability に基づく Web ページのセキュリティマネジメントを担当するコードが含まれています。コンテンツの Capability はセキュリティ設定や証明書(VeriSign など)に基づいて決定されますが、これに必要な C++ のインターフェイスとコードが管理されています。詳しくは Component Security を参照してください。

chrome

toolkit/ と一緒に chrome を構成するコードのレジストリです。これらのファイルは rdf/chrome/ からコピーしてきたファイルに由来しています。

config

Makefile その他が参照する共通インクルードファイルなど、ビルドプロセスに必要なファイルが多く含まれています。build/ も参照してください。

content

Web ページ(HTML、SVG、XML ドキュメント、要素、テキストノード、その他)の構造を表現するデータ構造に関係したコードが含まれています。データ構造のオブジェクトには DOM インターフェイスの実装が数多く含まれている上、オブジェクトに関連する動作(リンクの処理やフォームコントロールの動作、フォームの送信など)も同時に実装されています。

このディレクトリには、XULXBLXTF<canvas>、XSLT、そしてエラーハンドリングを実装したコードも含まれています。

db

データベースにアクセスするモジュール群を含んだコンテナです。

db/sqlite3

Storage が利用する SQLite データベースです。

docshell

ドキュメントウィンドウ周辺を管理する主要なオブジェクト docshell を実装したコードが含まれています。各フレームは自分自身の docshell を持っています。docshell に含まれるメソッドには、URI の読み込みや URI コンテンツリスナの管理などを行うものがあります。アプリケーションに組み込んだ Gecko の API に関して、最も外側のレイヤーを docshell は担当します。webshell/ も参照してください。

dom

  • DOM 仕様書で定義されたインターフェイスの IDL 定義 や、そのインターフェイスに対する Mozilla 拡張のコードが含まれています(インターフェイスの実装は主にこのディレクトリで管理されていますが、一部は content/ にもあります)。
  • JavaScript と DOM の両方に特化された DOM オブジェクトと、JavaScript との間を連携する部分のコードが含まれています(この部分は DOM に特化していません。例えば、XPCOM と JavaScript の間を包括的に橋渡しする部分は js/xpconnect/ にあります)。
  • windowwindow.navigatorwindow.location などの "DOM Level 0" オブジェクトのコア部分に関する実装が少し含まれています。

editor

editor ディレクトリには、HTML Editor(Composer)やメール(plain または HTML)の文章作成、プロダクト全体におけるテキストフィールドやテキストエリアが利用する、埋め込み型エディタのコンポーネントに対する C++ のインターフェイスや C++、XUL、JavaScript のコードが含まれています。editor は「エディタ機能を持ったブラウザウィンドウ」となるよう設計されています。すなわち、テキスト処理やアンドゥ・リドゥのためのクラスが追加されているだけで、他の大半の部分はブラウザのコードを再利用しています。

このディレクトリには次のコードが含まれています。

  • HTML とテキストの処理におけるバックエンドのコード。このコードはメールやページの作成のみならず、Web ページ内でリッチテキストを作成する 際にも利用されています。(プレインテキストの変形として)テキストエリアや入力フィールドにも利用されています。詳しくは Mozilla Editor を参照してください。
  • SeaMonkey に組み込まれている HTML エディタのフロントエンドのコード。

embedding

このディレクトリには、Gecko をアプリケーションへ組み込む際に必要となる IDL やヘッダファイル、サポートファイルが含まれています。

Embedding Mozilla も合わせて参照してください。

extensions

Mozilla 用の拡張がいくつか含まれています。これらはコンパイル時の引数として  --enable-extensions オプションを与えると有効になります。

ただし、拡張機能の中には --enable-extensions オプションを付けなくても有効になっているものもあります。例として、xmlextras を無効にするには --disable-xmlextras オプションが必要になります。

extensions/auth

HTTP や他のプロトコルに関して、認証機能を追加してネゴシエーションをするメソッド(SSPI や GSSAPI など)が実装されています。詳しくは Integrated Authentication を参照してください。

extensions/content-packs

ユーザインターフェイスを切り替えるための content-pack と locale-pack が含まれています。

extensions/cookie

Cookie や画像ファイルなどの権限管理を行うバックエンドのコードや、権限管理と他の Cookie に関する機能へのインターフェイスが含まれています。

extensions/cview

その時点で登録されているコンポーネントとインターフェイスを確認する、Component viewer に関するコードが含まれています。

extensions/datetime

datetime プロトコルをサポートするコードが含まれています。

extensions/finger

finger プロトコルをサポートするコードが含まれています。

extensions/gnomevfs

Mozilla 内部の gnome-vfs でサポートされているプロトコルを利用する、gnome-vfs へのインターフェイスが含まれています。

extensions/help

Help Viewer のコードとヘルプのコンテンツが含まれています。詳しくは Mozilla Help Viewer Project を参照してください。

extensions/irc

IRC(Internet Relay Chat)の ChatZilla に関するコードが含まれています。詳しくは ChatZilla を参照してください。

extensions/java

XPCOM と Java をブリッジする JavaXPCOM(以前は Javaconnect)に関するコードが含まれています。java/ ディレクトリ内のコードとは無関係です。

extensions/layout-debug

"viewer.exe" に代わるものとして作られた Layout debugger のコードが含まれています。レイアウトのリグレッションテストや、レイアウトをデバッグを行うことができます。

extensions/lightning

強固に統合されたカレンダー機能(スケジュール管理や Todo 機能)を Thunderbird に組み込む拡張機能の、Lightning プロジェクトに関係するコードが含まれています。詳しくは Lightning を参照してください。

extensions/mono

CLR/.NET/Mono/C# などの領域と XPCOM をブリッジするコードが含まれています。

extensions/p3p

W3C 規格の Platform for Privacy Preferences を実装したコードが含まれています。詳しくは Platform for Privacy Preferences (P3P) を参照してください。

extensions/pref

設定項目に関する拡張機能が含まれています。

extensions/python

Python による XPCOM の実装をサポートするためのコードが含まれています。詳しくは PyXPCOM を参照してください。

extensions/reporter

Web ページに関する問題点を報告するクライアントサイドの拡張機能が含まれています。 詳しくは Mozilla Reporter を参照してください。

extension/schema-validation

明示された XML スキーマに従って XML ツリーをバリデーションするコードが含まれています。

extension/spatialnavigation

画面上での位置に従ってドキュメントのリンク間をナビゲーションする Spatial navigation のコードが含まれています。詳しくは Spatial Navigation を参照してください。

extensions/spellcheck

MailNews や Composer で利用するスペルチェッカーのコードが含まれています。

extensions/sql

XUL アプリケーションから SQL データベースにアクセスするためのコードが含まれています。詳しくは Mozilla における SQL サポート を参照してください。

extensions/sroaming

リモートサーバ上でプロファイルを保存するような、セッションローミングに関するコードが含まれています。

extensions/transformiix

XSLT をサポートするためのコードが含まれています。XSL Transformations とは、XML ドキュメントを別の XML ドキュメントへ変換する言語です。詳しくは XSL Transformations を参照してください。

extensions/tridentprofile

MSIE からプロファイルをインポートするためのコードが含まれています。

extensions/typeaheadfind

表示されているページ上でタイプされた文字列によって Web ページを素早くナビゲーションする、Find As You Type のコードが含まれています。詳しくは Find As You Type を参照してください。

extensions/universalchardet

多言語のキャラクタセットを判別するコードが含まれています。

extensions/venkman

JavaScript Debugger に関するコードが含まれています。

extensions/wallet

パスワードと入力フォームを管理するコードが含まれています。

extensions/webdav

WebDAV サーバにアクセスするための API が含まれています。これらは Calendar プロジェクトで利用されています。

extensions/webservices

Webservices をサポートするためのコードが含まれています。詳しくは Web Services を参照してください。

extensions/xforms

XForms 拡張のコードが含まれています。詳しくは XForms を参照してください。

extensions/xmlextras

XML 関連の拡張機能が含まれています。詳しくは XML Extras を参照してください。

extensions/xml-rpc

XML Remote Procedure Calls のコードが含まれています。 最近では XML-RPC の商標を所有している団体はいません。詳しくは XML-RPC in Mozilla を参照してください。

extensions/xmlterm

Mozilla の技術で実装されたターミナルの XMLTerm に関するコードが含まれています。GTK でビルドした場合のみ利用可能です。

gfx

特定のグラフィックスツールキット向けのプラットフォームで利用可能な機能を、様々なプラットフォームにおける実装によって抽象化したインターフェイスが含まれています。このインターフェイスでは、画像やテキスト、基本的な図形の描画などを行うメソッドが提供されています。 また、点や長方形などといった基本的なデータ構造も含まれており、他の Mozilla 製品からも利用されています。

(C++ ラッパの thebes を経由した)cairo による新しいグラフィックスのアーキテクチャの基盤にもなっています。詳しくは NewGFXAPIsGFXEvolution を参照してください。

hal

Windows 上でバッテリ残量を取得するような、特定の機能に向けたプラットフォームが含まれています。

image

Mozilla がサポートしている画像フォーマットのデコーダなど、画像をレンダリングするライブラリが含まれています。

intl

多言語で利用可能にするためのコードが含まれています。詳しくは L10n:NewProjects を参照してください。

intl/chardet

Web ページの文字エンコーディングを「スニッフィング」するコードが含まれています。

intl/ctl

南アジアの言語の体裁に関連する Complex Text Layout を処理するコードが含まれています(デフォルトではビルドされないため、有効にするには --enable-ctl オプションが必要です)。

intl/locale

実行環境からロケールの情報を判断するためのコードが含まれています。

intl/lwbrk

行や単語の改行に関連したコードが含まれています。

intl/strres

ローカライゼーションに利用する文字列のリソースに関するコードが含まれています。

intl/uconv

UTF-16 と他の多くの文字エンコーディングとを変換(エンコードとデコード)するためのコードが含まれています。

intl/unicharutil

大文字・小文字を変換するような、Unicode のテキストに関する様々なアルゴリズムの実装が含まれています。

ipc

IPC(Inter-Process Communication)の実装におけるコンテナとなっています。

js

js/src

JavaScript エンジンの SpiderMonkey に関するコードが含まれています。JavaScript も合わせて参照してください。

js/jsd

JavaScript をデバッグするためのライブラリが含まれています。詳しくは JavaScript Debugging を参照してください。

js/xpconnect

XPCOM のインターフェイスを介して、C++ と JavaScript が互いに他方を呼び出すためのコードが含まれています。詳しくは XPConnect を参照してください。

layout

画面にレンダリングするオブジェクト(CSS や XUL のボックス、テーブル、フォームコントロールなど)の型や位置を表現するツリーの実装や、レンダリングツリーに関する処理(ツリーの作成、削除、配置、描画、イベントハンドリングなど)を管理するコードが含まれています。詳しくは documentation他の情報 を参照してください。

layout/base

ツリーのレンダリングを処理するコードが含まれています。

layout/generic

基本的なレンダリングオブジェクトのインターフェイスや、CSS ボックス用のレンダリングツリーオブジェクトが含まれています。

layout/forms

HTML のフォームコントロール用のレンダリングツリーオブジェクトが含まれています。

layout/tables

CSS/HTML のテーブル用のレンダリングツリーオブジェクトが含まれています。

layout/mathml

MathML 用のレンダリングツリーオブジェクトが含まれています。

layout/svg

SVG 用のレンダリングツリーオブジェクトが含まれています。

layout/xul

XUL 用のレンダリングオブジェクトのインターフェイスや、XUL ボックス用のレンダリングツリーオブジェクトが含まれています。

media

libpng といったメディアライブラリに関するコードが含まれています。

memory

クロスプラットフォームで memallocs 機能などを利用するためのラッパが含まれています。

mfbt

マルチプラットフォームで assertions などを利用するための、WeakPtr といったクラスを実装したコードが含まれています。

modules

modules/libjar

zip ファイルを読み込むコードが含まれています。Mozilla のフロントエンドのファイルが入った .jar ファイルを読み込む際に利用されます。

modules/libpref

設定項目を読み書きするためのライブラリが含まれています。

modules/zlib

ネットワーク上の通信を圧縮する際に zlib を使うためのライブラリが含まれています。

mozglue

Android 用の動的リンカや Windows 用の DLL ブロックリストなど、様々な低レベルの機能を備えた Glue ライブラリが含まれています。

netwerk

Necko と呼ばれている ネットワークライブラリ です。URI や関連する処理に加え、サーバに対する実際の通信を担当します。

nsprpub

Netscape Portable Runtime に関するコードが含まれています。スレッドやファイル I/O、ソケット I/O などに対する抽象レイヤとして利用されます。詳しくは Netscape Portable Runtime を参照してください。

nsprpub/lib

ほとんど使われていません。Mac で利用されているかもしれません。

other-licenses

Mozilla のコードからいくつか利用されているけれども、MPL ではカバーしきれていないライブラリが含まれています。

parser

XML/HTML のファイルをパースするのに必要な構造体や機能が含まれています。

parser/expat

Mozilla が XML をパースするのに利用する、expat のソースコードのコピーです。

parser/html

HTML パーサ(about:blank を除く)のコードが含まれています。

parser/xml

expat を(parser/expat から)Gecko に統合するためのコードが含まれています。

parser/htmlparser

レガシーな HTML パーサのコードが含まれており、about:blank には今でも利用されています。一部のコードは、XML のパースにおいてネットワークのバイトストリームを Unicode へ変換する際にも利用されています。

probes

XXX 説明が必要です

profile

プロファイルマネージャのバックエンドとフロントエンドのコードが含まれています。

python

python/mach

ビルドツールの Mach に関するコードが含まれています。

rdf

RDF を処理するための API が含まれています。詳しくは RDFResource Description Framework (RDF) を参照してください。 このディレクトリには、SeaMonkey が利用する chrome レジストリのコードも含まれています。なお、ツールキットのアプリケーション(Firefox や Thunderbird など)は chrome/ に fork されたコピーを使用しています。

security

Mozilla における暗号機能(S/MIME や SSL など)をサポートするため、NSS と PSM に関するコードが含まれています。詳しくは Network Security Services (NSS)Personal Security Manager (PSM) を参照してください。

services

XXX 説明が必要です

startupcache

XXX 説明が必要です

storage

SQLite 用の XPCOM ラッパ Storage に関するコードが含まれています。mork に取って代わり、プロファイルに関するすべてのデータをストレージに集約することを目指しています。詳しくは Unified Storage を参照してください。

testing

Mozilla のプロジェクト向けの共通なテストツールが含まれています。自動テストのための定義セットや、他のディレクトリには属さないテストコード、他にも面白いものが含まれています。

toolkit

Thunderbird や Firefox などが利用する「新しいツールキット」が含まれています。このディレクトリには、アプリケーション間で共有されるフロントエンドのコンポーネントが数多く含まれており、XBL で実装された XUL 言語の大部分も含まれています(これに関しては、xpfe/ から fork してきたコピーにほぼ由来しています)。

toolkit/mozapps/extensions/test/xpinstall

Mozilla や XPIs/extensions のインストールに必要なインストーラが含まれています。このディレクトリには、インストーラのパッケージをビルドするのに必要なコードも含まれています。詳しくは XPInstall を参照してください。

tools

Mozilla のビルドプロセスにおいて、オプションとしてビルドされるツールがいくつか含まれています。これらはデバッグのために利用されることがほとんどです。

uriloader

XXX 説明が必要です

uriloader/base

Mozilla がコンテンツをディスパッチするコードが含まれています。URI をロードし、データに対して適切なコンテンツリスナを決定するために利用されます。Web の進捗状況を通知する際にも利用されています。詳しくは  Document Loading - From Load Start to Finding a HandlerThe life of an HTML HTTP request を参照してください。

uriloader/exthandler

Mozila が処理できないコンテンツを扱う際に利用するコードが含まれています。ヘルプアプリケーションのダイアログを表示し、ヘルプの情報を検索するために利用されています。

uriloader/prefetch

ドキュメントをキャッシュして読み込みを高速化するために、ドキュメントをプリフェッチするためのコードが含まれています。

view

View manager に関連して、描画やスクロール、イベントハンドリング、z-index の順番、opacity の処理をクロスプラットフォームで行うためのコードが含まれています。徐々に廃止されることになります。

webapprt

XXX 説明が必要です

widget

OS や実行環境依存のウィジェットを扱うため、各プラットフォームにおける実装を備えたクロスプラットフォームの API です。一例として、ウィンドウやポップアップ、他のネイティブなウィジェットを作成したり管理するコードが含まれています。他にも、描画やイベントに関するシステムのメッセージを Mozilla 用のメッセージに変換するコードも含まれています(view/ と content/ がこれを担当しています。後者は、多くのメッセージをさらに別の DOM イベント API 向けに変換しています)。

xpcom

Cross-Platform Component Object Model に関するコードや、他の Mozilla のコードから利用されるデータ構造などが含まれています。

xpfe

SeaMonkey のフロントエンドである XPFE(Cross Platform Front End)のコードが含まれています。このディレクトリでは、ブラウザのインターフェイス用の XUL ファイルや、他の Mozilla 製品から利用される共通ファイル、XBL で実装された XUL 言語のための XBL ファイルが管理されています。これらのコードの多くは、Firefox や Thunderbird などで利用するために browser/ やtoolkit/ にコピーされています。

xpfe/components

Mozilla のフロントエンドに利用されるコンポーネントや、他の Mozilla 製品がアクセスするインターフェイスの実装が含まれています。

xulrunner

XULRunner に関するコードが含まれています。XULRunner も合わせて参照してください。

ドキュメントのタグと貢献者

 このページの貢献者: hashedhyphen, mantaroh, Mgjbot
 最終更新者: hashedhyphen,