近年、モバイルクライアントやソーシャルネットワークといった新たなトレンドにより、Webアプリケーションは並行コネクションを扱う必要に迫られてきた。その結果、nginxやNode.jsに見られるような、イベントや非同期性に基づいた新しいサーバアーキテクチャが登場した。2011年、Tim Fox氏はこのアーキテクチャの多言語対応JVM版、Vert.xの開発を始めた。Vert.xを利用することで、開発者はJavaScript、Groovy、Javaなどの言語を使って、1つのアプリケーションの中で組み合わせて、システムを開発することができる。
先日、Tim氏はVert.xのversion 2.0をリリースした。InfoQでは、Vert.xの変更点について知るため彼にコンタクトした。
InfoQ: 今回のアップデートでキーとなるフィーチャについて教えてくれませんか?
Tim Fox氏: Vert.x 2.0には新機能と改善点がたくさんありますが、主要なものをいくつか紹介します。
1つ目は、全体的に見直して、コアAPIのクリーンナップを実施しました。これにはコミュニティからリクエストされた新機能もたくさん含まれています。最終的に、これまでより優れた、一貫性のある、役に立つAPIになったと思います。
2つ目は、Vert.xをよりモジュール化して、拡張可能にしました。私たちは新しい強力なモジュールシステムを導入しました。Vert.xの機能の大部分はモジュールという形で提供されるようになります。これにはすべての言語サポートも含まれます。メインのVert.xプロジェクトが理解するのはJavaだけであり、それ以外の言語実装はモジュールという形で提供されます。あなたは必要なものをインストールするだけでよいのです。
Vert.xはこれまでよりずっとスリムに、効率よくなりました。配布物は4.5 MBしかありません。モジュールシステムというアイデアを取り入れることで、コミュニティによって分散的に作られたVert.xモジュールというエコシステムを構築したかったのです。クラスローダーシステムの効率化にも、かなりの時間を割きました。これによって、効率が向上して、アプリケーション間のリソースは共有しやすくなります。
3つ目は、Vert.x 2.0での開発をしやすくすることに注力しました。新しいMaven archetypeを用意することで、Vert.x Mavenプロジェクトを作成してすぐに始められるようになります。Gradleユーザのために、Gradleテンプレートプロジェクトも用意しています。Vert.xテストを書くためのテストフレームワークも用意しました。JUnitテストに似ていますが、Vert.xコンテナで自動的に実行させることができます。
また、IDEの利用をできる限りシームレスにすることにも注力しました。特別な設定やセットアップなしに、お気に入りのIDEでVert.xモジュールの実行、デバッグ、テストができます。今回追加した中で気に入っているものの1つは、IDE(あるいはテキストエディタ)で実行するときに、Vert.xアプリケーションをオートデプロイする機能です。Vert.xコードやその他のファイルを変更すると、ビルドステップや手作業による再起動をすることなく、実行中のアプリケーションを自動的に再デプロイします。
InfoQ: 新しい言語サポートはありますか? 言語設計者は言語をVert.x互換にできますか?
Tim氏: Vert.xのモジュール化により、Java以外のすべての言語実装をコアプロジェクトから外して、代わりにモジュールとして提供することになります。Vert.xのコアをまったく変更せず、新しいモジュールを作るだけで、だれでもVert.xに新しい言語サポートを簡単に作ることができます。やり方については、詳しい情報があります。これによって、私たちはVert.xの言語サポートの開発に注力しなくてもよくなります。現在、ScalaとClojureのサポートに取り組んでいるチームがいて、開発は順調に進んでいます。
InfoQ: Vert.xで「人気のある」言語というのはありますか??
Tim氏: 現在、Vert.xのユーザの多くはJVMユーザであり、今のアプリケーションプラットフォームにうんざりしていて、違うアプローチにトライしたいと思っているようです。Vert.xでJavaとJavaScriptを使うのに関心があるようですが、GroovyやRubyのような言語でVert.xを使うことにも関心があるようです。
Java 8はVert.xのJavaユーザにとってよいものです。lambdaが導入され、非同期APIを使うのがずっと簡単になります。私はScalaとClojureがサポートされるのも楽しみにしています。これにより、ほかのアプリケーションプラットフォームを使ってJavaからScala/Clojureへと移行しようとしているJava開発者に、別のソリューションを提供します。
InfoQ: Vert.xのモジュールシステムについて聞かせてください。現在、どれくらいのモジュールがあるのですか? npmにあるJavaScriptパッケージを使ったりできるのでしょうか? 開発者がモジュールに貢献するのはどれくらい大変ですか?
Tim氏: モジュールシステムはまだできたばかりです(ほんの1週間前に)。ですから、npmほどのモジュール数になるのは期待してません。でも、Vert.xのモジュールシステムはnpmとは動きが違います。モジュールのための中央リポジトリは提供しません。代わりに、開発者には、たとえばMaven CentralやBintrayといった、よく知られたモジュールリポジトリを使ってもらいます。Vert.xはそれを理解しているだけです。
モジュールシステムを導入したのは、すべてをコントロールする中央集権的なボトルネックを持たずに、Vert.xコミュニティがモジュールを作って共有できるようにすることです。
私たちはモジュールレジストリも提供します。ユーザが自分のモジュールを登録することで、モジュールを他人に見つけてもらうことができます。でも、実際のモジュールはそこに格納されるわけではありません。ユーザがモジュールをレジストリに登録するのに制限はありません。これは望むなら、他人からモジュールを見つかりやすくするだけです。
現在のところ、npmリポジトリをサポートしていませんが、今後追加を検討します。Node.jsのためのドロップインサポート(すなわち、API互換性)を提供しようと取り組んでいるチームがいます。これは大きなフィーチャになるでしょう。何も変更しなくても、Node.jsアプリをVert.xで走らせることができ、Vert.xのよりよい多言語世界への入口を提供するのです。おそらく、これがリリースされたときには、Vert.xがnpmリポジトリを理解することは意味をなすでしょう。
InfoQ: 素朴な質問ですが、Node.jsよりもVert.xを選ぶ理由は何でしょうか?
Tim氏: 理由はたくさんあります。考えるまでもありません。Vert.xはNode.jsができることのほとんどができて、それ以上のこともできます。ですから、もしNode.jsアプリケーションの開発を検討しているなら、Vert.xを調べる価値は大いにあります。実際にVert.xがNode.jsよりも優れているところをいくつか挙げておきます。
1つはパフォーマンスです。多くのアプリケーションにおいて、Vert.xはNode.jsより勝っています。Vert.x 1.xと比べて、Vert.x 2.0では数々のパフォーマンス改善がなされています(多くのベンチマークにおいて、すでにVert.x 1.xはNode.jsよりも高速でした)。これに加えて、私たちはJVMのパワーを活用できます。JVMは他に並ぶものがないほど優れた仮想マシンです。またNettyチームとも非常に密に作業しています。実際、 Vert.xのコア開発者であるNorman Maurer氏は、Nettyのコア開発者でもあります。Norman氏はNetty 4.0で本当にすばらしいパフォーマンス向上を成し遂げました。これはVert.x 2.0でも使われています。
もう1つは、言語の選択です。Node.jsはJavaScriptしか使えません。すべてをJavaScriptでやりたいなら構いませんが、そうでないなら問題です。Vert.xはJava、JavaScript、Ruby、Groovy、Pythonをサポートしています。ScalaとClojureのサポートに取り組んでいるチームもいます。
Vert.xとNode.jsを表面的に比較することもできますが、実際のところ、Vert.xは単なる「JVMのためのNode.js」を超えるものです。もっと大きなものなのです。多言語対応した、分散アプリケーションのためのプラッフォームなのです。ある意味、Node.jsはVert.xがやることのサブセットをやるものだと考えることもできますが、Vert.xのゴールはもっとずっと広範囲に及ぶものなのです。
InfoQ: バージョン2.0のリリースだけでなく、ちょうどVert.xの最初の誕生日でもありますね。この1年で、ソフトウェアはどのように成長しましたか? ユーザベースはどれくらい大きくなりましたか? 何か参考はありますか?
Tim氏: Vert.xはコミュニティプロジェクトであり、有償サポートを提供していません。私が登記している会社はありませんが、私の知る限り、プロダクトでVert.xを使っているところもたくさんあります。そこにはビッグネームも含まれています。
InfoQ: Vert.xが最適なところを説明してもらえますか? あるいは逆に、Vert.xにはどういうタイプのアプリケーションに適していますか?
Tim氏: Vert.xは非常に汎用のアプリケーションプラットフォームで、たいていのタイプのアプリケーションに適しています。Vert.xには幅広い目的があり、モバイル、Web、エンタープライズアプリケーションをターゲットにしています。Vert.xエコシステムで新機能を提供するモジュール数が増えることで、アプリケーションを書く人、あるいは従来のプラットフォーム(JavaEEやRails)を検討している人にとって、Vert.xがさらに人気のある選択肢になることを期待しています。
現在、WebアプリケーションにVert.xを検討している人がたくさんいます。具体的には、優れたパフォーマンスで多数のコネクションをサポートする必要がある、サーバプッシュ型のアプリケーションです。Vert.xはノンブロッキングをうまくサポートしており、この分野では本当に優れています。
InfoQ: Vert.x(あるいはNode.js)について議論するときによく質問されるのですが、通常のJEEスタックと比べて、実際どれくらいメリットがあるのでしょうか? 先ほど挙げたアプリケーションの場合、ハードウェアはどれくらいセーブできるのでしょうか? あるいは、どれくらいのトラフィックを処理できるのでしょうか?
Tim氏: そうした質問に答えるのは非常に難しいです。その値はアプリケーションに大きく依存するためです。たとえば大量のコネクションをさばくような、高スループットのアプリケーションの場合(ソーシャルネットワークアプリはよい例です)、ノンブロッキングのアプローチが不可欠になります。従来のアプリケーションプラットフォームでは、そう単純には実現できません。
しかし、パフォーマンスやスケーラビリティがすべてではありません。確かに、多くのアプリはこのレベルのスケーラビリティを必要としません。そうしたアプリの場合にも、Vert.xはアプリケーション開発に軽くて新たなアプローチにメリットをもたらします。Vert.xは非常に軽量で、取りかかりやすく、最小限の設定で使えます。これはJavaEEのアプローチとはまったく異なるアプローチであり、開発者にとって非常に魅力的で、マーケットが動いている方向であると思います。Vert.xは既存のJavaアプリケーションに組み込むことまでできるのです。
InfoQ: 非同期性というコンセプトを活用するのに、特別なOSサポートは必要ですか?
Tim氏: 特別なOSサポートは必要ありません。
InfoQ: 2013年の始めに、Vert.xの将来についてディスカッションしました。その最終結果について、少し話してくれませんか?
Tim氏: すべては本当にうまく解決されました。メインのVert.xプロジェクトは中立の組織、Eclipse Foundationに移っており、特定の企業にコントロールされていません。Red HatとVMwareから来た開発者がEclipseプロジェクトのコア開発者として取り組んでいます。
トレードマークはEclipseに移管されました。Eclipseはできるだけ面倒をかけずに移行しようとしています。たとえば、私たちはgithubでプロジェクトを運用し続けることができます。したがって、日々の活動はこれまで通り継続できます。この数週間で、Eclipseへの移行は完了する予定です。
Tim Fox氏はVMWareで働いていた2011年にVert.xを開始した。彼は今もVert.xプロジェクトを率いているが、現在はRed Hatの上級主席ソフトウェアエンジニアだ。