さとまたwiki

🌐 Minブラウザ作成大作戦

なぜブラウザは重いのか、どう作るか。歴史・構造・フォーク戦略を全部まとめた。

更新日: 2026年4月2日

😤
Chrome 2000MB
1タブだけでこれ
Chromium改造なし
ElectronのJSレイヤーだけ触る
MinフォークでYouTube
HTML5動画は普通に動く

😤 1タブで2000MB消費の地獄

タスクマネージャーを開いて、Chromeのプロセス一覧を見たことがある人なら分かる。YouTubeを1タブ開いているだけで、気づけば2000MB近くを消費している。さらに何も表示されていない新規タブを開くだけで100〜200MBが上乗せされ、拡張機能が1つ動けばまたそこに数十〜数百MBが加算される。

「ブラウザを閉じたらパソコンが速くなった」という体験は決して気のせいじゃない。現代のブラウザはOSの上で動くもう一つのOSと化していて、JavaScriptエンジン・レンダリングエンジン・ネットワークスタック・GPUプロセス・サービスワーカーが同時に走り続けている。ブラウジングという行為がそのままシステムリソースの全方位圧迫になっている。

Chromeのメモリ消費の内訳(YouTubeを1タブ開いた状態)

プロセス種別消費メモリの目安
ブラウザメインプロセス200〜400MB
レンダラー(タブ本体)500〜1200MB(JS・DOM・画像)
GPUプロセス100〜300MB
ネットワーク・サービスプロセス50〜150MB
拡張機能(1つあたり)30〜200MB

さとまたちゃんが感じた「なんかPCが重い」という感覚の正体はこれ。タブを10枚開けば平気で8〜12GBを食い潰す。メモリ16GBのマシンでChromeだけに半分以上を渡してしまうのは、どう考えても設計の問題だ。

🏗️ なぜブラウザはここまで重くなったのか

1990年代のブラウザは今と比べると驚くほどシンプルだった。HTMLを解析してテキストと画像を並べるだけのツールで、メモリ消費は数十MB程度だった。それが2026年現在、ギガバイト単位のメモリを要求するソフトウェアになった。この変化には明確な理由がある。

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

2008年9月、Googleはマルチプロセスアーキテクチャを採用したChromeを発表した。設計者はAdam Barthら。この設計の核心は「タブ・拡張機能・GPU・ネットワークを全て独立したOSプロセスとして分離する」というものだ。

それ以前のブラウザは1つのプロセスで全てを処理していたため、1つのタブがクラッシュするとブラウザ全体が落ちた。マルチプロセスにすることで安定性とセキュリティを劇的に向上させたが、代償として各プロセスが独自のメモリ空間を持つようになり、合計消費量が増大した。

V8 JITコンパイラとJavaScriptヒープ

ChromeのV8エンジンはJavaScriptをJIT(Just-In-Time)コンパイルによって最適化済みのマシンコードに変換する。このコンパイル済みコードはメモリ上に保持され続ける。JavaScriptヒープは1つのレンダラープロセスあたり最大1.4〜2GBまで拡張されうる。現代のWebアプリ(特にSPA)はJavaScriptを大量に走らせるため、このヒープがほぼ上限まで使われることも珍しくない。

V8エンジンの進化史

2008V8リリース(Chrome 1と同時)
2010Crankshaft — 最初の最適化コンパイラ導入
2016Ignition — インタープリタ層の追加でメモリ効率改善
2017TurboFan — 次世代最適化コンパイラに完全移行
2023Maglev — 中間層JITコンパイラ追加、さらなる高速化

サイト分離(Site Isolation)

2019年に標準化されたSite Isolationは、異なるオリジン(ドメイン)のコンテンツを絶対に同一プロセスに入れないという設計だ。Meltdown・Spectreというハードウェア脆弱性への対応として導入された。セキュリティ的には正しいが、サブフレームやiframeが多いページでは追加プロセスが大量に生成され、さらにメモリを消費する。

積極的キャッシュ戦略

「戻るボタンを押したら瞬時に前のページが表示される」という体験を実現するために、ChromeはDOMツリー・画像デコード済みデータ・スクロール位置などをRAMにそのまま保持し続ける。これはBack-Forward Cacheと呼ばれる機能で、ユーザー体験を優先した結果としてメモリ消費が増大している。

🌳 ブラウザエンジンの系譜

現代のブラウザエンジンは、1990年代後半から始まる複雑な分岐と統合の歴史を持っている。今動いているChromiumのBlinkも、Safariを動かすWebKitも、起点をたどると意外なところに行き着く。

💀 Trident → EdgeHTML 系(Microsoft)
1997: Trident(IE4〜IE11) 2015: EdgeHTML(Edge初代) 2019: 廃止 → Blinkへ移行

MicrosoftはEdgeをChromiumベースに刷新。Trident・EdgeHtmlは歴史の彼方へ。

🦊 Gecko 系(Mozilla)
1998: Gecko(Netscape由来) Mozilla / Firefox 2026: Firefox継続中

唯一Blink/WebKit系から完全独立して生き残るエンジン。Rustで書かれたServoを実験的に取り込み中。

🍎 KHTML → WebKit → Blink 系(最大勢力)
1998: KHTML(KDEプロジェクト・Konquerror用) 2001: AppleがフォークしてWebKit作成
↓ WebKitから
→ Safari / iOS全ブラウザ(WebKit継続)
2013: GoogleがフォークしてBlink作成 Chrome / Edge / Opera / Vivaldi / Brave / Electron

KHMLの開発は2023年終了。しかしその子孫Blinkが世界のブラウザシェアの7割以上を占める。

2026年時点で生き残るエンジンは3系統のみ

  • 🔵 Blink — Chrome・Edge・Opera・Vivaldi・Brave・Electron(世界シェア7割超)
  • 🍎 WebKit — Safari・iOS上の全ブラウザ(Appleの規制によりiOSはWebKitのみ)
  • 🦊 Gecko — Firefox(唯一の独立系)

⚙️ Chromiumとは何か

Chromiumは、GoogleがChromeブラウザのベースとして開発しているオープンソースのブラウザプロジェクトだ。2008年9月2日、ChromeのリリースとまったくDの日にオープンソース化された。当初の構成はWebKit(レンダリング)+V8(JavaScript)+ブラウザUI全体という組み合わせだった。

2013年の転換点として、GoogleはWebKitからBlinkをフォークした。理由はシンプルで「マルチプロセス設計に関わる大きな変更を、WebKitの共同管理者(Apple等)の合意なしには進められなくなったから」だ。以降ChromiumはBlinkを独自に進化させ、Appleも同様にWebKitを独自に発展させている。

Chromiumの目的

  • ✅ Webをプラットフォームとして成立させる
  • ✅ Google自身のWebサービスの最高実行環境を作る
  • ✅ オープンソース化でエコシステムを育てる
  • ✅ 他ブラウザベンダーが採用できる共通基盤を提供

ChromeとChromiumの違い

  • 🔵 Chrome = Chromium + Googleサービス統合 + Widevine(DRM)+ 自動更新
  • ⚪ Chromium = コアのみ。DRMなし・Googleアカウント統合なし
  • 📦 EdgeやBraveはChromiumベースで独自機能を追加したもの

ChromiumのソースコードはGitで管理されており、誰でもクローンできる。ただし全体のサイズは数十GBに達し、ビルドには高スペックなマシンと数時間の時間が必要だ。だからこそ、「Chromiumを直接改造する」のではなく、Chromiumのバイナリをそのまま使いながらJavaScriptレイヤーだけをカスタマイズするElectronという選択肢が生まれた。

⚡ Electronとは何か

Electronは、Node.jsとChromiumを組み合わせてデスクトップアプリを作るためのフレームワークだ。歴史を知ると、なぜこれが生まれたかがよく分かる。

Electronの誕生史

2013.07 GitHubのエンジニアCheng Zhao(@zcbenz)が「Atom Shell」として最初のコミット。既存のnode-webkitとCEFでは要件を満たせないため自前で構築開始。
2014.04 テキストエディタ「Atom」のパブリックベータ公開。Atom Shellの実証に成功。
2015 「Electron」に改名。GitHubの内部ツールとしての位置づけから汎用フレームワークへ。
2016 Electron v1.0リリース。安定版として広く使われ始める。
2019 OpenJS Foundationに移管。Googleでも企業でもなく、中立的な財団の管理下へ。
2023 初コミットから10周年。累計コミット27,147件、コントリビューター1,192人に成長。
2026 Electron 38(Chromium 140系・Node.js 22.16.0)。8週ごとにメジャーバージョンをリリース。

内部構造

Electronアプリはメインプロセス(Node.js)とレンダラープロセス(Chromium/Blink)の2層構造で動く。メインプロセスがウィンドウ管理・ファイルシステムアクセス・システムAPI等を担当し、レンダラープロセスがHTMLとJavaScriptでUIを描画する。各ElectronアプリはChromium・V8・Node.jsのバイナリを全て同梱するため、圧縮後でも80〜100MBのサイズになる。

有名なElectronアプリ

アプリ名カテゴリメモリ消費目安
VSCodeコードエディタ200〜600MB
Slackチャット1〜4GB(重い)
Discordゲーマー向けチャット1〜4GB(2024年に4GBメモリリーク報告)
Claude DesktopAIアシスタント130〜400MB
ChatGPT DesktopAIアシスタント200〜500MB
Notionメモ・ドキュメント300〜800MB
Obsidianノート130〜350MB(比較的軽量)
GitHub DesktopGitクライアント200〜400MB
Spotify音楽ストリーミング250〜700MB

見て分かる通り、Electronアプリは軽いものでも130〜250MB、SlackやDiscordのような重量級は1〜4GBに達する。「Electronは重い」という批判は正しいが、それでも「クロスプラットフォームデスクトップアプリをWebの知識だけで作れる」という圧倒的なメリットがあるから、大量のアプリが選び続けている。

🪟 Minブラウザとは何か

MinはElectronベースで作られたオープンソースのミニマリストブラウザだ。作者はGitHubユーザーPalmerAL。「最も必要な機能だけを、シンプルに」という設計思想で作られており、ChromeやFirefoxとは対極に位置する。最初の外部報告記事は2016年7月(OMG! Ubuntuでv1.6.0が確認)で、2026年3月時点でv1.35.4が最新版。総リリース数88以上、月1〜1.5回ペースで活発に開発が続いている。

内部アーキテクチャ

Minは内部でElectronの「BrowserView」を採用している。古いwebviewタグではなくBrowserViewを選んだ理由は明確で、BrowserViewの方が独立プロセスとしてより安定して動作するからだ。各タブは独立したBrowserViewインスタンスとして生成され、サンドボックス化されている。これにより1つのタブがクラッシュしてもブラウザ全体に影響が及びにくい設計になっている。

Minの主な機能

  • 🛡️ 組み込みAdBlocker(広告ブロック標準搭載)
  • 🎯 フォーカスモード(他のタブを非表示)
  • 📖 リーダーモード(記事を読みやすく整形)
  • 📁 タスク(タブグループ機能)
  • 🔍 スマート検索バー + ファジー検索
  • 📝 ユーザースクリプト対応(v1.8.0〜)
  • 🌙 ダークモード強制適用

Minの設計思想

  • 🪶 UIは極限までシンプルに(アドレスバー+タブのみ)
  • 🔒 プライバシーファースト(DuckDuckGoデフォルト)
  • 🚫 不要な機能は入れない
  • ⚡ Electronのレイヤーで動くため、Chromium自体は改造しない
  • 🌍 クロスプラットフォーム(Windows・Mac・Linux)

MinのコードベースはJavaScript(Node.js)とHTMLで書かれており、Chromiumのソースを1行も触っていない。Electronが提供するAPIを通じてウィンドウ・タブ・ネットワークを制御している。これがさとまたちゃんにとって重要で、「フォーク可能」かつ「Chromiumビルドの知識が不要」という点がMinを選ぶ最大の理由になる。

⚖️ ChromeとMinの違い

ChromeとMinを「ブラウザ」として並べて比較すると、用途や対象ユーザーが全く異なることが見えてくる。どちらが優れているかではなく、何をしたいかによって選択が変わる。

項目ChromeMin
拡張機能Chrome Web Store対応(数万本)非対応(ユーザースクリプトのみ)
DRM(Widevine)✅ 標準対応(Netflix等OK)❌ 標準版は非対応(Netflix不可)
YouTube再生✅ 問題なし✅ 問題なし(HTML5動画)
UIフルUI(ツールバー・ブックマーク・設定等)最小限(アドレスバー+タブのみ)
アカウント同期Googleアカウント対応なし
デフォルト検索エンジンGoogleDuckDuckGo(プライバシー重視)
AdBlockerなし(拡張機能で追加)✅ 標準搭載
トラッカーブロックなし(デフォルト)✅ 標準搭載
メモリ消費(1タブ)500〜2000MB+200〜500MB(軽量)
フォーク・改造Chromiumビルド知識が必要JS/CSSだけで可能

🎬 DRM問題について

Min標準版はWidevine DRMを搭載していないため、Netflixや一部のAmazonプライムビデオでエラーが出る。ただしYouTubeはHTML5動画(非DRM)で動くため問題なく再生できる。DRMが必要なコンテンツを見たい場合はコミュニティフォーク(min-ng等)を使う方法がある。

🛠️ コミュニティのカスタマイズ事例

Minはオープンソースなので、世界中の開発者が独自改良版を作って公開している。その中でも特に注目すべきフォークと取り組みを紹介する。

min-ng(Alex313031)

最も有名なMinのフォークの一つ。Alex313031が管理しており、以下の2点が最大の特徴だ。

  • 🪟 Windows 7対応ビルド — 現在公式サポートが終了したWindows 7でもMinが動くよう改良したビルドを提供
  • 🎬 Widevine(DRM)組み込み — 標準版では見られないNetflixやAmazonプライムビデオも視聴可能。DRM問題を解決した事実上の「完全版」

公式マルチウィンドウサポート(PR#2237)

Minの作者PalmerAL自身が「マルチウィンドウサポート」をプルリクエスト#2237として実装・マージした。コミュニティのニーズが本体にフィードバックされた好例で、Minはシングルウィンドウという制約を超えた。

その他のフォーク群

GitHubには複数のMinフォークが存在し、それぞれ独自機能の追加・特定OS向け改良・UIのカスタマイズ等を行っている。フォークの活発さはMinのコードベースが触りやすく、改造しやすい設計になっていることを示している。さとまたちゃんが「自分用ブラウザを作りたい」と思ったときに、このコミュニティの蓄積がそのまま参考になる。

特にmin-ngのDRM対応は重要なポイントで、「Minフォークではストリーミングが見られない」という問題が実際にコミュニティによって解決済みであることが分かる。さとまたちゃんのフォークでも同様のアプローチを取ることができる。

🔱 フォークして何をカスタマイズするか

Minをフォークしてさとまたちゃんだけのブラウザを作るとしたら、何を変えて何は変えないか。Chromiumに手を入れずにElectronのJavaScript層だけで実現できる範囲を整理する。

✅ JS/CSSだけで変えられること

🎨UIテーマ全面変更 — サイドバー型タブ切り替えや縦型UIに変えられる
🔍検索エンジンのデフォルト変更 — Brave Search等に変更
📌ピン留め・お気に入り機能 — 独自のブックマーク体験を作れる
⌨️キーボードショートカット — vimライクな操作等を追加
🌙全サイト強制ダークモード — 標準より強力な適用が可能
📊メモリ使用量ウィジェット — タブごとのメモリ表示
🧹セッション管理 — 閉じたタブの自動メモリ解放
📝ノート・メモ機能統合 — ブラウザ内でメモを取る

⚠️ 追加調査・設定変更が必要なこと

  • 🎬 Widevine DRM対応 — min-ngの実装を参考に組み込む必要がある
  • 🔌 拡張機能の一部対応 — Electronのセッション設定でChrome拡張を限定的に使える場合もある
  • 🔄 自動アップデート機能 — electron-updaterの設定が必要

❌ JSレイヤーだけでは無理なこと(Chromium改造が必要)

  • 🚫 V8エンジンの挙動変更(JIT最適化の無効化等)
  • 🚫 レンダリングエンジン(Blink)レベルのカスタマイズ
  • 🚫 Chromiumのメモリアロケータ変更

さとまたちゃんの戦略は明確だ。Chromiumには手を入れない。Electronが提供するAPIとMinのJavaScriptコードだけを改造して、自分が毎日使いたいと思えるUIとUXを実装する。それだけで十分すぎるほどカスタマイズできる。

📍 ロードマップ

実際にMinをフォークして自分用ブラウザを作る場合の段階的なロードマップを整理する。一気に全部やろうとせず、まず動くものを作ってから徐々に機能を足す方針で進める。

1
Phase 1: フォーク&環境構築
MinリポジトリをGitHubでフォーク。Node.js+npmでビルド環境を整える。現状のMinが手元でビルドして動くことを確認する。ここでコードベースの構造を把握する。
2
Phase 2: UIカスタマイズ
テーマ・カラースキームを変更。サイドバー型タブUIへの変更を試みる。ショートカットキーを追加・変更する。自分が毎日使いたいと思えるUIに整える段階。
3
Phase 3: 機能追加
メモリ使用量表示ウィジェットを追加。バックグラウンドタブのサスペンド機能(メモリ解放)を実装。独自のブックマーク・セッション管理を整える。
4
Phase 4: DRM対応(オプション)
min-ngのWidevine組み込み方法を参考に、Netflix等のDRMコンテンツ再生に対応させる。YouTube・ニコニコ等はPhase 1時点で既に動く。
5
Phase 5: リリース&継続メンテ
GitHub Releasesで自分用バイナリを配布。Electronのアップデートに合わせて定期的にベースをアップグレード。Minの本体更新も取り込む。

現時点での進捗

Phase 1の「何をカスタマイズするか」の設計と調査が完了した状態。コードを書く前にアーキテクチャとコミュニティの先行事例を把握できた。

🎯 さとまたちゃんの結論

長い調査になったが、最終的な結論はシンプルだ。

さとまたちゃんの選択

  • Minをフォークする — Chromiumのビルドは不要。JS層だけで十分カスタマイズできる。
  • YouTube再生は最初から動く — HTML5動画はDRM不要。メインの用途は問題なし。
  • DRMはmin-ngを参考に後から対応 — 最初から完璧を目指さない。動くものを作ってから追加する。
  • コミュニティの先行事例が豊富 — 自分で0から考えなくていい。min-ngをはじめ参考になるフォークが多数存在する。

ブラウザが重い理由の整理(頭の中を整理するため)

  • 🔵 マルチプロセス設計 → セキュリティのための必要悪。Minも同じ構造。
  • 🔵 V8 JIT → JavaScript高速化のためのメモリトレードオフ。変えられない。
  • 🔵 積極的キャッシュ → 快適な体験のための選択。バックグラウンドタブのサスペンドで対処できる。
  • 🟢 UIと余分な機能 → ここが削れる。Minはすでにシンプル、さらにシンプルにできる。

ブラウザの重さの本質はChromiumとV8の設計にあり、そこは変えられない。でもChrome 2000MBの消費は、UIの複雑さ・拡張機能・Googleサービスの統合・積極的すぎるキャッシュ戦略が積み重なった結果でもある。Minはそのレイヤーを削ることで軽くなっている。さとまたちゃんはさらにその上で、自分の使い方に最適化したブラウザを作る。

ChromeもElectronも、もともとはWebをプラットフォームにしようというGoogleとGitHubの意志から生まれた。その副産物として、今さとまたちゃんが「自分のブラウザを作れる」環境が整っている。技術の歴史を知ると、何を使えばいいかがはっきり見えてくる。

次のステップ: MinリポジトリをフォークしてPhase 1を開始する