(Translated by https://www.hiragana.jp/)
Groovy - Wikipedia コンテンツにスキップ

Groovy

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』
Groovy
Groovyのロゴ
パラダイム オブジェクト指向しこうスクリプト言語げんご
登場とうじょう時期じき 2003ねん (2003)
設計せっけいしゃ Java Community Process
開発かいはつしゃ Guillaume Laforge(プロジェクトマネージャー けん JSR-241 リーダー)
最新さいしんリリース 4.0.21/ 2024ねん4がつ6にち (6かげつまえ) (2024-04-06)[1][2]
型付かたつ つよ動的どうてき型付かたつ
規格きかく JSR 241
影響えいきょうけた言語げんご JavaRubyPythonDylanSmalltalk
プラットフォーム Javaプラットフォーム
ライセンス Apache License v2.0
ウェブサイト The Apache Groovy programming language
拡張子かくちょうし groovy
テンプレートを表示ひょうじ

Groovy(グルービー)は、Javaプラットフォームうえ動作どうさする動的どうてきプログラミング言語げんごである。

Groovy処理しょりけいオープンソースソフトウェアであり、James StrachanBob McWhirter らを中心ちゅうしんに、オープンソース開発かいはつサイトであるコードハウスじょうで、2003ねん8がつ27にち開発かいはつ開始かいしされた(CVSへの最初さいしょのコミットがなされた)。その開発かいはつ主体しゅたいGuillaume LaforgeJeremy Rayner らにうつ開発かいはつつづけられている。2015ねん3月31にちまでは Pivotal がスポンサー企業きぎょうとなり、開発かいはつしゃをフルタイム雇用こようしていたが、3がつまつをもって終了しゅうりょうし、Apacheソフトウェア財団ざいだん管理かんり移行いこうした[3]

概要がいよう

[編集へんしゅう]

GroovyはJava仮想かそうマシン (JVM) じょう動作どうさする言語げんご処理しょりけいおよび言語げんご名称めいしょうであり、Javaとの直接的ちょくせつてき連携れんけい特徴とくちょうとする。たとえばGroovyからすべてのJava SE APIや、Javaでかれた任意にんいのサードパーティせいのコンパイルみのライブラリなどをすことができる。言語げんご記述きじゅつ能力のうりょくとしては、Javaで記述きじゅつできることは、無名むめい内部ないぶクラスの定義ていぎなど一部いちぶ例外れいがいのぞ基本きほんてきにGroovyでも記述きじゅつすることができる。ぎゃくうとJavaで記述きじゅつできない機能きのう記述きじゅつできないが、Javaと同様どうようC言語げんごなどでかれたネイティブメソッドなどはJNI経由けいゆすことができる。

Groovyは動的どうてき言語げんごであり、直接ちょくせつスクリプトを実行じっこうすることができる。Groovyコード断片だんぺんをコマンドラインにあたワンライナーとして実行じっこうすることも可能かのうである。なおこのとき中間ちゅうかんてきにJavaソースコードが生成せいせいされることはなく、バイトコードがメモリじょう生成せいせいされて直接ちょくせつ実行じっこうされる。また、groovycコマンド(groovyコンパイラ)を使つかってクラスファイルをあらかじめ生成せいせいしておくこともできる。いずれにせよGroovyコードは内部ないぶてきにはJavaバイトコード変換へんかんされてJVMじょう実行じっこうされる。

このとき、GroovyコードもJavaコードも、JVMからみると両方りょうほうともJavaバイトコードとして解釈かいしゃく実行じっこうされるという意味いみ区別くべつがない。Groovyのこのような仕組しくみから、GroovyはJavaときわめて親和しんわせいたかく、Java技術ぎじゅつつちかわれてきた開発かいはつインフラやライブラリ、ノウハウ、ツール、JVM最適さいてき技術ぎじゅつなどのおおくをそのまま流用りゅうようすることができる。Groovyから生成せいせいしたクラスファイルは通常つうじょうのクラスファイルであるので、Javaクラスファイル要求ようきゅうするプラグインなどをGroovyで記述きじゅつすることも容易よういである。

Groovyは、おな実行じっこうシステムを共有きょうゆうする、Javaコードのべつ表記ひょうきほうだとかんがえることもできる。

言語げんご仕様しよう

[編集へんしゅう]

Groovyの言語げんご仕様しようはJavaのそれをベースとしており、基本きほんてきにJavaプログラマにとってしたしみやすいものである。Groovyはスクリプト言語げんごとして大幅おおはば簡易かんいされた記述きじゅつゆるしている。以下いか簡略かんりゃく記述きじゅつ可能かのうとするGroovy言語げんご特徴とくちょうしめす。

  • 変数へんすうかた宣言せんげん不要ふようである。
    • 通常つうじょう場合ばあい - 宣言せんげんをしなかった場合ばあいObjectかたとしてあつかわれ、メソッドしは動的どうてきディスパッチによって解決かいけつされる(変数へんすうかた宣言せんげんをすることも可能かのうであり、静的せいてきなスタイルと動的どうてきなスタイルの場合ばあいおうじた使つかけることができる)。メソッドの引数ひきすうがえかた宣言せんげん同様どうようである。
    • @TypeChecked使用しようした場合ばあい - 変数へんすうかた指定していしなかった場合ばあいかた推論すいろんされ、かたただしいかどうかチェックされる。メソッドしは動的どうてきディスパッチのまま。
    • @CompileStatic使用しようした場合ばあい - 上記じょうきくわえて、メソッドしは静的せいてき解決かいけつされる。@ToString のようなコンパイルのメソッド生成せいせい通常つうじょうどお使つかえる。この3しゅなかでは最速さいそく
  • メソッドしの括弧かっこ省略しょうりゃくできる。
  • 行末ゆくすえのセミコロンは省略しょうりゃくできる。
  • リストマップ初期しょき記述きじゅつする構文こうぶんつ。
  • 演算えんざんのオーバーロード定義ていぎ(ユーザ定義ていぎ演算えんざん)が可能かのうである。
    • がたとしてリストやマップをあつかうことができ、それらのリテラル表記ひょうきや、それらを処理しょりする演算えんざん定義ていぎされている。
    • BigDecimalBigIntegerかたなどについては四則しそく演算えんざんがオーバーロード定義ていぎされている。
  • 検査けんさ例外れいがいthrows宣言せんげんされたメソッドをさいにも、try-catchかこんだり、がわメソッドをthrows宣言せんげんしたりする必要ひつようはない。
  • プリミティブがた参照さんしょうがた同様どうようあつかうことができる(明示めいじてき変換へんかんおこな必要ひつようはない)。
  • ifぶんwhileぶんさんこう演算えんざんc?x:y)の条件じょうけんぶしでは0やnullのにせとしてあつかわれる(booleanかたである必要ひつようがない)。
  • J2SEの正規せいき表現ひょうげんクラスをあつかうためのみの演算えんざん=~==~など)が用意よういされている。また構文こうぶんじょう特別とくべつあつかいされておりPerlやRubyと使用しようができる。
  • 文字もじれつ定数ていすうちゅう任意にんいのGroovyのしきむことができる。${}記法きほうもちいる。これをGStringとぶ。なお変数へんすうめい場合ばあいちゅう括弧かっこ不要ふようであり、"$変数へんすうめい"形式けいしき変数へんすう文字もじれつむことができる。
  • 名前なまえつき引数ひきすうでのメソッドし。
  • アクセス修飾しゅうしょくのデフォルトはpublicである。
  • java.langjava.iojava.mathjava.netjava.utilgroovy.langgroovy.util明示めいじてき指定していしなくても、暗黙あんもくてきにインポートされている。
  • groovyファイルで定義ていぎしたクラスはGroovyObjectインタフェース暗黙あんもくてき実装じっそうし、クラスのそと定義ていぎしたフィールドやメソッドはScript抽象ちゅうしょうクラス実装じっそうクラスのフィールドやメソッドとして定義ていぎされたとなされる。

クラス定義ていぎ

[編集へんしゅう]

Groovyコードはクラス定義ていぎちゅうにある必要ひつようはなく、クラス定義ていぎ外側そとがわ(トップレベル)でのメソッドの定義ていぎじつ行文こうぶん記述きじゅつ可能かのうである。

以下いか、ファイルめいが HelloTest.groovy であるとする。

println "Hello, World!"

記述きじゅつすると、下記かきおな意味いみつ。

class HelloTest {
    public HelloTest() {
        println "Hello, World!"
    }
    public static void main(String[] args) {
        new HelloTest()
    }
}

switchぶん

[編集へんしゅう]

switchぶん任意にんいかたたいして分岐ぶんきすることができるように拡張かくちょうされている(かたスイッチ)[4]

switch (value) {
case "Hello": 
   println "value == 'Hello'"
   break
case String: 
   println "valueはStringがた"
   break
case 1..12: 
   println "valueは1から12のあいだ"
   break
default:
   println "それ以外いがい"
}

forループ

[編集へんしゅう]

通常つうじょうforfor in がある。いずれもbreakぶんcontinueぶん使つかえる。@CompileStaticけた状態じょうたいでは、C言語げんごスタイルの for ループかつループ変数へんすうかたけた状態じょうたい最速さいそくであり、Java言語げんご同等どうとう速度そくどうごく。eachtimes はクロージャぶん時間じかんがかかる。

for (int i = 0; i < 3; i++) { println "$i: Hello" }
for (i in 1..3) { println "$i: Hello" }
(1..3).each { println "$it: Hello" }
3.times { println "$it: Hello" }

Getter, Setter

[編集へんしゅう]

Getter、Setterメソッドは自動じどう生成せいせいされる。フィールドアクセスの記法きほうでGetter、Setterメソッドをすことができる。

class Pojo {
    def name
}
def pojo = new Pojo(name:"名前なまえ")
println pojo.getName() // getName()が生成せいせいされている
println pojo.name // getName()がばれる

デフォルト引数ひきすう

[編集へんしゅう]

デフォルト引数ひきすう(メソッド・コンストラクタしチェインの自動じどう生成せいせい)。

def greet(mess = "Hello World") {
    println mess
}
greet()
greet("foo")

Hello World
foo

出力しゅつりょくされる。

ExpandoMetaClass

[編集へんしゅう]
def obj = "foo"
obj.metaClass.greet = { println "Hello World" }
obj.greet()

Groovyは実装じっそうのフィールドの参照さんしょう代入だいにゅう実装じっそうのメソッドの起動きどうをキャッチしGroovyObjectのメソッドを起動きどうする。

GroovyObject#getProperty(String name)
GroovyObject#setProperty(String name, Object value)
GroovyObject#invokeMethod(String name, Object arguments)

以下いか、Expando を使用しようしたれいである。

def obj = new Expando()
obj.greetingMessage = "Hello World"
obj.greet = { println greetingMessage }
obj.greet()
obj.message = "foo"
println obj.message

また、連想れんそう配列はいれつ使用しようしても、構文こうぶん可能かのうである。this意味いみわる。

def obj = [:]
obj.greetingMessage = "Hello World"
obj.greet = { println obj.greetingMessage }
obj.greet()
obj.message = "foo"
println obj.message

MOP (Meta Object Protocol)

[編集へんしゅう]
GroovyObject#setMetaClass(MetaClass)
class Main {
  static void main(String[] array) {
    GroovyObject groovyObject = new Main()
    Interceptor interceptor = new GreetingInterceptor()
    InterceptorUtils.setInterceptor(groovyObject, interceptor)
    groovyObject.greet()
  }
}

class InterceptorUtils {
  static void setInterceptor(GroovyObject groovyObject, Interceptor interceptor) {
    ProxyMetaClass proxyMetaClass = ProxyMetaClass.getInstance(groovyObject.getClass())
    proxyMetaClass.setInterceptor(interceptor)
    groovyObject.setMetaClass(proxyMetaClass)
  }
}

class InterceptorImpl implements Interceptor {
  Object beforeInvoke(Object groovyExtensionObject, String name, Object[] arguments) {
    return null
  }
  Object afterInvoke(Object groovyExtensionObject, String name, Object[] arguments, Object beforeInvokeReturnObject) {
    Object object = invokeMethod(name, arguments)
    return object
  }
  boolean doInvoke() {
    return false
  }
}

class GreetingInterceptor extends InterceptorImpl {
  void greet() {
    println "Hello World"
  }
}

実装じっそうのメソッドをuseブロックない起動きどうすると、ブロックで指定していしたクラスのクラスメソッドに処理しょりをディスパッチする。

import groovy.inspect.Inspector

use (Category.class) {
    def obj = "Hoge"
    println obj.getShortClassName()
    println obj.toString()
}

// 名前なまえ自由じゆう
class Category {
    // 最初さいしょ引数ひきすうは、メソッドが起動きどうされたインスタンスの参照さんしょうコピー。
    static getShortClassName(obj) {
        Inspector.shortName(obj.getClass())
    }
    // 実装じっそうメソッドと重複じゅうふくする場合ばあい、Groovyはカテゴリーより実装じっそうメソッドを優先ゆうせん
    static String toString(Object obj) {
        "Hello World"
    }
}

String
Hoge

出力しゅつりょくされる。

GroovyMarkup

[編集へんしゅう]

Groovyコードの表記ひょうき使つかい、Groovyの機能きのう(クロージャやダイナミックなメソッド追加ついか)を駆使くししてツリーデータ構造こうぞうげをおこなう。具体ぐたいてきには、新規しんきノードの追加ついかをメソッドしとして、その新規しんきノードのノードぐん記述きじゅつをメソッドにわたすクロージャとして定義ていぎする。そのクロージャにはさらにそのノードのための一連いちれんのノード追加ついかメソッドしをふくめることができ…… というように再帰さいきてき記述きじゅつしていく。このときGroovyのループぶんやifぶんなどの制御せいぎょ構造こうぞうふくむすべてのGroovyの言語げんご機能きのう使つかうことができる。

GroovyMarkupは直感ちょっかんてきには、XMLほど静的せいてきではないが、純粋じゅんすいなプログラムコードれつよりは宣言せんげんてきな、「やや宣言せんげんてきなデータ記述きじゅつ」であるといえるかもしれない。

GroovyMarkupは基本きほんてき機能きのうであり、GroovyMarkupを使つかった具体ぐたいてきなライブラリとしては、SwingGUIコンポーネントのてをおこなうSwingBuilder、DOMのようなXMLデータ構造こうぞうてるMarkupBuilderなどがある。

import groovy.xml.MarkupBuilder

class Main {

  static void main(array) {

    Writer writer = new StringWriter()

    writer.println("<?xml version='1.0' ?>")
    writer.println()

    def builder = new MarkupBuilder(writer)

    /*
     名前なまえがルートのタグめいであるメソッド

      引数ひきすうがマップである場合ばあいはタグの属性ぞくせい
      引数ひきすう文字もじれつである場合ばあいはテキストノードの内容ないようでHTMLエスケープされます。

      実装じっそうメソッドをハンドルするGroovyObject#invokeMethod(String methodName, Object methodParameter)を利用りよう

      メソッドの括弧かっこ省略しょうりゃくされています。
    */
    builder.html(xmlns:"http://www.w3.org/1999/xhtml", "xml:lang":"ja") { //以降いこう名前なまえがタグめいであるクロージャ

      /*
       引数ひきすうがクロージャである場合ばあい名前なまえがタグめい
        引数ひきすうがマップである場合ばあいはタグの属性ぞくせい
        引数ひきすう文字もじれつである場合ばあいはテキストノードの内容ないようでHTMLエスケープされます。
      */

      head() {
      }

      body() {

        div("1ぎょう");
        div("2ぎょう");

        //ヒア・ドキュメント構文こうぶん

        String string = """
      <div id='3'>3ぎょう</div>
      <div id='4'>4ぎょう</div>
    """

        pre(string) {
        }
      }
    }

    println writer.toString()

    /*
      標準ひょうじゅん出力しゅつりょく結果けっか
<?xml version='1.0' ?>

<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='ja'>
  <head />
  <body>
    <div>1ぎょう</div>
    <div>2ぎょう</div>
    <pre>
      &lt;div id='3'&gt;3ぎょう&lt;/div&gt;
      &lt;div id='4'&gt;4ぎょう&lt;/div&gt;
    </pre>
  </body>
</html>
    */
  }
}

クロージャ

[編集へんしゅう]

Groovyではコードブロックをファーストクラス(だいいちきゅう)オブジェクトとして生成せいせいし、変数へんすう格納かくのうしたりメソッド引数ひきすうもどとしてわたししたりすることができる。Groovyのライブラリはかえ処理しょり入出力にゅうしゅつりょく処理しょりなどを中心ちゅうしんクロージャ駆使くしされており、簡潔かんけつ表記ひょうきおこなうことができる。

クロージャは構築こうちくされたスコープない変数へんすうきできる。

def str = "Hello World"
def readerClosure = { println str }
readerClosure()
def writerClosure = { str = "foo" }
writerClosure()
println str

このコードを実行じっこうすると

Hello World
foo

出力しゅつりょくされる。

GroovyからJava SEの標準ひょうじゅんAPIをすべてすことができるが、このさいにGroovyから使つかうと便利べんりなメソッドがリフレクションもちいてJava SEクラスに擬似ぎじてき多数たすう追加ついかされている。たとえば、クロージャをとるFile.eachLine()といったメソッドを使用しようすることができ、以下いかよう記述きじゅつ可能かのうとなっている。

new File("test.txt").eachLine { println it }

File.eachLine(Closure)はそれぞれのくだり変数へんすうit代入だいにゅうしてクロージャをす、というかえ処理しょりおこなうだけでなく、処理しょり終了しゅうりょうもしくは例外れいがい発生はっせいに、ファイルのクローズ処理しょりおこなう。つまりJavaの場合ばあい必要ひつようfinallyふしにおけるjava.io.FileInputStreamjava.io.FileOutputStreamclose()処理しょり必要ひつようとせず簡潔かんけつ記述きじゅつできる。ほかにも同様どうように、Reader.eachLine(Closure)メソッドなども追加ついかされている。また、File.getText(String characterCodeSetName)Reader.getText()Reader.readLines()というファイルのすべての内容ないよう一括いっかつむメソッドが追加ついかされており、入出力にゅうしゅつりょく処理しょり簡潔かんけつ記述きじゅつすることができる。

言語げんごからの影響えいきょう

[編集へんしゅう]

James StrachanはGroovyはオブジェクト指向しこうスクリプト言語げんごRubyからおおきな影響えいきょうけていることをなん公言こうげんしている[よう出典しゅってん]実際じっさい、クロージャの仕様しよう表記ひょうき、その予約よやく選択せんたくなどにおいてRubyからの影響えいきょう色濃いろこることができる。そのPythonDylanSmalltalkなどからも言語げんご機能きのうまれている。

適用てきよう分野ぶんや

[編集へんしゅう]

Groovyは本格ほんかくてきなアプリケーション構築こうちくにも使つかえるし、また、Javaシステム開発かいはつにおけるテストコードの記述きじゅつげることにも使つかえる。Groovyには標準ひょうじゅんJUnit機能きのうまれている。さらに、スクリプト言語げんごとして、フィルタてきなツールやプロトタイプをくだすことも容易よういである。

アプリケーションの複雑ふくざつ設定せってい(configuration)やカスタマイズよう言語げんごとしてもちいるということも注目ちゅうもくされている。Ant設定せっていファイル (build.xml) をGroovyで記述きじゅつする機能きのう標準ひょうじゅんまれているし、いくつかのDIコンテナ依存いぞんせい注入ちゅうにゅうコンテナ、IoCコンテナ)とばれるアプリケーションフレームワークにおける起動きどう設定せっていファイルの記述きじゅつ言語げんごとして採用さいようされるなど、XMLの代用だいようとして採用さいようされはじめている。ビルド自動じどうシステムのGradleでも同様どうようにGroovyが使つかわれている(こちらはKotlin DSLも使つかえるようになっている)。

将来しょうらいてきには、既存きそんJavaシステムを連携れんけいさせるグルー言語げんごとして、Microsoft Windows世界せかいにおけるVisual BasicVBA役割やくわりをJavaシステム全般ぜんぱんにおいてたせる可能かのうせいがある。[独自どくじ研究けんきゅう?]

Groovyの応用おうようとして注目ちゅうもくすべき事例じれいとして、Grailsをあげることができる。GrailsはGroovyを使用しようしたWebアプリケーションフレームワークであり、Webアプリ開発かいはつにおいてRuby on Rails実現じつげんしているようなたか生産せいさんせいをもたらす。

標準ひょうじゅん

[編集へんしゅう]

Groovyは2004ねん3月29にちにJava技術ぎじゅつ標準ひょうじゅんプロセスJCPにおいてJSR 241として受理じゅりされ仕様しよう標準ひょうじゅんがすすめられたが、その dormant (休止きゅうし) あつかいとなった[5]

サンプルコード

[編集へんしゅう]

クロージャとループ

[編集へんしゅう]
def forLoop() {
    def map = [name: "James", location: "London"]
    for(e in map) { println "entry $e.key is $e.value" }
}
def closureExample(list) {
    list.each { println "value $it" }
}
def values = [1, 2, 3, "abc"]
closureExample(values)
forLoop()

メモちょう

[編集へんしゅう]
import groovy.swing.SwingBuilder
import javax.swing.*

def notepad
new SwingBuilder().frame(title: "メモちょう", defaultCloseOperation: JFrame.EXIT_ON_CLOSE,
    size: [800, 600], show: true, locationRelativeTo: null) {
  menuBar() {
    menu(text: "ファイル(F)", mnemonic: 'F') {
      menuItem(text: "名前なまえをつけて保存ほぞん(A)...", mnemonic: 'A', actionPerformed: {
        fc = new JFileChooser()
        if (fc.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
          fc.selectedFile.text = notepad.text
        }
      })
      menuItem(text: "終了しゅうりょう(X)", mnemonic: 'X', actionPerformed: { System.exit(0) })
    }
  }
  scrollPane() { notepad = textArea() }
}

統合とうごう開発かいはつ環境かんきょう

[編集へんしゅう]

おおくの統合とうごう開発かいはつ環境かんきょう(IDE)がGroovyに対応たいおうしている。

NetBeans標準ひょうじゅんでGroovyをサポートしている。

  • 構文こうぶん強調きょうちょう表示ひょうじ、コードたたみ、およびコード補完ほかんをサポート。

EclipseはプラグインにてGroovyをサポートしている[6]

  • 変数へんすうかた指定していしたものは、メソッドの補完ほかん可能かのう
  • リファクタリング。メソッドの抽出ちゅうしゅつ名前なまえ変更へんこうなど。
  • デバッガ
  • ソースコードの整形せいけい

IntelliJ IDEA

[編集へんしゅう]

IntelliJ IDEA では Groovy や Grails や Gant などが標準ひょうじゅんでサポートされている[7]

  • 補完ほかんができる。
    • JavaとGroovyが相互そうご補完ほかんができ、JavaのクラスをGroovyで補完ほかんできるだけでなく、リアルタイムでGroovyのクラスをJavaで補完ほかん可能かのう。JavaとGroovyをプロジェクトない混在こんざいさせることができる。
  • Ctrl + クリックによる、定義ていぎした場所ばしょへの移動いどう
    • 補完ほかん同様どうよう、JavaとGroovy相互そうご移動いどう可能かのう
  • Dynamic properties により、動的どうてき追加ついかされるメンバ変数へんすう管理かんりすることができる。これにより、動的どうてき追加ついかされるメンバ変数へんすうたいしても補完ほかんやスペルミスのチェックが可能かのうになる。
  • デバッガ
  • コーディングじょうのエラーにたいして、リアルタイムで表示ひょうじし、Quick-fix ができる。
  • GroovyDoc にたいしても補完ほかん使つかえる。
  • 名前なまえ変更へんこうやメソッドの抽出ちゅうしゅつ変数へんすう導入どうにゅうなどのリファクタリング機能きのうがある。
    • Groovyでの名前なまえ変更へんこうは、同時どうじにJavaのソースコードにたいしても修正しゅうせい(リファクタリング)がかかる。
  • Grails や Groovy Server Pages (GSP) をサポートしている。
  • Gant や Apache Ivy をサポートしていて、Gant にたいして補完ほかんやデバッガによるデバッグができる。
  • Gradle を Gradle GUI Plugin でサポート。

参照さんしょう

[編集へんしゅう]
  1. ^ Tags · apache/groovy · GitHub”. 2024ねん6がつ23にち閲覧えつらん
  2. ^ The Apache Groovy programming language - Download
  3. ^ Groovy Projects intends to join the Apache Software Foundation -- Guillaume Laforge's Blog
  4. ^ The Apache Groovy programming language - Semantics - §switch / case
  5. ^ JSR 241: The Groovy Programming Language
  6. ^ Groovy Development Tools | Eclipse Plugins, Bundles and Products - Eclipse Marketplace | Eclipse Foundation
  7. ^ IntelliJ IDEA :: Smart Groovy IDE with Groovy-Java compiler for Groovy scripts, Groovy Swingbuilder, Groovy server pages with ER diagram for productive Groovy programming, plus Groovy on Grails, available via Groovy plugin

関連かんれん項目こうもく

[編集へんしゅう]

外部がいぶリンク

[編集へんしゅう]