対象読者
Javaのフレームワークというと、いまだにStrutsに代表されるServletベースのMVCフレームワークを経験されている方がほとんどだと思います。
Node.jsも経験されている方であれば比較的理解しやすいかもしれませんが、ここでは「伝統的な同期型のマルチスレッドプログラミングになれているJavaプログラマー」を対象とし、Vert.xのアーキテクチャを理解して実際にアプリケーションを作成する手助けになることを目指していきます。
なお、この記事は執筆時点で最新の安定版である2.1.5を前提に記述していきます。
Vert.xのインストール
Vert.xは、2012年5月に1.0、2013年に2.0がリリースされ、現在3.0が開発中のまだまだ若く枯れていないオープンソースです。
公式サイトのインストール解説を見てもらえば早いとは思いますが、簡単にインストール手順を説明しておきます。
- 公式サイトのダウンロードページから必要なバージョンを選択し、ダウンロードサイトを表示します。今回は、2.1.5になります。
- ダウンロードサイトで、自分の環境に応じてtar.gzかzipファイルをダウンロードします(wgetやcurlで構いません)。
- ダウンロードしたファイルを任意の場所に展開すればインストールは完了です(ここでは、Windows上で「C:\tools\vert.x-2.1.5」を展開先とし、同パスを環境変数VERTX_HOMEとして登録しておきます)。
- 環境変数PATHに${VERTX_HOME}/binを追加すれば、vertxコマンドで起動できるようになります。
Vert.xの特徴
まずは、Vert.xの公式サイトにも書かれている特徴、売り文句を簡単にご説明します。
特徴 | 説明 |
---|---|
Polyglot |
多言語対応と訳せばよいでしょうか。 Vert.xのアーキテクチャは独立した各モジュールがイベントバスを経由してメッセージを送りあう形で処理を行います。 このモジュールを作成するのにJavaである必要はありません。JVM上で動く言語であればほとんどのプログラミング言語で開発が可能となっています。 現在、Java以外にサポートされている言語として、JavaScript、CoffeeScript、Ruby(JRuby)、Python(Jython)、Scala、Groovy、Clojure、PHP(Quercus)、Ceylonなどがあります。 |
Simplicity | nettyをベースにしたノンブロッキングI/O対応のアプリケーションが、複雑な記述をせずによりシンプルに作成できます。 |
Scalability |
NettyのノンブロッキングI/Oを使用しているため、大量の接続を最小限のスレッド数で処理できます。 メッセージを仲介するEventBusは内部でHazelcastの機能を利用して分散EventBusとすることができ、Clusterによる冗長構成(負荷分散)が可能になっています。 |
Concurrency |
同時並行性。 各モジュールはシングルスレッドで動作し、モジュール間はメッセージパッシングによるアクターモデルに似たシンプルなプログラミングで作成できます。 シングルスレッドで動作する前提になるため、synchronizedやvolatileも不要になります。 |
非常に魅力的な特徴かと思いますが、もちろん何も考えずに作成すればいいわけではなく、一定のルールに従って開発することで実現できます。
開発前の準備
Vert.xは単なるJavaのライブラリーではなく、独立したプラットフォームとして扱う必要があるため、最初の開発環境作りにはテンプレートプロジェクトを利用するのが簡単です。gitでこのプロジェクトをcloneすれば最初の準備は完了です(名前は適宜変えましょう)。後は任意に使いやすいIDEで取り込んでみましょう。
Eclipseで取り込んだ場合、下の図のようになります。
注意事項として、このテンプレートはGradleを使用しているため、使ったことがない方には抵抗があるかもしれません。また、IDEによってGradle用のプラグインがありますので活用してください。