「[作って学ぶ] ブラウザのしくみ」を読んだ

「[作って学ぶ] ブラウザのしくみ」という本を技術評論社から恵贈いただいたのでレビューを書きました。なお、作って学ぶ本なのに、わたしはまだコードを読んだだけで書き写してはいません。そういう人が書いた感想だということはご承知おきください。

本書はWebブラウザのしくみを、自分で作ることによって理解しようという意欲作です。眼にした瞬間に「デカ!」と思った程度には大きく、400ページ以上あります。しかし、読後感は「たったこれだけのページ数に、よくぞこれだけの内容を詰め込んだものだ」でした。わたしはWebブラウザを作ったことがないし、関連技術に明るくもないこともあって、大変ためになりました。

昨今のWebブラウザは非常に多機能かつ複雑で、ソフトウェア技術の総合芸術のようになっています。作るのには膨大な知識が必要ですし、コード量も尋常ではなく多いです(著者いわく、Chromeは2024年7月現在3000万行を超える)。本書はこのようなWebブラウザのうち、ごく一部のエッセンスとなる機能のみを扱っています。それら機能を作るにあたって必要な技術、仕様の説明もしてくれていて、至れり尽くせりなところがとてもよかったです。何かを作る系の本で、「こういう機能はこう書く」というだけではなく「どういう理由でなぜこのようなことを書かなければいけないのか」を説明してくれているものはなかなか無いのです。

前の段落で書いた「エッセンスとなる機能」とは、表紙にも書いているHTTP、HTML、CSSJavascriptのサブセットです。タイトルだけ見た時は「HTMLのタグを何個か解釈して、それを画面上にレンダリングするところまで書く本なんだろうな」と思っていましたが、それだけではなくCSSによる装飾やJavascriptによるコードの実行までが、一部にせよできるようになっています。これが意味するところは、本書に書かれていることをすべてマスターした読者は、「字句解析」、「構文解析」、「解析結果をもとにした画面へのレンダリング、およびコードの実行*1」というプログラム技術を会得できるということです。これらはWebブラウザに限らず他のところでいくらでも応用が利く技術なので、身に着けておいて損はないと思います。

続いてソースコードについて。コードは素直な書き方をしていて、とくに難解なことはしていません。ここで超絶技巧を凝らされると「作っても学べない」になるので、とても良かったです。また、この手の本には珍しく、テストが存在しており、かつ、それを書籍の中で紹介しているのに好感を持ちました。テストは大事です。

本書は説明が丁寧でコードが平易なことを考慮しても、読む難易度が高い本だと思いました。本書の前書きには「普段からブラウザを使用していて、その裏側に少しでも興味を持った方を対象としています。」と書かれています。私見では、さらに以下のような人が読むのに適していると感じました。

  • なんらかの言語でプログラミングをしたことがある。本書のコードはRustで書かれているので、Rustの経験があればなお好ましい。
  • OSと仮想マシンという概念について薄くでもいいので知識がある。とくに仮想マシンについては自分で動かしたことがある。

もちろん上記のことができなければ読んではいけないということは全くありません。「なんとなく興味を持つ」というのは重要で、あらゆる困難を跳ね返す力となります。ぜひ情熱をもって読み進めて、自作ブラウザを作ってほしいと思います。

これまで褒めてばかりでしたが、難点も3つ挙げておきます。1つ目は、HTTP3、およびその裏側にあるQUICをはじめとした新しめの技術について、それなりのページ数を割いて説明しているものの、それらは本書では実装しないということです。ある程度知識が無いと、説明された技術と、これから自分が実装するものの対応付けに戸惑うのではないかと思いました。本文では実装するものと直接関係することだけを説明して、それ以外はコラムかなにかに分けて書いてあるとよさそうだと思いました。

2つ目は、本書を読むにはOSと仮想マシンという概念について知識があるとよさそう…と書いたことに関係しています。本書で作成するWebブラウザは、関連書で説明される予定の独自OS上で動作します。また、Webブラウザの動作確認時に、そのOSをQEMUというハイパーバイザ上で動作させます。これらのことについて本書は少しだけしか説明をしていないので、OSや仮想マシンについての知識がまったく無いと、環境構築段階で一体何のことかわからず挫折しかねないと思いました。

3つ目は、たびたび出てくる関連書籍「[作って学ぶ]OSのしくみ」が本書執筆直後の現時点(2024/11/13)では存在しないことと、いつから存在するようになるのかが不明なことです。技術評論社のサイトを見ても、以下のように書いているだけです。

別冊で解説・実装している自作OSの上で動かすことによって,ブラウザと更にその裏側を理解していきます。

このことについては、前書きか何かでことわりを入れておくべきだったと思いました。

最後になりましたが、本書はよい本なので、Webブラウザに興味のあるかたは是非読んでほしいなと思いました。また、「[作って学ぶ] OSのしくみ」は、来年(2025年)に出る予定らしいと聞いたことがあるので、2冊を並べて読むのを楽しみにしています。

*1:本書ではバイトコードへの翻訳はせずにソースコードを読んで逐次実行している