Chromium — Google Chrome の心臓部。現代 Web を支えるオープンソースブラウザエンジンの全貌

タグ columnコラムlinuxLinuxwindowsWindowsmacGitHubオープンソースchromium

Chromium — Google Chrome の心臓部。現代 Web を支えるオープンソースブラウザエンジンの全貌

ひとことでいうと

Chromium は、Google Chrome の土台となるオープンソースのウェブブラウザプロジェクトです。 Google が主導しており、世界中の開発者が参加する非常に大規模な C++ プロジェクトです。 HTML を画面に表示する処理(Blink エンジン)、JavaScript を動かす処理(V8 エンジン)、インターネット通信の処理(Chromium Net)などをひとまとめにしています。 Microsoft Edge・Opera・Brave・Vivaldi など、現在よく使われている主要ブラウザのほぼすべてが Chromium を土台にしています。 VS Code や Slack などのデスクトップアプリを動かす仕組みも、Chromium の技術から生まれています。 「現代の Web はほとんど Chromium でできている」といっても過言ではないほど、Web の世界に広く浸透しているプロジェクトです。


こんな人におすすめ

1. Web 技術をソースコードから学びたいエンジニア

HTML や CSS がどうやって画面に描かれるのか、JavaScript がどんな仕組みで動くのか——その答えは Chromium のコードの中にあります。 W3C・IETF などが定めた Web 標準の「お手本実装」にもなっているため、仕様書と実際のコードを見比べながら深く学べます。 Web の動作原理を一次ソースで確かめたい人に、これ以上ない教材です。

2. セキュリティの研究者や学習者

ブラウザのサンドボックス(悪意あるコードを閉じ込める仕組み)、Same-Origin Policy(異なるサイトのデータを守るルール)、Content Security Policy の内部実装が読めます。 公開された CVE(セキュリティ脆弱性の番号)のパッチを Chromium のコードで追跡することで、実際の脆弱性の原因と修正方法を体系的に学べます。

3. Electron アプリや組み込みブラウザを作っている開発者

VS Code や Slack のような「Web 技術で作られたデスクトップアプリ」は Electron を使っており、その中身は Chromium です。 Chromium のプロセス構造や通信の仕組みを理解すると、アプリのメモリ使用量や動作の重さを根本から診断できるようになります。 CEF(Chromium Embedded Framework)を使って独自のブラウザ機能を組み込む際にも、直接役立つ知識が得られます。


インストール・使い方

Chromium のビルドは非常に大規模です。 専用のツール depot_tools(デポツールズ)と gclient(ジーシクライアント)を使ってソースを取得する、専用の手順が必要です。 以下は Linux 環境での基本的な手順です。

Step 1: depot_tools を手に入れる

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
export PATH="$PATH:/path/to/depot_tools"

depot_tools は Chromium 専用のビルド補助ツール一式です。 これをパソコンに用意することで、次の手順で使う fetchgclient などのコマンドが使えるようになります。 「ターミナル」とはパソコンに文字で命令を送る画面のことで、上のコマンドはコピー&ペーストで実行できます。

Step 2: ソースコードを取得する

mkdir chromium && cd chromium
fetch --nohooks chromium
cd src
gclient runhooks

fetch コマンドが Chromium のソースコード一式をダウンロードします。 ソースの取得には 30〜60 GB 以上のディスク容量と高速な回線が必要です。 GitHub に公開されているミラー(コピー)は参照用であり、単純な git clone では完全なビルドには使えません。 Chromium は DEPS というファイルと gclient を組み合わせて依存コンポーネントを管理しているためです。

Step 3: ビルド設定と実行

gn gen out/Default
autoninja -C out/Default chrome

gn(ジーエヌ、Generate Ninja の略)はビルドの設定ファイルを作るツールです。 autoninja は CPU のコア数を自動で調整しながら、並行して処理を進めるビルドの実行コマンドです。 フルビルド(すべてをゼロからコンパイルすること)には、マシンの性能によって 4〜8 時間以上かかることがあります。

推奨スペック(Linux の場合)

項目推奨値
CPU8 コア以上
RAM(メモリ)16 GB 以上(32 GB 推奨)
ディスクSSD 100 GB 以上
OSUbuntu 20.04 / 22.04 LTS

デモについて

Chromium はフルブラウザエンジンを含む巨大な C++ プロジェクトであり、ビルドだけで数時間・100 GB 超のストレージを要します。 そのため、ブラウザ上の軽量デモとして動かして見せることは技術的に難しい状況です。

すぐに試したい場合は、次の 2 つの方法がおすすめです。

  • ビルド済みバイナリをダウンロードする: chromium.org の公式ページからすでにビルド済みの Chromium を入手できます。自分でビルドしなくても、最新の Chromium ブラウザをすぐに起動できます。
  • コードをブラウザで読む: cs.chromium.org では、環境構築なしにソースコード全体を検索・閲覧できます。関数やクラスのクロスリファレンス(参照元をたどる機能)も使えるため、コードリーディングの入り口として最適です。

動かしてみた

今回は、Chromium の公式情報と公開されているインフラを確認しました。

GitHub 上のリポジトリには「The official GitHub mirror of the Chromium source」と明記されており、コードの参照・閲覧目的のミラーであることがわかります。 実際のビルドは chromium.googlesource.com から depot_tools 経由で取得する手順が公式に案内されており、Linux・macOS・Windows それぞれのプラットフォーム向けにドキュメントが整備されています。

継続的インテグレーション(コードを変更するたびに自動でテストを実行する仕組み)のインフラは builders.chromium.org で公開されており、Chromium のコードが常時テストされていることを確認できます。 コード検索ツールの cs.chromium.org も正常に利用可能で、全ソースコードをブラウザ上でクロスリファレンス付きで読み進められます。

試す前に知っておくとよいこと

  • ソースの完全取得には 30〜60 GB のディスク容量が必要です
  • フルビルドには SSD 100 GB 以上・RAM 16 GB 以上を用意すると安心です
  • Ubuntu 20.04 / 22.04 LTS が公式にサポートされており、最もトラブルが少ない環境です
  • コードを読むだけであれば、cs.chromium.org を使えばビルド環境は一切不要です

実践のコツ:小さく始めて深く読む

Chromium のコードベースはとても大きいため、最初から全体を把握しようとすると圧倒されてしまいます。 次のポイントを意識すると、無理なく読み進められます。

  • base/ ディレクトリから始める: 文字列操作・ファイル操作・タイマーなど、汎用ユーティリティが集まっています。C++ の基礎力があれば読み始めやすい場所です。
  • net/ ディレクトリで HTTP を学ぶ: HTTP トランザクションの管理・QUIC(クイック)・TLS(暗号通信)の実装が入っています。ネットワーク処理を実例で追いたい人に最適です。
  • cs.chromium.org のクロスリファレンスを使う: 関数名や変数名をクリックするだけで、定義元・参照元を一瞬でたどれます。ローカルに環境を作らなくてもコードリーディングができます。
  • 気になる CVE(セキュリティ修正)からコードを追う: crbug.com(クロミウムのバグトラッカー)でバグ番号を調べ、対応するパッチを Chromium のコミットで探すと、実際の修正コードを読めます。
  • Google C++ Style Guide を手元に置く: Chromium はこのガイドに従っているため、読めない書き方があっても Style Guide を参照すれば意味がわかります。

活用例

  • 独自ブラウザの開発: Chromium をフォークして、独自の UI やセキュリティポリシーを持つブラウザを作れます。Brave や Vivaldi のように、プライバシー強化や企業向けの機能制限を組み込んだ製品を開発できます。

  • CEF を使ったデスクトップアプリへの組み込み: ゲームのオーバーレイ表示、社内向け業務ツール、キオスク端末(専用操作端末)など、ネイティブのデスクトップアプリに Web 画面を埋め込む用途に使えます。Electron より細かい制御が必要な場面で特に威力を発揮します。

  • Web 標準の仕様バグの発見と報告: HTML や CSS の仕様書と Chromium の実装を照らし合わせることで、仕様との乖離(ズレ)や実装漏れを発見できます。発見した問題は crbug.com から報告でき、Web 標準の改善に直接貢献できます。

  • セキュリティ研究・CVE の学習: 公開されたセキュリティパッチのコミットを読むことで、実際の脆弱性がどんなコードから生まれ、どう修正されたかを学べます。ブラウザのサンドボックス・IPC(プロセス間通信)の設計を理解したい研究者にとって最高の素材です。

  • 大規模 C++ プロジェクトの設計学習: 数百万行規模の C++ コードベースがどう整理されているかを学べます。Google C++ Style Guide・Ninja ビルドシステム・テスト設計など、大規模開発のベストプラクティスを実際のコードで確認できます。

  • Node.js・Deno などのエコシステム理解: V8 エンジンは Chromium の一部であり、Node.js や Deno の中核でもあります。V8 のソースを読むことで、JavaScript のメモリ管理・JIT コンパイル(実行時に機械語に変換する最適化)の動作を深く理解できます。


用語とポイント解説

Blink(ブリンク) Chromium に組み込まれた HTML・CSS のレンダリングエンジン(表示処理機構)です。 かんたんに言うと「HTML のコードを受け取って、画面に表示できる形に変換するエンジン」です。 もともと Apple の WebKit から分岐して 2013 年に誕生しました。 Safari の WebKit と同じ祖先を持ちながら、現在は独自の進化を続けています。

V8(ブイエイト) Google が開発した JavaScript・WebAssembly の実行エンジンです。 かんたんに言うと「JavaScript のコードを受け取って、コンピュータが直接理解できる命令に変換・実行する機械」です。 Chromium だけでなく、Node.js や Deno にも組み込まれており、サーバーサイドの JavaScript 実行環境の基盤にもなっています。 JIT コンパイル(実行しながらコードを最適化する技術)によって、高速な処理を実現しています。

Chromium Net(net/ ディレクトリ) HTTP・HTTPS・QUIC・TLS・DNS など、インターネット通信全般を担うネットワークスタック(通信処理の積み重ね)です。 かんたんに言うと「ブラウザがサーバーと通信するための処理を一手に引き受けるモジュール」です。 HTTP/3 の基盤技術である QUIC プロトコル(UDP を使った次世代通信規格)の実装もここに含まれます。

depot_tools(デポツールズ) Chromium プロジェクト専用のソース管理・ビルド補助ツール一式です。 かんたんに言うと「Chromium のソースを正しく取得・管理するための専用道具箱」です。 gclientgnautoninja など複数のツールが含まれており、Chromium のビルドにはこれらが必須です。

GN(ジーエヌ / Generate Ninja) Chromium が採用しているビルドシステムの設定ツールです。 かんたんに言うと「どのファイルをどの順番でコンパイルするかを指示書(Ninja ファイル)として書き出すツール」です。 CMake に似た役割を持ちますが、Chromium のような超大規模プロジェクト向けに高速化されています。

CEF(Chromium Embedded Framework / シーイーエフ) Chromium をほかのアプリに組み込むためのフレームワーク(仕組みの枠組み)です。 かんたんに言うと「Chromium ブラウザの機能をデスクトップアプリの部品として使えるようにするキット」です。 Electron が Node.js との統合に重点を置いているのに対し、CEF はより低レベルな制御が可能で、ゲームエンジンへの組み込みなどにも使われています。

サンドボックス(Sandbox) ブラウザが悪意あるコードの影響を最小限に抑えるための「隔離された実行環境」です。 かんたんに言うと「危険なコードが動いても、それがパソコン全体に被害を与えないよう閉じ込める仕組み」です。 Chromium はタブごと・レンダラープロセスごとにサンドボックスを設けており、プロセス分離によってセキュリティを高めています。

Same-Origin Policy(セイムオリジンポリシー) 異なるドメイン(サイト)のデータに勝手にアクセスできないようにするブラウザのセキュリティルールです。 かんたんに言うと「A サイトのページが、B サイトのデータをこっそり読み取れないようにする取り決め」です。 Chromium の net/ や Blink にこのルールの実装が含まれており、フィッシング・情報漏洩を防ぐ基礎として機能しています。

QUIC(クイック) Google が開発し、現在は IETF(国際標準化機構)が標準化した次世代の通信プロトコルです。 かんたんに言うと「従来の TCP より速く、途切れにくい通信を実現する新しいルール」です。 HTTP/3 の基盤として採用されており、Chromium Net に実装が含まれています。 モバイル回線など不安定な通信環境での接続品質の向上に貢献しています。


まとめ

Chromium は現代の Web の実質的なリファレンス実装(お手本となる実装)であり、そのコードを読むことはブラウザエンジン・セキュリティ・Web 標準の理解を深める最短経路のひとつです。 規模の大きさに圧倒されず、net/base/v8/ など特定のコンポーネントに絞って読み始めることが、現実的な入り口になります。 ビルドせずとも cs.chromium.org でコードリーディングを今日から始められるのも大きな魅力です。 ぜひ Web 技術の深掘り学習や、Electron・CEF を使ったアプリ開発の参考実装などに活用してみてはいかがでしょうか。