2008年9月2日(米国時間)、米グーグルが新たなWebブラウザー「Google Chrome」のベータ版を発表したことは、大きな反響を呼んだ。Web分野で最も影響力の大きい企業の一社であるグーグルが、Webの世界の基幹ソフトウエアといえるブラウザーを自ら提供したからだ。

 Chromeのブラウザーとしての機能はむしろシンプルであり、最新のFirefox3.0やIE8ベータ版の高機能ぶりを見た後では拍子抜けするほどだ。だが、その内部の作りを検討すると、米グーグルが考えるWebアプリケーションのプラットフォームの姿が浮かび上がってくる。それは、「より高速で安定した、アプリケーション実行プラットフォーム」というコンセプトである。

 グーグルは、コミック仕立てのChrome紹介パンフレットをWebで公開している。このパンフレットは、「ブラウザーは、アプリケーションを使うためのもの」という台詞から始まる。Chromeは、アプリケーションを実行させるためのプラットフォームとして意図されたものであることが分かる。

 実際、グーグルが提供するサービス、例えばGMail、Googleマップ、GoogleカレンダーなどのサービスはAjaxと呼ぶ技術を駆使しており、ブラウザーが高速で安定していることは非常に重要だ。これらのサービスでは、Webブラウザー上で動作するJavaScriptプログラムが重要な役割を果たす。グーグルのサービスの多くは、単にグーグルが提供するサーバー群(「クラウド」と呼ばれることが多い)の上で動いているだけでなく、利用者の手元のブラウザーと連携して動くアプリケーションとして作られているのである。そして、Chromeは、こうしたAjaxアプリケーションを動作させるプラットフォームとしての優れた特質を備える。

 特に重要なのは、次の2点だ。

(1)タブごとにプロセスを独立させており、クラッシュに強い
(2)JavaScriptプログラムの実行速度が高速

 前編、後編に分けてそれぞれ見ていこう。

タブごとにプロセスを独立させており、クラッシュに強い

 Google Chromeの外見上の大きな特徴が、「タブ」を前面に出したユーザー・インタフェースだ。タブの内部にURL入力や検索語の入力に使える入力窓がある。

 このユーザー・インタフェースは、そのままChromeの内部構造を表している。グーグルのWebサイトに掲載されているChromeに関する説明文には、「Google Chrome では、個々のタブが独立した『サンドボックス』(編集部注:プログラムが使用できるメモリー領域を制限する仕組み)として機能しているため、一つのタブがクラッシュしてもほかのタブは影響を受けません」とある。これは、タブごとに独立したプロセスを実行しているためである。

 プロセスは、オペレーティング・システム(現状のChromeの場合は、Windows XPおよびVista)がプログラムを実行するときの処理単位である。重要なことは、あるプロセスがクラッシュしても、他のプロセスは原則としてその影響を受けず処理を続けられる作りになっていることだ。

 FirefoxやIE7といった従来のタブブラウザーでは、複数のタブを開いているとき、一つのタブのWebアプリケーションが応答しなくなることで、ブラウザー全体が応答しない現象が起こる。より高度なWebアプリケーションを作りたいグーグルの立場から見ると、これは困る。Chromeのようなタブごとにプロセスが独立している作りになっていれば、一つや二つのWebアプリケーションがクラッシュしても、残りのタブではそのまま作業を続けることができる。

 ただし、このマルチプロセスを採用したことで、メモリーの利用に関しては、メリットとデメリットが生じている。

 デメリットは、メモリー消費量が増えることである。単一プロセスのアプリケーションと異なり、Chromeのようなマルチプロセスのアプリケーションでは、例えば「JavaScript処理系」のような基本機能についても、プロセスごとに独立したメモリーを割り当て、メモリーを重複して消費することになる。タブを多く開くほど、この差は広がっていく。

 その一方、マルチプロセス・モデルには、メモリー解放の仕組みがシンプルであるというメリットがある。従来型のシングル・プロセス・モデルのタブブラウザーでは、多数のタブを開いた後にいくつかのタブを閉じても、メモリー消費量があまり減らないという現象がみられる(図)。だがマルチプロセス・モデルのChromeでは、タブを閉じるたびに、確実にメモリー消費量が減っていくのである。

図 3つのブラウザーで開いているタブの状況別にメモリー利用状況を調べた。メモリー使用状況のデータはChromeの機能(アドレスバーに「about:memory」と入力)を使って取得したプライベートメモリーのサイズ。Chromeで5つタブを開いた状態を100として数値化した
図 3つのブラウザーで開いているタブの状況別にメモリー利用状況を調べた。メモリー使用状況のデータはChromeの機能(アドレスバーに「about:memory」と入力)を使って取得したプライベートメモリーのサイズ。Chromeで5つタブを開いた状態を100として数値化した
[画像のクリックで拡大表示]