by shigemk2

当面は技術的なことしか書かない

今さら始めよう Groovy #渋谷JVM

Groovy みんな使っていた。

twitter.com

プログラミングGROOVY

プログラミングGROOVY

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

ElmやRustも推してる

Grails徹底入門

Grails徹底入門

  • 作者: 山田正樹,山本剛,上原潤二,永井昌子,杉山清美,杉浦孝博,笠原史郎,香月孝太,福岡竜一,伊堂寺北斗
  • 出版社/メーカー: 翔泳社
  • 発売日: 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の思想

  • Javaを置き換えない
  • Javaとの併用 共存 補完が存在意義そのもの
  • GroovyはJavaクラスファイルを別ルート 別記法で読み込ませるためのクラスローダーであり、ライブラリの一種でもある
  • JavaのAPIやライブラリはGroovyにとって必要悪ではない
  • Javaライブラリは直接もしくはGroovyラッピング拡張して使う
  • RxGroovy/RxJava

github.com

JavaのライブラリをGroovyで使えるようにする

JRuby想定ユーザタイプ別Groovy乗り換えガイド

  • しょうがなくJVMを使う必要に迫られたRubyist(Groovyと競合しない)
  • Java APIもJVMも大好きだけど、Javaの文法だけは嫌い(Groovyと強豪する)
  • RubyのライブラリをJVM上で使いたいだけの人(Groovyと競合しない)

Groovyはどう役立つのか

主な用途

  1. DSLを実装するための言語(Grails Gradle Spock)
  2. Javaスクリプティング(Javaプログラマの日々のしごとをGroovyで)

DSL実装用語としてのGroovy

  • Spock(テストコード用)

qiita.com

  • Grails など

Why Groovy DSL?

  • Groovy Java開発者向けのDSLに最適
  • Groovyのシンタックスやセマンティクスが優れている必要はない
  • Java開発者にとって素直にわかればよく、意表をつく何かがない方が良い

動的型とDSL

  • 本質的に動的な対象のDSLモデリングには動的型が自然な記述に寄与(JSONを対象とした処理が出来る)

Why DSL?

なんでDSL使うの?

  • ドメインモデルを書き下すときに既存言語の文法や実装都合の範囲内でクラス名とか工夫する
  • 実装都合を受け入れるのではなく、あるべき記法を追求する

  • 日本語DSLもGroovyで書ける

uehaj.hatenablog.com

  • もともとGroovyにはない、Haskellでいうところのリスト内包表記をGroovyで実現する

uehaj.hatenablog.com

  • 型クラスもどきをGroovyで無理やりやってみる

github.com

(Scalaっぽいけど、こういうことも出来る)

  • LispBuilder

uehaj.hatenablog.com

いくつかのツールが作られ、便利に使われている。

リアルワールドGroovy/Grails

  • Androidの標準ビルドシステム

Gradle 日本語ドキュメント

  • 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に追随できているけど、どんどん独自発展していっている感がある
  • 例えば、ラムダ式、デフォルトメソッドについては互換性がない
  • 互換性という点ではどんどん離れていっているだろうと思われる