元々groovyはジャズミュージシャンの間で使われていたスラングで、「素敵な・格好いい」という意味を持つ形容詞です。

誰かがグルービーな演奏だといえば、それは多彩なリズムにより生み出される音のうねりが、溶け合い調和する素晴らしい演奏でしょう。

星を背景にしたGroovyのロゴはまるでバンドのロゴのようです。

さて本記事はGroovy入門と題しまして、基礎文法から学習方法に至るまで徹底解説をして参ります。

Spring BootやGradleで少しだけ扱ったことがあるという方も、この記事をきっかけにGroovyな使い方ができるようになりましょう。


Groovyとは

Apache GroovyはJavaプラットフォームで動作するRubyライクなプログラミング言語です。端的に表現するなら「Java版スクリプト言語」。

このオープンソースソフトウェアは、Apache License 2.0のもとで公開されています。

日本においてGroovyを導入しているのは、NTTテクノクロスをはじめとするNTTグループ企業です。

世界的にはGoogle・IBM・LinkedIn・Oracle・Netflixなどの有名な企業がGroovyを活用しています。


Groovyの特徴

Groovyに備わっている特徴的な機能について見ていきましょう。


動的型付けと静的型付け両方のサポート

Groovyは動的型付けのスクリプト言語です。変数や関数の返り値の型はプログラムが実行されるタイミングで動的に決定されます。

変数を宣言するときに明示的な型指定が行われた場合は、コンパイル時に型チェックを行う仕様です。


Groovy Ecosystem

GroovyエコシステムはGroovyを取り巻くプロジェクト郡から成り立っています。

Groovy Grapesはモジュール管理ツールです。Mavenリポジトリにあるライブラリの依存関係を管理します。

GroovyServはGroovy製プログラムの起動時間を短縮するツールです。

あらかじめJVMプロセスをサーバーとして起動しておき、Groovyプログラムを処理することで処理時間が短縮されます。


Groovyの用途

Groovyは主にWebアプリケーションとドメイン固有言語に利用されます。

Groovy Android Gradle Pluginは既に非推奨です。GroovyはJetBrainsとGoogleをサポートするKotlinを支持しています。


Webアプリケーション

Ruby on Railsの影響はRubyに留まらず、他の言語にも拡大しました。Grailsフレームワークもその1つです。

Grailsはプログラミング言語にGroovyを採用しています。

開発初期はGroovy on Railsと呼ばれていたRailsライクなWebアプリケーションフレームワークです。

アーキテクチャやコマンドが非常によく似ています。

GrailsはScaffold(スキャフォールド)機能も輸入しており、開発期間を大幅に短縮できるのがメリットでしょう。


ドメイン固有言語として

ドメイン固有言語(Domain Specific Language・DSL)は、特定の業務・用途に特化させたコンピュータ言語です。

Groovyをホスト言語とした組み込みDSL(内部DSL)を設計・定義することができます。これはGroovy DSLとも呼ばれるものです。

DSLはMastercard・JP Morgan・Fannie Maeなどの金融機関システム、がん研究所の科学的なシミュレーションなどに利用されます。


Groovyのメリット

Groovyのメリットについて見ていきましょう。


Javaとの親和性が高い

Groovy登場以前からJython・JRubyなどのスクリプト言語が開発されていました。これらを利用しても開発速度は向上します。

しかしGroovyがこれらのスクリプト言語と異なる点は、Javaとの親和性を持つが故に生ずる互換性と流用性の高さです。

GroovyはJavaの上位互換言語のため、Java製のコードはGroovyでそのまま動かせます。JavaのAPI・ライブラリの呼び出しも可能です。


緩やかな学習曲線

既にJava開発者はGroovyを半分習得しているといっても過言ではないでしょう。

ただしRubyライクな考え方、「GroovyにはあってJavaにはない部分」を別途学ぶ必要はあります。

また学習曲線が高い他のプログラミング言語と比較しても、学習コストが低めで採用しやすい言語です。


Groovyのデメリット

Groovyのデメリットについて見ていきましょう。


技術書・ドキュメントが少ない

学習するにしろ開発するにしろ、Javaの習得が前提になってきます。公式ドキュメントはJava経験者を対象にした内容です。

日本語の記事や特集は2010年前後、Groovyが一時的に注目されていた頃のものが多く、Groovy 3.0を扱う記事もほとんど見つけられません。

最新のGroovyを習得するには、英語のドキュメントを読むスキルが求められるでしょう。


知名度が低い

JavaでWebアプリケーションといえば、皆一様にPlay Framework・Spring Frameworkなどの有名なフレームワークを上げるでしょう。

そこにGrailsの名前は出てきませんし、Groovyの名前を聞くのはGradleのビルドファイルを書こうとして調べたときくらいです。

Groovyの案件を見かける機会はほとんどありません。


Groovyのセットアップ

本項ではJavaのパッケージ管理ソフトウェアSDKMAN!を使用して、Debian環境にGroovyをインストールしましょう。

動作確認環境の情報は以下です。

  1. $ cat /etc/issue
  2. Debian GNU/Linux 8 \n \l
  1. $ java -version
  2. openjdk version “1.8.0_111”
  3. OpenJDK Runtime Environment (build 1.8.0_111-8u111-b14-2~bpo8+1-b14)
  4. OpenJDK 64-Bit Server VM (build 25.111-b14, mixed mode)


SDKMAN!のインストール

まずSDKMAN!をインストールします。zip・unzipがないとインストールが途中で中断してしまうので注意して下さい。

インストールが終わった後に「Enjoy!!!」と表示されていれば、全て正常に完了しています。

  1. $ apt update
  2. $ apt install -y zip unzip
  3. $ curl -s get.sdkman.io | bash

バージョン確認のコマンドを実行するには、コンソールを開き直すか.bashrcの設定変更を反映して下さい。

  1. $ source ~/.bashrc
  2. $ sdk version
  3. SDKMAN 5.7.4+362


Groovyのインストール

次にGroovyをインストールします。sdk listコマンドを使用するとインストール可能なパッケージの一覧を表示できます。

また特定のライブラリ名を指定すると、インストール可能なバージョンが一覧で表示されます。

  1. $ sdk list
  2. $ sdk list groovy

バージョンを決めたらsdk installコマンドでGroovyをインストールしましょう。

  1. $ sdk install groovy
  2. Downloading: groovy 3.0.3
  3. In progress…
  4. (中略)
  5. Setting groovy 3.0.3 as default.
  6. $ groovy -version
  7. Groovy Version: 3.0.3 JVM: 1.8.0_111 Vendor: Oracle Corporation OS: Linux

これでGroovyコマンドが実行できるようになりました。


Groovyの使い方

まずは基本の使い方を説明します。


Groovyスクリプトの実行

「Hello, world!」を出力してみましょう。helloworld.groovyファイルを作成して下さい。

  1. println “Hello, world!”

保存したスクリプトファイルを実行します。コマンドは「groovy ファイル名」です。

  1. $ groovy helloworld.groovy
  2. Hello, world!

実行結果「Hello, world!」がコンソール上に出力されました。


Groovyのコンパイル

前項のスクリプトをコンパイルしてみましょう。

  1. $ groovyc helloworld.groovy
  2. $ ls
  3. helloworld.class
  4. helloworld.groovy

コンパイル後のhelloworld.classを実行するには、以下のように.classを指定しないでコマンドを打ちます。

  1. $ groovy helloworld
  2. Hello, world!


クラスを定義する

今度はクラスを定義してみましょう。

  1. class HelloWorld {
  2.   static main(args) {
  3.   println “Hello, class!”
  4.  }
  5. }

 同様に実行します。

  1. $ groovy helloworld.groovy
  2. Hello, class!


Groovyの基礎文法

文字数の関係上全てを紹介することはできないので、本記事では変数とクロージャを取り出して解説しましょう。


変数

動的型付けにおける変数宣言は、以下のように記述します。

  1. def str = “Hello, variable!”
  2. println str

静的型付けでは以下のようなコードです。

  1. Integer num = 100
  2. println num

コマンド実行して出力結果を確認してみましょう。


クロージャ

クロージャ(Closure)はGroovyにおいて重要な概念です。

まずはクロージャがどんなものか見てみましょう。以下は引数付きのクロージャのコードです。

  1. Closure clj = {String name ->
  2.    println “Hello ${name}!”
  3. }
  4. clj(“closure”)
  1.  $ groovy helloclosure.groovy
  2. Hello closure!

JavaScript ES2015のアロー関数と似ています。

次にリスト関連のメソッドでの使われ方を見てみましょう。

  1. List<Integer> list = [1, 2, 3]
  2. .
  3. list.each() {
  4.   println it * 3
  5. }
  6. .
  7. Closure clj = {
  8.  println it * 4
  9. }
  10. list.each(clj)

上のeachと下のeachは書き方が異なるだけで、行っている処理は同じです。リストの各値に特定の数字を乗じて返却しています。


Groovyの学習方法

デメリットの項で説明した通り、日本語のドキュメントはほとんどありません。

あっても内容が古い場合があるので、学習の際は注意が必要です。


Apache Groovy チュートリアル

数少ない日本語のドキュメントになります。

Groovyについて体系的に詳しく説明している資料は、恐らくこれ以外に見つけられないでしょう。

チュートリアル・各機能の解説・外部ライブラリの利用・ユニットテストの書き方などが丁寧にまとめられています。


Tutorialspoint

TutorialspointはIT関連の教育コンテンツを提供するWebサービスです。

インドのハイデラバードという都市にあるTutorials Pointという企業が運営・保守を行っています。

創設者の資金提供や広告収入で利益を得ているため、基本的に無料で利用可能です。

ドキュメントは全て英語で記載されていますが、こちらも体系だった知識を得るのに有用なWebサイトでしょう。


公式ドキュメント

本家のドキュメンテーションです。

Java開発者向けのドキュメント・リファレンスになります。全て英語のドキュメントです。

Java初心者の方はある程度勉強してから戻ってくることをおすすめします。


おわりに

Groovyについて理解は進んだでしょうか。

もし最初からGrailsによるWebアプリケーション作成が目的なら、Grailsチュートリアルから足を踏み入れるのも良いかもしれません。

JavaでRailsライクな開発ができれば、開発効率を飛躍的に向上させることができるでしょう。

またGroovyもRubyライクで使いやすいお手軽なスクリプト言語です。Javaでちょっとしたスクリプトを書くのに重宝します。

Java開発に寄り添うツールとして、このGroovyな言語を習得してみてはいかがでしょうか。