訳者まえがき
この本を訳しながら、機械翻訳システムの開発プロジェクトに初めて参加したときのことをときどき思い出しました。
大学院でソフトウェア工学を学んだ私は小さなソフトウェア会社に就職したのですが、その会社ではある組織からの依頼で、機械翻訳システムの開発が始まろうとしていました。少なくとも当時は機械翻訳というと人工知能の一分野として考えられており、プログラミング言語としてはLispや当時売り出し中のPrologを使って開発するのが「常識」のように思われていました。しかし、その開発を指揮したNさんは、まずは数値計算用言語として使われることの多いFortranで開発を始め、しばらくして国産の機種が出たばかりのUnixワークステーション上で、当時はまだ目新しかったC言語を使って機械翻訳システムを開発するという決断を下しました。
学会などの場で、「Cで作ってます」などというと軽い冷笑の含まれたようなコメントを返されたこともありましたが、Nさんの信念が揺るぐことはなく、C言語での開発が続きました。私自身は、それほどLispが好きでもありませんでしたし、Unixの柔軟さやC言語のfor文などがとても気に入っていましたので(ポインタを多用するところはあまり好きではありませんでしたが)とくに反発も覚えず楽しみながら開発に没頭しました。
実際に開発を進めてみると、C言語を使った結果、少なくとも当時の環境ではLispなどを使うよりもはるかに高速に動作し、結果的に大きな辞書や文法を使った大規模な実験を大量に行うことができ、みるみるうちにシステムの性能が向上し、ほどなくして他社に先行してシステムを販売することができました。Nさんは私に常識を疑うことの大切さを教えてくれたのです。
Steve Souders(スティーブ・サウダーズ)氏も、ウェブサイトのパフォーマンスに関する分野で、Nさんのような役割を演じた方と言えるでしょう。前著『ハイパフォーマンスWebサイト』で、「ウェブ高速化はバックエンド処理の高速化から」という常識を覆しました。この本でもその一部が紹介されているように、前著の影響力は絶大で、著名サイトの多くで「高速サイトを実現する14のルール」が適用されるようになり、また多くのブラウザで、前著の指摘に応える形で機能の追加が行われています。
前著の内容は、ほとんどのウェブサイトに適用できる基本的なルールの紹介がその中心でしたが、この続編では、画像やスタイルシートに関するルールを追加するとともに、アプリケーションプラットフォームとしてのウェブの高速化に多くのページを割いています。デスクトップアプリケーションに引けを取らないほどの応答性を確保するにはどのような技術が必要なのか、現状ではどういったテクニックを駆使しなければならないのか、そして将来はどのような技術が使われるようになりそうなのか、Souders氏は8人の各分野の専門家の力も借りて、基礎的な事柄からていねいに解説してくれています。中には重箱の隅をつついていると思われるようなテクニックもありますが、それも「現在の環境で」高速なウェブアプリケーションを実現するにはという実践的な視点に立ったものです。
さて、以前の上司のNさんには学ぶことがとても多かった私ですが、ひとつ激しく対立した点がありました。私は「プログラムはわかりやすく書くべきだ」と強く主張し、文字は文字型(char)の変数に入れ、整数は整数型(int)の変数に入れ、配列や再帰関数などをふんだんに使ってわかりやすいプログラムを書こうとしました。これに対してNさんは、小さい整数には文字型(char)を、それでは溢れてしまいそうな数にはshort intを使い、ビット演算やポインタ演算を駆使して、できるだけ高速でメモリ使用量の少ない手法を追求しました(ただし、私にこういった手法を押しつけることは決してありませんでした)。
Nさんのプログラムは高速で、手間のかかるはずの構文解析処理を非常に高速に行いました。当時の環境ではこのようなテクニックが必須だったのかもしれません。このシステムはその後パソコンに移植され、現在も販売されています。恐らくNさんのコードも私のコードも今でもシステムの中に生き残っていますが、私のコードはその後担当者が変わっても継続的に改良が施されたのに対して、私の知る限りNさんのコードの中核部分に触わった人は誰もいません。
1章の著者Douglas Crockford(ダグラス・クロックフォード)氏は次のように述べています。
コードは品質を旨とすべきです。美しく読みやすく、構成のきちんとしたコードは、保守も最適化も容易です。目に見えて性能が改善することがわかっている場合を除き、小手先のトリックに頼るのはやめましょう。「トレードオフ」を主題にしたCrockford氏の主張を、この本の冒頭にSouders氏が置いたという事実には、Souders氏のバランス感覚がよく現れていると思います。私にはSouders氏が次のように語っているように思えるのです。「今はこの本で紹介した技術が必要です。ですから、ウェブ開発者ならこの2冊の本で紹介したテクニックを知っておく必要があります。しかし、けっして本質を見誤らないでください。ご自分のサイトで何が必要なのかは、私の本を参考にご自分で決めてください」と。
動きの激しいインターネットの世界で、この本の内容が何年ですべて古くなってしまうのかは誰にもわかりません。前の本と同様、この本に書かれたがためにブラウザ開発者が改良してしまい、紹介されたテクニックが不要になってしまうことも起こるでしょう。しかし、この本で紹介されている視点や発想が古くなることはないのです。
最後になりますが、この日本語版では、付録にYahoo! Japan、Mozila Japan、Google Japanという日本を代表するサイトのご担当者の方々から、各組織におけるパフォーマンス関連の取り組みについてご寄稿いただきました。とてもおもしろく、ウェブの今後を知る上で大変役に立つ内容で、この本がさらに魅力的なものになりました。この場をお借りしてお礼申し上げます。また、前の本に続きこの本の翻訳の機会を与えてくださり、ていねいな編集作業を行っていただいた宮川直樹さんをはじめとする、株式会社オライリー・ジャパンの皆さんにも深く感謝いたします。
2010年3月 訳者代表 武舎 広幸