Firefox 派生の作り方|~最初で最後の Floorp 開発ブログ~

Firefox 派生の作り方|~最初で最後の Floorp 開発ブログ~

2022/06/22

お久しぶりです。とは言いつつ、ブラウザーのリリースノートは私が作成しているのでそうでもないのかもしれません。初対面だったら初めまして。

Twitter でイキって Firefox 派生らしいブラウザーも作れてない人が Firefox 派生の作り方みたいなものを出すといった結果、たくさんの反応を頂いてツイ消しできないレベルになってしまったので書きます。

前提

まず、覚悟は必要です。生半可な気持ちで作れるものじゃないので楽に作りたい人は Electron でやったほうが幸せになれます。本当です。
また、エラーの発生する確率がびっくりするほど高いので最初から挫折することは当たり前だと思っておくことも必要かもしれません。Chromium よりエラーは多い気がしますね。

また、機能更新と Firefox の追従を同時に進行することは至難の業です。自分でいうのもなんなんですが。仕様変更が多いんですね、、、死にます()
ESR はまあ、、、うん。楽っちゃ楽。

追記:書き終わった後に気づいたというか思い出したんだけど、Firefox のビルドエラーは本当のことを言わない場合があるので鵜呑みは厳禁。本当。公式のドキュメントも信頼できない場合あり。


最初にやること

んー、、、やっぱり、派生元のブラウザーを使わない手はないね。うん。
私は Firefox をデフォルトのブラウザーにしています。こうすることでどこを改造すればいいのか、どうすれば簡単に改造できるかが簡単にわかります。

まあ Chromium 使ってて Firefox 派生作ったら混乱しますね。私なら。といいつつ Vivaldi 使ってるのは秘密です。

あと、思想を理解するのも重要かも。Chromium 君の構造はなかなか雑なので僕は好きになれません。Chromium が起動中パスワードを開くとその後、パスワードがずっとメモリに平文保存はさすがにビビりました。雑で似非プライバシーとセキュリティー。

まあここまで来たらお気づきだと思うけど、Chromium でプライバシーやセキュリティーを名乗るのは構造上難しいって話。プライバシーに真剣な Firefox がどれだけすごいかわかる。Firefox 派生は正直自分のメンタルとの殺し合いなのでメンタル維持にはもってこい。(だと思ってる)

ソースコードのフォーク

git リポジトリにクローンするなりなんなりして、Firefox の環境を整えます。Firefox 公式が紹介しているものをそのまま書くのはつまらないので、フォークのやり方を書きます。

まず、公式がホストしているリポジトリは二つあります。それは、Mercurial リポジトリの https://hg.mozilla.org/mozilla-unifiedと、https://github.com/mozizlla/gecko-dev があります。正確には、Gecko-dev はMozilla が運営する読み取り専用のミラーなので不完全です。一部のブランチがなかったりします。逆に、Mercurial リポジトリは Firefox の運営に使われるリポジトリなのですべてのブランチを見ることができます。

GitHubのリポジトリのほうがフォークは簡単なので魅力的ですが、なぜかブランチが追加されないことがあるので、今回はMercurial リポジトリをGit Cinnabar で変換してフォークする方法を書こうと思います。

(Firefox ESR102 は追加される見込み無し。いつなんでしょうか)

上のURLから、リポジトリをクローンします。そしてパスを通しておきます。Windows だったら環境設定のことですね。リポジトリをパスに通すだけなので難しくないです。

通したら、Mercurial リポジトリをGit でクローン出来ます。ただし違いがあるので注意。

通常、Git リポジトリをクローンする場合、git clone https://github.com/mozilla/gecko-dev で可能ですが、Mercurial リポジトリの場合、git clone hg://hg.mozilla.org/mozilla-unified になります。

歴史が長すぎてクローンにはかなりの時間がかかります。待ちましょう。

クローンが終わったら、GitHub リポジトリに上げないならこのままソースコードを読みましょう。ここでは、GitHub にフォークを作成する方法を教えます。

リポジトリのサイズは5GBぐらいあるのでGitHub の制限で一度にプッシュは不可能です。
というわけで、git reset などを使ってリポジトリを過去に戻すことでサイズを減らします。私は5回にわけてプッシュしました。これでフォークはできますね。見本としては、https://github.com/Floorp-Projects/Floorp/tree/esr102 がこの成果物です。はい。

ブランチ追加がこなさ過ぎてキレそうになったのは秘密です。

Firefox のソースコードを「軽く」理解する・Tips みたいなやつ

フォークができたのでここからはお楽しみの時間です。(地獄かも)

Firefox のソースコードは大きいので全部解読するのは無理です。というわけで必要な場所のみを調べるべきです。改造のやり方まで書くとブログが大変なことになるので参考程度に軽く。

Firefox のディレクトリ構造はここで説明されています。Floorp のソースコードと比較するとわかりやすいかもしれません。

組み込みのアドオンは改造にかなりおすすめです。アドオンでもAPIを使えばかなりの改造が可能なので。(Floorp のバージョン8のアップデートシステムはアドオンによって実装されています)

これも詳しくは Floorp のソースコードを確認したほうが早い気がします。

公式ドキュメントに書いてあると思うけど、browser\extensionsがそのディレクトリです。入れるだけなのでかなり簡単。改変するならここをお勧めします。

WebDINO JAPAN様の amethyst はちょっとわからない部分がありました。凄すぎてビビります。はい。

最後に

その他の情報はまあだいたいの場合、公式ドキュメントにあります。はい。難しいですけど一度チャレンジするのもありじゃないでしょうか?
まあ API とかの詳しい解説は書くと時間かかるので省いてますが、気になる方は Floorp のソースコード見ればわかると思います。

あと、Floorp 開発者はいつでも募集していますので是非。なってくれればめちゃくちゃ細かいことまで教えますので是非興味があればダイレクトメッセージをよこしてください。