ISBN 9784297145460

[作って学ぶ]ブラウザのしくみ──HTTP、HTML、CSS、JavaScriptの裏側

[作って学ぶ]ブラウザのしくみ──HTTP、HTML、CSS、JavaScriptの裏側
著者
土井 麻未
出版社
技術評論社
刊行
2024-11

概要

Rustでブラウザを自作しながらWeb技術の裏側を一気通貫で理解する

想定読者

HTTPからレンダリングエンジン、JavaScriptエンジンまでの仕組みを原理から学びたいWebエンジニア・システムプログラマ。Rustの基礎知識があり、低レイヤへの興味を持つ中〜上級者。

こんな人には向いていない

  • RustやC系言語の経験がなく、プログラミング自体の学習中である初学者には環境構築の段階から難度が高い
  • フロントエンドのフレームワーク活用スキルを即戦力にしたい人にとっては実務直結度が低い
  • すでにブラウザエンジン(Chromium/Gecko等)のソースを読みこなしているエンジニアには既知の範囲が多い

読了後にできるようになること

  • URLのスキーム・ホスト・パスを構文解析する字句解析器・構文解析器をRustで実装できる
  • TCPソケット経由のHTTPクライアントを手書きしてリクエスト/レスポンスの処理を理解できる
  • HTMLトークナイザとDOMツリー構築アルゴリズム(字句解析→構文解析)を段階的に実装できる
  • CSSOMとレイアウトツリーを構築し、座標計算からGUI描画まで一連のレンダリングパイプラインを追える
  • JavaScriptの変数・関数呼び出し・ブラウザAPIをスクラッチから実装することでJSエンジンの基礎構造を把握できる
  • 自作ブラウザを自作OS(WasabiOS)上で動かすことで、OSとブラウザのレイヤ境界を実体験として理解できる

本書のキー概念(章解説)

  • 第 1 章 ブラウザを知る──Webサイトを表示するアプリケーション — Webクライアント・レンダリングエンジン・JSエンジン・マルチプロセスアーキテクチャ・セキュリティを鳥瞰する。本書全体の設計図として最初に熟読する価値がある
  • 第 2 章 URLを分解する──リソースを指定する住所 — 字句解析の入門として最小規模。Rustに不慣れな読者はここで実装パターンを体になじませると後の章がスムーズ
  • 第 3 章 HTTPを実装する──ネットワーク通信を支える約束事 — TCPレベルからHTTPを手書きする章。WasabiOS上での動作確認を含む。ネットワーク理解の礎になる
  • 第 4 章 HTMLを解析する──HTMLからDOMツリーへの変換 — 字句解析→構文解析の2段階実装が本書のハイライトの一つ。DOM APIの裏側がここで見える
  • 第 5 章 CSSで装飾する──CSSOMとレイアウトツリーの構築 — CSSパース・CSSOM・レイアウト計算・GUI描画準備まで一気に進む。最もボリュームのある章
  • 第 6 章 GUIを実装する──ユーザーとのやりとり — アドレスバー・リンククリックなどインタラクティブなブラウザ動作をイベント処理レベルで実装する
  • 第 7 章 JavaScriptを動かす──ページの動的な変更 — 加算・変数・関数・ブラウザAPIをゼロから実装。JSエンジンの最小コアを体験する締めくくり章

ハイライト

  • シンプルなブラウザをRustを用いて実装することによって、ブラウザ上でWebサイトを開くまでに何が起きているのかを理解することを目的とします(本書の学習目的が最も端的に示されている箇所。実装を通じた理解という手法の核心)
  • 作成したブラウザを、別冊で解説・実装している自作OSの上で動かすことによって、ブラウザと更にその裏側を理解していきます(OS層まで含めた垂直統合学習が本書の独自性を示す記述)

外部からの言及

  • 環境構築(Rust nightly・QEMU・WasabiOS)に相応の手間がかかることが複数の学習記録で共通して言及されており、Rustおよびシステムプログラミングの基礎知識が実質的な前提となっている(qiita)
  • WasabiOSとSaBAブラウザをセットで学ぶことで『低レイヤから高レイヤまで一気通貫で理解できる』という評価が見られ、OS自作書と組み合わせて活用するケースが散見される(qiita)

編集メモ

Qiita言及3件・累計likes 3(各1件)。2024年11月刊行で読者層は限定的だが、ブラウザ自作・Rust低レイヤというニッチな需要に正面から応える書籍として希少性は高い

読む前に押さえておきたいこと

  • Rustの基本的な構文(所有権・借用・トレイト)を理解していること。チュートリアル『The Rust Programming Language』の前半程度
  • HTTPリクエスト/レスポンスの基本構造(メソッド・ヘッダ・ボディ)を概念として知っていること
  • ターミナル操作とGitが使えること。QEMU等の仮想化ツールの導入経験があれば環境構築の手間が大幅に減る

学習のコツ

  • 第1章でブラウザ全体のアーキテクチャ(Webクライアント・レンダリングエンジン・JSエンジン・マルチプロセス構造)を把握してから実装章に進むと、各章が全体像のどこに位置するか常に意識できる
  • 環境構築はRust nightly・QEMU・WasabiOSのリポジトリクローンの3点が揃うまでに時間がかかる。公式サポートページ(lowlayergirls.github.io/wasabi-help/)と著者のGitHubリポジトリ(github.com/d0iasm/sababook)を先に開いておくと詰まりを減らせる
  • 各章末のユニットテストを自分で走らせながら進めると、実装の誤りを章内で修正できる。テストをスキップして読み進めると後半でデバッグが複雑になる
  • WasabiOS上での動作確認ステップ(第3・4・7章)は別冊の自作OS書を手元に置かなくても本書の範囲で進められるが、OS層の詳細を深堀りしたい場合は並行読書が効果的
出版社による内容紹介

Webブラウザは、開発者にとってもユーザーにとっても、もはや日常の一部となっているほど身近なソフトウエアですが、近年のブラウザはあまりにも高機能かつ巨大になってしまったため、その仕組みを詳しく理解することは困難です。そこで、シンプルなブラウザをRustを用いて実装することによって、ブラウザ上でWebサイトを開くまでに何が起きているのかを理解することを目的とします。さらに、作成したブラウザを、別冊で解説・実装している自作OSの上で動かすことによって、ブラウザと更にその裏側を理解していきます。 第1章:ブラウザを知る──Webサイトを表示するアプリケーション ブラウザの役割(1)──Webクライアントとしてのブラウザ ブラウザの役割(2)──レンダリングエンジンとしてのブラウザ ブラウザの役割(3)──JavaScriptエンジンとしてのブラウザ コアの役割を支えるためのさらなる機能 マルチプロセスアーキテクチャ ブラウザのセキュリティ対策 本書のゴール・注意点 第2章:URLを分解する──リソースを指定する住所 URLとは URLの構文解析の実装 ユニットテストによる動作確認 第3章:HTTPを実装する──ネットワーク通信を支える約束事 HTTPとは HTTPクライアントの実装 ユニットテストによる動作確認 WasabiOS上で動かす 第4章:HTMLを解析する──HTMLからDOMツリーへの変換 HTMLとは HTMLの字句解析──トークン列の生成 ユニットテストによる字句解析の動作確認 HTMLの構文解析──ツリーの構築 ユニットテストによる構文解析の動作確認 WasabiOS上で動かす 第5章:CSSで装飾する──CSSOMとレイアウトツリーの構築 CSSとは CSSの字句解析──トークン列の生成 ユニットテストによる字句解析の動作確認 CSSの構文解析──CSSOMの構築 ユニットテストによる構文解析の動作確認 レイアウトツリーの構築 ユニットテストによるレイアウトの動作確認 GUI描画のための準備 第6章:GUIを実装する──ユーザーとのやりとり GUIとは GUIアプリケーションのウィンドウの作成 ユーザーの入力を取得 アドレスバーからナビゲーション ページの内容の描画 リンククリックでナビゲーション 第7章:JavaScriptを動かす──ページの動的な変更 JavaScriptとは JavaScriptの加算/減算の実装 JavaScriptの変数の実装 JavaScriptの関数呼び出しの実装 ブラウザAPIの追加 WasabiOS上で動かす

この本がどの学習段階で役立つかは、 関連する ロードマップ から確認できます。

質問に答えるだけで、
あなたに合う専門書が見つかる

IT・デザイン・士業・医療・経理・教育・研究 ほか、あらゆる分野の専門書と 「読む順序」(学習ロードマップ)を収録。何を選べばいいか分からなくても、 いくつかの質問に答えるだけでたどり着けます。