9月30日に計画されているGoogle Waveのコンシューマ向けリリースに関連して、InfoQではGoogleのソフトウェアエンジニアであるDhanji Prasanna氏に対してGoogle Waveのあまり知られていない内部のこと、GoogleのエンジニアがどのようにGoogle Waveを開発してきたかに関する細かなこと、そして関連するベストプラクティスについてのQ&Aを行った。
InfoQ: オペレーショナルトランスフォーメーション(OT)がGoogle Waveの土台であるとのことですが、それを実装している技術についてもう少し詳しく教えてもらえますか?
Dhanji氏: 概念としてのOTはここしばらく活発に議論されていましたが、それは多くの場合アカデミックな形でだけでした。私たちは、OTの完全なクリーンルーム実装を行って、Google Waveにだけ必要な要求に対するカスタマイズも行っています。それによって、私たちのエディタは真にリアルタイムで、文字単位で並行処理が可能な編集システムになり得ているのです。文書の編集作業を一連の変更操作に分解することで、複数の参加者によって同時に編集されている時でも一行、あるいは段落の意味的な一貫性と完全性を保つことができるのです。これがこのリアルタイムコラボレーションの核心にあるものです。
WaveにおけるOTは前述の学術論文とJupiterシステムに多くの部分を依っています。私たちにとって一つの利点は、Google Web Toolkitを使うことで、同じOTのJavaコードをサーバ上でもクライアント上でも動かせるということがあげられます。これは私たちを救ってくれる特に重要な点です。この技術についてはhttp://waveprotocol.orgでさらにくわしい文書を見ることができますし、http://code.google.com/p/wave-protocolで実際のソースコードを使って試してみることもできます。
InfoQ: GWTとGearsがウェブクライアントを構築するために利用されているように見えますがどうでしょうか? なぜこの技術の組み合わせを選んだのか、超えなければならない挑戦がどのようなことだったのか教えてもらえますか? また、古いブラウザに対してどのように対応しようと計画していますか?
Dhanji氏: Google Web ToolkitはGoogle Waveにとって偉大なサクセスストーリーの一つです。私たちは非常に有用かつ使い慣れたJavaのテスト、デバッグ、コード開発ツールを利用することができるのです。そして、これをコンパクトで高いパフォーマンスを持ち、かつスケーラブルな形式でブラウザに届けることができるということは、まさに私たちの目を覚ますことだったのです。GWTは共有のコードベースをブラウザとOSのさまざまな組み合わせ、それも最小限の労力でモバイルブラウザにまで展開することができます。さらに多くのコードを勝手に最適化してくれるので、慣用的なJavaを使いながら、高速に実行させることが可能ですし、クライアントに配布されるものはコンパクトです。私たちは現在ただ一つの機能に対してのみGearsを使っています。それは、(デスクトップから)ブラウザに対するドラッグアンドドロップを可能にする機能です。これは私たちがHTML5に追加しようとしている機能の一つですから、Gearsが有効になっていないブラウザでもドラッグアンドドロップを利用することができるようになるでしょう。
私たちは現状存在する(Chromeと同等の機能を持った)ブラウザをサポートしていますし、将来的にはHTML5準拠のブラウザを完全にサポートすることになるでしょう。
InfoQ: ブラウザとOSの組み合わせはますます増えていくと思われますが、ウェブクライアントのテスト、統合、頻繁なリリースをどのように管理しているのですか?
Dhanji氏: 幸運にも私たちはこの分野においてGoogleの他のプロジェクトやエンジニアが持っている経験を利用することができます。テスト技術にフォーカスした素晴らしいチームを持っているだけでなく、Webdriverと呼ばれる素晴らしいオープンソースのウェブテスティングライブラリも利用しています。このライブラリを使うと、ユーザのWaveクライアントとのやりとりをきわめて洗練されたやり方でまねることができます。Webdriverではシンプルなプラグイン可能なオプションを利用して、様々なブラウザ上でのこのようなテストを容易に並列化することができます。それに、私たちの独特なAjaxを多用したテスト要求もサポートするよに進化してきています。このこととは別ですが、バグ修正と機能の更新を素早く広めるためにアグレッシブなリリース計画を立てています。しかしながら、おそらく最も重要なセーフガードは、私たち自身が内部でほぼあらゆることのためにWaveを利用している、ということです。いわゆる、自分自身のドッグフードを食べる、ということですね。このことで、私たち自身がまず痛みを感じるような高い優先順位を持つ不具合を修正し、要求の高い機能を実装し続けることが本当の意味でできるようになっているのです。
InfoQ: Google Waveエンジニアの典型的なワークステーションで見つけることができるソフトウエアはどんなものか、その概要を教えてもらえますか?
Dhanji氏: ツールについてはそれぞれのエンジニアの好みがあるのですが、バージョンコントロール、管理、ビルドツールは決まったものがあって、すべてのGoogleエンジニアの間で共通です。それを除けば、好みのコードエディタとしてEclipseやIntelliJ Ideaからvimやemacsまで何でも見つけることができるでしょう。さまざまな繰り返し作業のためのコマンドラインのunixツールやカスタムシェル、pythonスクリプトもかなりの人気です。grepなんかはお気に入りでしょうね。=)
InfoQ: ユーザがウェブクライアント上でタイプした瞬間からそのWaveに参加している他の誰か – 人間またはロボット – がそれを利用することができるようになるまでに、メッセージ(blip)に何が起きているのか、簡単に技術的アウトラインを教えてもらえますか?起動するのにどんなシステムが必要とされていて、どんな技術が使われ、そして、情報の流れはどんなものか、あたりです。
Dhanji氏: わかりました。クライアントで書かれたメッセージは一連の操作に変換されて、リアルタイムにサーバに送られます。認証を受けて、適切なユーザセッションを見つけたあとで、それらの操作はホストされた会話にルーティングされます。ここで、これらの操作は他のユーザから入ってくる別の操作ストリームに対して適合するように変形されます。その後、ホストされた会話は他のユーザやそれを聞いているロボットにその妥当な一連の変更をブロードキャストで送り返します。ここには、スペルチェックをするロボットや、(サーチパネルの中央に見られる)ライブサーチを扱うロボット、そして開発者によって開発された明示的なロボット参加者も同様に含まれます。ロボット参加者はそれらの変更をユーザに対する反応として書き出し、同じように別の操作に変換し、適合され、そして再度ブロードキャストされます。
ウェブクライアントはこれらを適切に解釈します。たとえばspellyの場合には、修正が必要なスペルミスがある単語をハイライトします。
他のGoogleアプリケーションと同様に、さまざまなシステムがクラスターの上で稼動し、水平にスケールしています(Web search for a planet: the google cluster architecture - Micro, IEEE)。
InfoQ: Google Wave用に構築されたソフトウェアのライセンスについてはどうでしょうか?現在オープンソースになっているのはどの部分で、将来的にそうしようとしているのはどの部分でしょうか?また、Googlezが従うべき包括的なライセンシング戦略はどのようなものだとお考えですか?
Dhanji氏: 現時点で文書の変形とその操作に関する主要なデータモデルの大部分を(オープンソースとして)提供しています。これは私たちの内部システム上で稼動しているのと同じコードです。さらに、サーバとクライアントのリファレンス実装も提供しています。こちらは、内部システムと同様のアプローチと使っているものです。私たちはコードベースのよりたくさんの部分をオープンソースにしようとしていますが、そのためにはコードのプロプライエタリなインフラとの関係をなくし、適切なビルドツールを提供し、そしてリリース前には適切に文書化されていることやサポートが十分であることを確認しなければならない、など大仕事なのです。
私たちはApacheソフトウェアライセンス(ASL 2.0)を利用しています。私はGoogle Wave以外の製品のライセンスについてコメントすることはできません。それらの製品についてよく知らないからです。
InfoQ: Google Waveのようなプラットフォームを構築するにあたって、現状ある"ベストプラクティス"、フレームワーク、技術はどれくらい適切なものであるとお考えですか?あなたはGoogle Waveのようなハイエンドなプロジェクトにおいてあなたが選んだことが、将来主流になるであろうことの一部であると思いますか?
Dhanji氏: Google Waveを構築するにあたり、私たちはたくさんの挑戦にぶち当たってきました。人間とロボット参加者の両方を最初からサポートするようなリアルタイムで文字単位のアプリケーションをスケールさせるということの性質についてたくさんのことを学ばなければなりませんでした。また、50人以上のエンジニアが扱うコードベースを管理し、うまく取り入れるのと同時にビルドの状態を一定に保つことも大きな挑戦でした。
こういった奮闘のなかで、Googleで利用されている主要なライブラリやツールがかけがえのないものだということがよくわかりました。これらのうちのいくつかはオープンソースとして利用できますし、私たちはそれらをぜひ使って欲しいと思っています:Google Web Toolkit(クライアントのフットプリントが一桁小さくなります)、Google Guice(特別なサーブレット拡張)、Guava Libraries、Webdriver、他にもいくつかあります。これらの多く最先端のテクノロジーであり、速いペースで進化し続けているものです。私たちは特にラッキーでした。これらのツールキットの作者たちと近くで作業し、しばしばあやふやな要求を通すことができたのですから。Waveのような大きなプロジェクトをやってみようとするなら誰しもこれらのオープンソースライブラリが非常に有用であることを発見するでしょう。
InfoQはすでにGoogle Waveアーキテクチャに関するニュースストーリーも公開しており、また、Google Waveの開発を追い続ける。