Java のインタラクティブシェル (REPL) としての Groovy | パークのソフトウエア開発者ブログ|ICT技術(Java・Android・iPhone・C・Ruby)なら株式会社パークにお任せください

パークのソフトウエア開発者ブログ|ICT技術(Java・Android・iPhone・C・Ruby)なら株式会社パークにお任せください

開発の解決方法や新しい手法の情報を、パークのエンジニアが提供します。パークのエンジニアが必要な場合は、ぜひお気軽にお問い合わせ下さい。 株式会社パーク:http://www.pa-rk.co.jp/

こんにちわ、ちかです

Groovy は DSL としてしか生き残れないだろうと
勝手に想像しているちかですが
そもそも JVM 嫌いで自分の PC には JRE も入れたくない私の戯言は置いといて

Java とほぼ互換性のあるスクリプト言語 Groovy は
Java のインタラクティブシェルとして使えると思います。

ということで
まずはインストールから。

私はチョコ好きなので Chocolatey からインストールします。
バレンタインデー症候群の方は yum なり brew なり公式サイトなりからどうぞ。

C:\Windows\system32>cinst groovy
Installing the following packages:
groovy
By installing you accept licenses for the packages.

groovy v2.3.6
The package groovy wants to run 'chocolateyInstall.ps1'.
Note: If you don't run this script, the installation will fail.
Note: To confirm automatically next time, use '-y' or consider setting
 'allowGlobalConfirmation'. Run 'choco feature -h' for more details.
Do you want to run the script?
 1) yes
 2) no
 3) print
1
 Adding 'C:\bin\groovy-2.3.6' to the path and the current shell path
 Downloading groovy 32 bit
   from 'http://dl.bintray.com/groovy/maven/groovy-binary-2.3.6.zip'
 Extracting C:\Users\chica\AppData\Local\Temp\chocolatey\groovy\2.3.6\groovyInstall.zip to C:\bin...
 7-Zip (A) 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
 Processing archive: C:\Users\KAZUTO~1.TAK\AppData\Local\Temp\chocolatey\groovy\2.3.6\groovyInstall.zip
 Extracting  groovy-2.3.6
 Extracting  groovy-2.3.6\NOTICE.txt
 Extracting  groovy-2.3.6\LICENSE.txt
 Extracting  groovy-2.3.6\lib
 Extracting  groovy-2.3.6\lib\groovy-2.3.6.jar

(中略)

 Extracting  groovy-2.3.6\META-INF
 Everything is Ok
 Folders: 7
 Files: 84
 Size:       36558735
 Compressed: 32927161
 C:\bin
 警告: Write-ChocolateySuccess is deprecated. If you are the maintainer, please remove it from your package file.
 The install of groovy was successful.

Chocolatey installed 1/1 package(s). 0 package(s) failed.
 See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log).

C:\Windows\system32>

インストールできたら
インタラクティブシェル Groovysh を起動します。

C:\Windows\system32>groovysh
Groovy Shell (2.3.6, JVM: 1.8.0_66)
Type ':help' or ':h' for help.
-----------------------------------------------------------------------------------------------------------------------
groovy:000>

Groovy では
java.io.* と java.util.* がデフォルトで使えて
ArrayList や LinkedHashMap がリテラルで記述できるので
Java の標準ライブラリを手軽に試すことができます。

groovy:000> Math.sin(Math.PI / 2)
===> 1.0
groovy:000> [id: '001', name: 'chica'].get('name')
===> chica

さらに
Groovy には Grape と呼ばれる依存関係管理のためのクラス群が含まれていて
Maven Central などにあるライブラリも手軽に試すことができます。

groovy:000> groovy.grape.Grape.grab(group:'org.apache.commons', module:'commons-lang3', version:'3.4')
===> null
groovy:000> import org.apache.commons.lang3.StringUtils
===> org.apache.commons.lang3.StringUtils
groovy:000> StringUtils.isEmpty(null)
===> true
groovy:000> StringUtils.isEmpty('')
===> true
groovy:000>

Java 8 のラムダ式は使えません。
代わりにクロージャを使います。
(Groovy ではコレクション操作に Groovy JDK API のメソッド群を使うことが多いと思いますが、 (残念なことに先行評価版しかないし、) 今回は Groovy の機能紹介ではなく Java の機能を試す用途で Groovy を使ってみることが目的なので触れません。)

groovy:000> import java.util.stream.*
===> java.util.stream.*
groovy:000> ['abc', 'def', 'ghi'].stream().map({it.toUpperCase()}).collect(Collectors.toList())
===> [ABC, DEF, GHI]
groovy:000>

終了するときは :exit または :x と入力します。

groovy:000> :exit

C:\Windows\system32>

ところで
Windows で Groovysh を使うと瞬時に気付くことなのですが
非常に残念なことに
Windows 版では矢印キーが効きません。

↑↓キーで入力履歴を辿れないばかりか (代替: Ctrl+P / Ctrl+N)
←→キーでキャレットの移動もできません (代替: Ctrl+B / Ctrl+F)
(Groovysh 2.1.9 までは動いていたみたいですね... こんな大きなデグレードが 2 年間も修正されないところに活気のなさが表れているような...)

とてつもなく入力しづらいと言わざるを得ませんが...
ライブラリを試す用途であれば
使ってみる価値はあるのではないでしょうか。
でわでわ。