はじめに
便利そうなJavaのライブラリ、がっつりと使うその前に、ちょっとだけ使用感や機能を試してみたり、サンプルを動かしてみたいという時はありませんか?そんな時、私はJVM言語のGroovyでライブラリを試します。
JVM言語Groovyは、Javaとの高い親和性を持っています。また、GString、拡張されたコレクションライブラリ、GDKや便利な演算子など様々な機能もあり、柔軟で簡潔な記述でのコーディングが可能です。
本投稿では、私がJavaのライブラリをガッツリ使う前にちょっと試したい時は、Groovyを使えばいいと思う理由を、RxJavaを例に挙げ紹介します。
スクリプトで簡潔に書ける
Groovyはスクリプト形式でコーディングできます。
次のようなsampleRxJava.groovyファイルを作ります。
println "Hello RxJava!"
コマンドラインで次のようにタイプすると、
groovy sampleRxJava
以下のように表示されます。
Hello RxJava!
JavaでIntelliJ IDEAやEclipseを使う場合、まずそれらを起動して、プロジェクトを作成して、次のようなクラスを作って、mainメソッドを定義すると思います。
package sample.rx_java;
public class SampleRxJava {
public static void main(String[] args){
System.out.println("Hello RxJava!");
}
}
IDEを使わない場合も、javaファイルを作り、クラス定義して、mainメソッド着くって、コンパイルして、実行してと、Groovyのスクリプトを使う場合よりも、いくらか手順が必要ですね。
Groovyの場合、Javaのようにクラスやmainメソッドを定義しなくても、次のようにトップレベルにいきなりコードを書くこともできます。このようなコードを「スクリプト」と言います。
println "Hello RxJava!"
ちょっとしたコードスニペットや、サンプルコードを試したい時、いきなりそのコードを記述することが可能です。
Grapeでモジュール・ライブラリを使いはじめることができる
さて、「はじめに」で書いた通りRxJavaを使ってみます。(Groovy 2.3.7で動作させることが前提です。)
RxJavaのライブラリ(モジュール)を使うために、Grapeを用います。Groovyスクリプトの先頭に次のような記述をします。
@Grab(group='com.netflix.rxjava', module='rxjava-core', version='0.20.4')
GrapeはGroovyは標準モジュール管理のメカニズムです。上記のように、Groovyのコード中に必要なモジュールをアノテーション宣言することで、モジュールの使用準備をすることが可能です。
sampleRxJava.groovyを次のように記述します。
@Grab(group='com.netflix.rxjava', module='rxjava-core', version='0.20.4')
import rx.Observable
import rx.functions.Action1
Observable.from("Taro", "Jiro", "Saburo").subscribe { println "Hello $it"}
ターミナルで次のように実行します。
groovy sampleRxJava
実行結果は次の通りです。
Hello Taro
Hello Jiro
Hello Saburo
こんな短い記述で、RxJavaを使い始めることが可能です。
Grapeによりアノーテーションを記述するだけで、MavenCentralやJCenterなどからJarをダウンロードし、そのライブラリを利用することが可能です。
Gradleによるモジュール管理も非常に短い記述でライブラリを使い始めることが可能ですね。しかしスクリプトファイルなどのコードとは別のbuild.gradleなどに依存するモージュルを書くGradleに比べて、Grapeによるモージュル管理はスクリプト内にアノーテーションを書くだけで良く、非常に簡潔で、書くのも簡単ですね。
Groovy Shellで対話的に試せる
Groovy Shellを使えば、Groovyのコードを対話的に試すことが可能です。
ターミナルで次のように入力し実行すると、対話シェルが起動します。
groovysh
次のように、対話的に試すことが可能です。
groovy:000> 1 + 1
===> 2
groovy:000> a = 3
===> 3
groovy:000> b = 2
===> 2
groovy:000> a + b
===> 5
groovy:000> name = "Ryota"
===> Ryota
groovy:000> println "Hello ${name}!"
Hello Ryota!
===> null
対話シェルでRxJavaを使ってみます。まずGrapeでRxJavaを使う準備をします。Groovy Shellではアノテーションでなく、次の用にメソッド形式を使う必要があります。(GrapeのUsing Grape From the Groovy Shellより)
groovy:000> groovy.grape.Grape.grab([group:'com.netflix.rxjava', module:'rxjava-core', version:'0.20.4'])
===> null
groovy:000> import rx.Observable
===> rx.Observable
groovy:000> import rx.functions.Action1
===> rx.Observable, rx.functions.Action1
groovy:000> Observable.from("Taro", "Jiro", "Saburo").subscribe { println "Hello $it"}
Hello Taro
Hello Jiro
Hello Saburo
===> rx.observers.SafeSubscriber@32811494
Groovy Shell上で、Grapeを使ったり、import文を書いても良いのですが、若干冗長です。
私のオススメは、例えばrxjavaModuleSetting.groovyという名前で次のようなファイルを用意して、
groovy.grape.Grape.grab([group:'com.netflix.rxjava', module:'rxjava-core', version:'0.20.4'])
import rx.Observable
import rx.functions.Action1
Groovy Shellを起動して
groovysh
loadコマンドでrxjavaModuleSetting.groovyを読み込んでから、
groovy:000> :load rxjavaModuleSetting.groovy
===> null
===> rx.Observable
===> rx.Observable, rx.functions.Action1
対話的に試す方法です。
groovy:000> Observable.from("Taro", "Jiro", "Saburo").subscribe { println "Hello $it"}
Hello Taro
Hello Jiro
Hello Saburo
===> rx.observers.SafeSubscriber@47a5b70d
まとめ
以上のような理由から、私はJavaのライブラリをガッツリ使う前、ちょっと試したい時は、Groovyを使うのがいいと思っています。
READMEやwikiに載っているサンプルコードやコードスニペット、ブログに載っている使い方を試しに使ってみたり、ちょっとそれらのコードを変えてみて試行錯誤する際は、GroovyスクリプトやGroovy Shellが最適では無いでしょうか。
今回は、IDEを使っていません。もちろんガッツリと開発する際はIDEのパワフルでリッチな機能を使うべきだと思います。
ためしにライブラリをちょっとだけ使ってみたい、そんな時はぜひGroovyで試してみてはいかがでしょうか。もちろん本番もGroovyでガッツリ開発することも良いと思います!