Gradleの簡単な紹介
本筋ではありませんが「Gradle」を紹介しておくと、AntやMavenのようにXMLでビルド方法を定義するのではなく、Groovyで設定を記述するビルドツールです。Vert.xを利用した開発で最低限必要なのは依存関係の編集になりますが、Maven、Ivyと互換性を持ちながらもXMLよりも非常に簡易な記述が可能です。
テンプレートプロジェクトのルートディレクトリには、build.gradleという名前のファイルがあります。これがデフォルトのビルド定義ファイルです。このファイルを開き、dependenciesの記述を見てみます。
dependencies {
/*
Add your module jar dependencies here
E.g.
compile "com.foo:foo-lib:1.0.1" - for compile time deps - this will end up in your module too!
testCompile "com.foo:foo-lib:1.0.1" - for test time deps
provided "com.foo:foo-lib:1.0.1" - if you DON'T want it to be packaged in the module zip
*/
// If you're creating Groovy compiled verticles you may need the following dependencies
provided "org.codehaus.groovy:groovy-all:$groovyVersion"
provided "io.vertx:lang-groovy:$groovyLangModVersion@jar"
}
この記述は、テンプレートのsrcに入っているGroovyのサンプルプログラム用のものです。Javaのみで開発を行う際には、providedの2行は削除してしまって構いません。
このdependenciesに囲われた中にモジュールの開発に必要なライブラリを記述していくことになります。具体的に、まずは簡単にコンパイル用にSLF4J、実行時用にLog4j 2を追加してみます。ついでにテストコンパイル用のライブラリとしてJUnitを追加すると、下記のようになります。
dependencies {
compile 'org.slf4j:slf4j-api:1.7.7'
runtime 'org.apache.logging.log4j:log4j-core:2.1'
runtime 'org.apache.logging.log4j:log4j-slf4j-impl:2.1'
testCompile 'junit:junit:4.11'
}
テンプレートを動かしてみる
テンプレートの中には、いくつかサンプルソースが入っていますので、まずはそのままビルドして動かしてみます。build.gradleの中身は何も変更せず、gradlewコマンドでビルドします。vertx-gradle-templateをクローンしたディレクトリに移動し、コマンドを打つだけです。
gradlew build
ちょっと時間がかかると思いますが、最後にBUILD SUCCESSFULが表示されれば完了です。ビルド成果物はbuildディレクトリの配下にできていますので確認してみてください。そのまま動かすことができるモジュールは、build/mods配下にできています。
com.mycompany~my-module~1.0.0-finalがJavaとGroovyのビルド結果です。
そのほかのio.vertx~系のものはJavaScript、Ruby、Pythonのスクリプトを動かすために自動的にダウンロードされた言語モジュールになります。
次にこのまま起動といきたいところですが、テンプレートを起動してもそのまま待機状態になってしまい、動きが分かりません。そこで、1つスクリプトを作成します。
ping.js
var vertx = require('vertx');
var eventBus = require('vertx/event_bus');
var container = require('vertx/container');
var console = require('vertx/console');
console.log('start');
container.deployModule('com.mycompany~my-module~1.0.0-final');
vertx.setTimer(5000, function(time) {
eventBus.send('ping-address', 'ping', function(reply) {
console.log(reply);
container.exit();
});
});
実行の前に、ビルドしたモジュールの格納先を指定するために環境変数を設定してください。
set VERTX_MODS=build\mods
それでは実行します。
vertx run ping.js
下記のように表示され、プロセスが終了すれば成功です。
start Succeeded in deploying verticle PingVerticle started Sent back pong pong!
JavaScriptとJavaのプログラムでコラボレーションできることを確認できました。ここでは動作する環境の確認のみで詳しい説明はまた後の回とします。
まとめ
今回は、Vert.xのテンプレートを利用し、とりあえず動く環境を作成し、実行までを確認してみました。次回は、このテンプレートを含め、Vert.xがどういう仕組みで動いているのかをもう少し深く説明してみたいと思います。
