Groovy 入門:Java プラットフォームでのスクリプティング完全ガイド
Groovy とは?
Apache Groovy は、Java 構文互換のオブジェクト指向言語で、JVM 上で動作します。Java バイトコードにコンパイルされるため、Java Runtime Environment があればどこでも実行可能です。Groovy は動的型付け、クロージャ、DSL サポート、簡潔な構文を追加し、Java の置き換えではなく理想的な伴侶となります。
なぜ Groovy を使うか?
- 動的でアジャイルな言語、高速プロトタイピングに最適
- 既存 Java ライブラリとシームレスに統合
- Java 開発者にとって自然—学習曲線が最小限
- Java より簡潔で表現力豊かなコード
- Java と自由に混在可能—必要な分だけ使用可能
Groovy の歴史
- 2003 年 – Bob McWhirter と James Strachan が開発
- 2004 年 – JSR 241 としてドラフト化(後に放棄)
- 2005 年 – Jeremy Rayner と Guillaume Laforge が復活
- 2007 年 – 1.0 リリース
- 2012 年 – 2.0 リリース
- 2014 年 – 2.3(Java 8 サポート)
- 2015 年 – Apache Software Foundation プロジェクトに
Groovy の主要機能
- リスト、マップ、範囲、正規表現のリテラル構文
- マルチメソッドとメタプログラミング機能
- 動的およびオプションの静的型付け
- 演算子オーバーロードと簡潔な構文(多くの場合セミコロンや括弧不要)
- クロージャとメタオブジェクトプロトコルによる強力なスクリプティング
- Java バイトコードとライブラリとの完全互換
Groovy のインストール方法
- Java がインストール済みか確認 – Java インストールガイド
- Groovy ダウンロードページからインストーラーをダウンロード
- インストーラー実行、言語選択、OK クリック
- ウェルカム画面で NEXT クリック

- ライセンス条項に同意

- インストールコンポーネント選択、NEXT

- インストールディレクトリ選択、NEXT

- スタートメニューフォルダ設定、NEXT

- インストール完了(パスはデフォルト)、NEXT

- インストール後、スタートメニューから Groovy Console を起動して確認

Groovy Hello World
Java 版:
public class Demo {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
Groovy 版—たった1行:
println "Hello World."
Groovy ではセミコロン、括弧、冗長な System.out.println が不要です。
変数
Java では明示的な型が必要:
public class Demo {
public static void main(String[] args) {
int x = 104;
System.out.println(x);
// x = "Guru99"; // コンパイルエラー
}
}
Groovy は def で動的型付けをサポート:
def x = 104 println x.getClass() x = "Guru99" println x.getClass()
出力:
class java.lang.Integer class java.lang.String
複数行文字列はトリプルクォート:
def x = """Groovy at Guru99""" println x
演算子
Groovy は標準的なカテゴリをサポート:
- 算術:
+ - * / % - 関係:
== != < <= > >= - 論理:
&& || ! - ビット演算:
& | ^ ~ - 代入:
= += -= *= /= %=
ループ
Java for ループ:
for (int i = 0; i <= 5; i++) {
System.out.println(i);
}
Groovy 相当:
0.upto(4) { println "$it" }
2.upto(4) { println "$it" }
5.times { println "$it" }
0.step(7, 2) { println "$it" }
条件分岐
| 文 | 説明 |
|---|---|
| if | 条件が真なら実行 |
| if/else | 真なら if 分岐、偽なら else 分岐 |
| nested if | 複数の条件分岐 |
| switch | 多分岐ロジックのクリーンな代替 |
| nested switch | Groovy でサポート |
リスト
リストは順序付き参照コレクションで、角括弧で定義:
- 文字列リスト:
['Angular', 'Nodejs'] - 混在リスト:
['Groovy', 2, 4.6] - 整数リスト:
[16, 17, 18, 19] - 空リスト:
[]
一般的なリストメソッド:
| メソッド | 説明 |
|---|---|
| add() | 末尾に値追加 |
| contains() | 値が存在すれば true |
| get() | インデックス位置の要素 |
| isEmpty() | 要素なしなら true |
| minus() | 指定要素を除いた新リスト返却 |
| plus() | 要素追加した新リスト返却 |
| pop() | 最後の要素削除 |
| remove() | インデックス位置の要素削除 |
| reverse() | 反転リスト返却 |
| size() | 要素数 |
| sort() | ソート済みコピー返却 |
例:
def y = ["Guru99", "is", "Best", "for", "Groovy"]
println y
y.add("Learning")
println(y.contains("is"))
println(y.get(2))
println(y.pop())
出力:
[Guru99, is, Best, for, Groovy] true Best Learning
マップ
マップはキー・バリューペアのコレクション:
- 例:
[Tutorial:'Java', Tutorial:'Groovy']– キーTutorialに2つの値 - 空マップ:
[]
マップメソッド:
| メソッド | 説明 |
|---|---|
| containsKey() | キーの存在確認 |
| get() | キーの値返却 |
| keySet() | キーのセット |
| put() | キー/値ペア追加または置換 |
| size() | エントリ数 |
| values() | 値のコレクション |
例:
def y = [fName:'Jen', lName:'Cruise', sex:'F']
print y.get("fName")
出力:
Jen
クロージャ
クロージャはオブジェクトとして扱われるコードブロックで、ラムダに似ています。
シンプルなクロージャ:
def myClosure = { println "My First Closure" }
myClosure()
パラメータ付き:
def sum = { a, b, c -> return a + b + c }
println sum(1, 2, 3)
出力:
6
Groovy vs Java
| Groovy | Java |
|---|---|
| デフォルトアクセス修飾子は public | デフォルトはパッケージプライベート |
| フィールドのゲッター/セッター自動生成 | 手動定義必要 |
| ダブルクォートで文字列補間 | 補間なし |
| 型付けはオプション | 型付け必須 |
| セミコロン不要 | セミコロン必須 |
すべてのスクリプトは自動的に Script クラスを拡張 | 実行には public static void main 必須 |
よくある誤解
| 誤解 | 現実 |
|---|---|
| Groovy はスクリプト専用 | 多用途:Web フレームワーク、データ処理などで使用 |
| Groovy は純粋関数型 | 関数型概念を借用だが OOP 言語 |
| Groovy は TDD にのみ最適 | TDD サポートだが多くのシナリオで有用 |
| Groovy は Grails 限定 | Grails は人気フレームワークだが Groovy は独立動作 |
Groovy のデメリット
- JVM 起動が遅く、クイックスクリプトに影響
- Java エコシステム外では普及していない
- IDE なしでは不便
- 実行時パフォーマンスが Java より劣る場合
- メモリフットプリントが大きい
- 効果的な使用には Java 知識が必須
必須 Groovy ツール
- groovysh – インタラクティブなコマンドラインシェル
- groovyConsole – スクリプト実行用 Swing GUI
- groovy – スクリプト実行用コマンドラインインタープリタ
使用例:
groovysh
- ステートメントやスクリプト全体をインタラクティブに入力
groovyConsole
- コード記述・実行用ミニマルエディタ
groovy
- コマンドラインから Groovy スクリプト実行
まとめ
- Groovy は Java プラットフォーム向けのオブジェクト指向言語
- Java ライブラリとシームレスに統合
- 主な機能:動的型付け、クロージャ、リテラル構文
- 標準演算子、制御フロー、コレクション、マップをサポート
- ゲッター/セッター自動化とボイラープレート排除
- パフォーマンス面でのトレードオフはあるが、生産性向上は大きい
- groovysh、groovyConsole、groovy インタープリタなどのツールが開発を効率化
Java
- Raspberry Pi で障害物回避ロボットを自作 – 初心者ガイド
- 金属製造入門:初心者向け完全ガイド
- 初心者向けCNCルーター:容易な精度で市場をマスター
- PowerShell 入門: 強力なスクリプティングのための初心者ガイド
- C言語マスター:初心者向け包括的PDFチュートリアル
- Java forループをマスター:構文、例、ベストプラクティス
- Java配列チュートリアル:宣言、生成、初期化の完全ガイド
- Java スタック vs ヒープ:メモリ割り当て実践ガイド
- Java 拡張 for 文(for-each):カウンターなしで配列反復をシンプルに
- Javaでアームストロング数を判定・列挙するプログラム
- Javaで回文数を判定する:while文とfor文を使ったアルゴリズム