Groovy みんな使っていた。

- 作者: 関谷和愛,上原潤二,須江信洋,中野靖治
- 出版社/メーカー: 技術評論社
- 発売日: 2011/07/06
- メディア: 単行本(ソフトカバー)
- 購入: 6人 クリック: 392回
- この商品を含むブログ (155件) を見る
ElmやRustも推してる

- 作者: 山田正樹,山本剛,上原潤二,永井昌子,杉山清美,杉浦孝博,笠原史郎,香月孝太,福岡竜一,伊堂寺北斗
- 出版社/メーカー: 翔泳社
- 発売日: 2008/08/26
- メディア: 大型本
- 購入: 3人 クリック: 42回
- この商品を含むブログ (28件) を見る
おしながき
- Groovyはどんな言語
- Groovyの思想
- Groovyはどう役立つのか
- 今どきのGroovy(最新情報)
Groovyはどんな言語
- 文法はJavaの(ほぼ)上位互換(do-whileがないとか例外はあるけど)
- 真のクロージャを持ち簡潔な記述を旨とする
- 型システム 型チェック
- Groovy 1.8までは実行時型チェックのみ
- Groovy 2.0からは静的型チェック 静的コンパイル
Javaに準じた静的なコードも書ける(動的型言語という表現は正確ではない)
GroovyコードはJavaバイトコード(クラス)に常にコンパイルされて実行される
- ラッパーや特殊なコンテキストやインタプリタなし
- ライブラリ
- 独自の体系はもたず、Java標準のAPIを基本としてGroovy独自のクラスやメソッドを追加
Groovyの歴史
- 2003 誕生
- 2006 JSR
- コア開発会社がどんどん変遷している
- シンタックスエラーがデラデラ出てくるようなコンパイラ
- 今はだいぶ改善されている
最近の話題
- Pivotal社がスポンサーを降板
- ASFプロジェクト
やりたいこと
バビロンの日記: Groovyで "Hello World!!"
Javaがやりたいことが濃縮されているし、コード量はJavaの半分以下で抑えることが可能。
Groovyコードの実行
Java
javacからクラスファイルを作ってjavaコマンドで実行
Groovy
クラスファイルを生成しなくても実行することが出来うる
GDK
Groovyのために拡張されたJavaAPI The Groovy programming language - Groovy APIs
GDKメソッド群の合計は1300(Javaの機能を改善していくスタイル)
Groovyの思想
- Javaを置き換えない
- Javaとの併用 共存 補完が存在意義そのもの
- GroovyはJavaクラスファイルを別ルート 別記法で読み込ませるためのクラスローダーであり、ライブラリの一種でもある
- JavaのAPIやライブラリはGroovyにとって必要悪ではない
- Javaライブラリは直接もしくはGroovyラッピング拡張して使う
- RxGroovy/RxJava
JavaのライブラリをGroovyで使えるようにする
JRuby想定ユーザタイプ別Groovy乗り換えガイド
- しょうがなくJVMを使う必要に迫られたRubyist(Groovyと競合しない)
- Java APIもJVMも大好きだけど、Javaの文法だけは嫌い(Groovyと強豪する)
- RubyのライブラリをJVM上で使いたいだけの人(Groovyと競合しない)
Groovyはどう役立つのか
主な用途
- DSLを実装するための言語(Grails Gradle Spock)
- Javaスクリプティング(Javaプログラマの日々のしごとをGroovyで)
DSL実装用語としてのGroovy
- Spock(テストコード用)
- Grails など
Why Groovy DSL?
- Groovy Java開発者向けのDSLに最適
- Groovyのシンタックスやセマンティクスが優れている必要はない
- Java開発者にとって素直にわかればよく、意表をつく何かがない方が良い
動的型とDSL
- 本質的に動的な対象のDSLモデリングには動的型が自然な記述に寄与(JSONを対象とした処理が出来る)
Why DSL?
なんでDSL使うの?
- ドメインモデルを書き下すときに既存言語の文法や実装都合の範囲内でクラス名とか工夫する
実装都合を受け入れるのではなく、あるべき記法を追求する
日本語DSLもGroovyで書ける
- もともとGroovyにはない、Haskellでいうところのリスト内包表記をGroovyで実現する
- 型クラスもどきをGroovyで無理やりやってみる
(Scalaっぽいけど、こういうことも出来る)
- LispBuilder
いくつかのツールが作られ、便利に使われている。
リアルワールドGroovy/Grails
- Androidの標準ビルドシステム
- Netfilxでの大規模で多彩な活用
- 国内最大級のオンラインマガジンサービスはGrails
- AndroidはGroovyなのでNYTでも使われている
リアルワールドGrails
NTTソフトウェア株式会社でGrailsをWebアプリ開発の標準フレームワークとして使っている
Javaスクリプティング!
身近なスクリプティング
- Java開発のお供に
- GDKメソッド数をGroovyのドキュメントサイトからクラス別に集計する といったことも
今時のGroovy
- Groovy2.3 2.4あたりでドラスティックな変更はない。
2.3
- Traitの導入
- マークアップテンプレートエンジン
2.4
- Android対応
Trait
- ScalaのTraitにごく近い
- 状態が持てる
- 動的トレイト注入
Grails3で積極的に活用されている
マークアップテンプレートエンジン
- HTMLをGroovyプログラムとして書けるhamlっぽいテンプレート
まとめ
- GroovyはJava開発者の能力を高めるツール
- Javaスクリプティング
- DSL ユビキタス言語
- 対象領域の問題に対して、最小完全な記述を求めることが大事で、そのための記述を追求。
- 自由度の高い記法を作れる!
better Java的なGroovy
- GroovyはJavaのほぼ上位互換みたいなところがあるけど、ある段階まではJavaに追随できているけど、どんどん独自発展していっている感がある
- 例えば、ラムダ式、デフォルトメソッドについては互換性がない
- 互換性という点ではどんどん離れていっているだろうと思われる