この記事は2023年度の東京大学工学部電気電子工学科・電子情報工学科 3 年後期実験「大規模ソフトウェアを手探る」のレポートとして作成されました。
オープンソースで開発されているブラウザです。2023年10月時点で、日本ではChrome、Safari、Edgeに次いで利用者が多いようです(https://gs.statcounter.com/browser-market-share/all/japan を参照)。
ソースコードは https://hg.mozilla.org/ にあります。コードを眺めたところ、主にC++でコア部分が、JavaScriptで描画部分が実装されているようです。以下では主にJavaScriptで書かれた部分について扱いました。
公式ドキュメントに沿って、以下のコマンドを実行しました。
初回のビルド時はおよそ1時間程度かかりますが、一度実行した後は数秒でビルドがおわるようになります。
https://firefox-source-docs.mozilla.org/setup/linux_build.html
python3 -m pip install --user mercurial
curl <https://hg.mozilla.org/mozilla-central/raw-file/default/python/mozboot/bin/bootstrap.py> -O
python3 bootstrap.py
cd mozilla-unified
hg up -C central
./mach build
./mach run
mercurial not found
というエラーが出たため、 sudo snap install mercurial
でインストールして解決しました。./mach build
時、unzip not found
というエラーが出たため、unset UNZIP
というコマンドで解決しました。
unzip
コマンドが環境変数UNZIP
で参照するバイナリが、ビルドで要求されるものと異なるために起こるエラーと思われます。(参考:https://bugzilla.mozilla.org/show_bug.cgi?id=1760246)デバッガーはBrowser ToolBoxにしました。Browser ToolboxはFirefoxに標準で備わっているデバッガーです。開き方は以下のようになります。
vscodeのようにファイル内、フォルダ内検索もできます。気になるワードで検索してブレークポイントを設置することでその関数が目的の動作と関係があるかどうかがわかります。下にブレークしたときの画像を貼りました。右下にcall stackがありブレークするまでにどの関数を巡ってきたかがわかるようになっていて、これを見ながら目的の動作を達成するためにどのコードを変えればよいかを考えました。