SlideShare a Scribd company logo
開発現場で使えるかもしれない?
Groovyの入門
Java Doでしょう#04
2月13日
自己紹介
 @zgmf_mbfp03
 フォローは非推奨
 サバゲー, 酒大好き
はじめに
 Groovyに触れてまだ4ヶ月たってないです
 まだ入門中です
 温かい目で見守ってください Groovyわかないお
アジェンダ
 Groovyとは
 環境構築
 入門
 利用用途
 まとめ
Groovyとはなんぞや
 Java VMで動いちゃう動的型付け言語
 J2SE1.4以上で動作
 Javaとの高い親和性が!
 JavaのAPIやライブラリを簡単に使用可能
 Rubyに強い影響を受けているから似た文法が多いらしい
 私はRubyを知らない・・・
JDKについて
 要求はこんな感じ
参考: http://www.groovy-lang.org/download.html
Indy(InvokeDynamic)はJVMに追加された新しいバイトコードと、その処理の仕組みを総称する呼び方らしい・・・
私は全く理解していない!
Groovyの環境構築
 Macでの設定 (Windowsは… 知らないから調べてね!)
 ターミナルを立ち上げ
 $brew install groovy
 これだけ
 確認
 $ groovy –version
 $Groovy Version: 2.4.5 JVM: 1.8.x Vendor: Oracle Corporation OS:
Mac OS X
Groovy-Eclipse
 EclipseでGroovyを扱う
 groovy-all-x.x.x.jar追加
Javaとの差
 セミコロンを省略
 return を省略
 throws宣言を省略
 例外処理
 形宣言を省略
 プリミティブ型はラッパー型
 リテラルが異なる
 アクセス修飾子
 メソッド呼び出し
 演算子のオーバーロード
 クロージャ
 Etc…
HelloWorld
 JavaでHello World!
HelloWorld
 JavaでHello World!
 これをGroovy化!
 拡張子を *.java から *.groovy に
 セミコロンを省略
 System.out.println が println に
 カッコを省略
 スクリプト形式に
HelloWorld
セミコロンを省略
 セミコロンを省略
return を省略
 return を省略
 最後の評価された値が返却される
例外処理
 例外処理
 throwsを省略
 catchのクラスを省略
 Exception扱い
形宣言を省略
 形宣言を省略
 defは、JavaでいうObject型
 形無しは、thisが示すオブジェクトのProperty
プリミティブ型はラッパー型
 プリミティブ型はラッパー型
 ラッパー型になるが nullの代入は実行時にエラー
リテラルが異なる1
 リテラルが異なる
 浮動小数の計算が正確
 ${…} を書くと
GString扱い
 GStringは${…}の中に
書かれたものに置換
リテラルが異なる2
 リテラルが異なる
 []を書くだけでList扱い
 + や - で要素の追加、削除が可能
 演算時のオーバーロード
 他のコレクションにする場合は
as で強制変換
 Mapは連想配列風とプロパティ風
の扱い方が有る
アクセス修飾子
 アクセス修飾子
 Private? そんなものは無視
 アクセス可能
 無印はPublic扱い
 パッケージプライベートはないわけではない
メソッド呼び出し1
 メソッド呼び出し
 メソッド名はStringまたはGStringで書ける
 引数は初期化できる
メソッド呼び出し2
 メソッド呼び出し
 コンストラクタはデフォルトだけでいい
 アクセサメソッドはいらない
 裏でsetter, getter をいい感じに呼んでいるらしい
演算子のオーバーロード
 演算子のオーバーロード
 演算子は、それに対応するメソッドが存在している
クロージャ
 クロージャ
クロージャ
 クロージャ(Groovy)
参照 http://www.groovy-lang.org/closures.html
英語読めないお(´・ω・`)
クロージャ
 クロージャ(Groovy)
 第一級関数であり、メソッドとは区別される
 引数を取り、値を返し、内部で宣言された変数を参照し、使う
ことができるコードの集まり
 コードブロックやメソッドポインタのようなもの
入門なんだから
クロージャ実装
 定義と実行
匿名クラス
 Java
 Groovy
コレクション操作
 Java8 - StreamAPI forEach, sorted, map
 Groovy - Closure each, sort, collect
Groovy からStreamAPI
 StreamAPIを使うことも可能
 ラムダ式ではなくクロージャになる
JavaからGroovyクラスの利用
 JavaからGroovyのクラスを問題なく利用できる
 クラスの利用
 スクリプトの実行
JavaからGroovyの実行
GroovyShell
 GroovyShellクラス
 簡単なGroovyの実行に便利
 Binding バインド変数の設定
 GroovyShell#evaluate
 戻り値がスクリプトの結果
JavaからGroovyの実行
GroovyScriptEngine
 GroovyScriptEngineクラス
 ディレクトリ指定でGroovyスクリプトを実行
 GroovyScriptEngine#run
 戻り値がスクリプトの結果
Groovyの利用
 ビルド
 Gradle
 テスト
 Spock
 Geb
 メインの言語
 Grails
 Spring
 Android
 その他
 XMLパース
 HTML, XMLの出力
 HTMLスクレイピング
 RDBMSの操作
 Excelの操作
まとめ
 Groovyは, Javaとの親和性が高い動的型付け言語
 スクリプトとして実行が可能
 Javaよりも適当に書ける
 JavaからGroovyを呼び出せる
 Groovyを使ったツールやライブラリも有る
番外編 – Spockの紹介 −
Groovy製のテストツール Spock
 テストフレームワーク
 Groovy製でJUnit上に構築されたもの
 PowerAssertで細かいエラー情報を出力
 BDD的なテストコード記述
 標準でMockAPI使用可能
 データドリブンテストの記述が可能
PowerAssert
 JUnit
 Spock
Spockでの記述方法
 テストクラスはGroovyクラス
 テストクラスは Specification を継承する
 メソッドには @Unroll を付ける(データドリブンテスト)
 ブロックに分けて記述
ブロックについて
Mockの使用方法
 Setup(Given)ブロックに記述
 Mockでモックの定義
 >>で振る舞い定義
 クラス名.metaClass.setAttribute(インスタンス, フィールド
名, 新しい値)でフィールド変更
Spockまとめ
 JUnitより結果がわかりやすい
 BDD的な記述により、処理がわかりやすい
 標準でMockAPIがあり、楽・・・?

More Related Content

What's hot

俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略
俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略
俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略
Y Watanabe
 
Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309Nobuhiro Sue
 
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
Y Watanabe
 
はじめてのTDD
はじめてのTDDはじめてのTDD
はじめてのTDD
Yuto Matsukubo
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011Hiroh Satoh
 
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
Y Watanabe
 
Crystal 勉強会 #5 in 渋谷 発表資料
Crystal 勉強会 #5 in 渋谷 発表資料Crystal 勉強会 #5 in 渋谷 発表資料
Crystal 勉強会 #5 in 渋谷 発表資料
at grandpa
 
Groovy Shell Scripting 2015
Groovy Shell Scripting 2015Groovy Shell Scripting 2015
Groovy Shell Scripting 2015
Uehara Junji
 
Django で始める PyCharm 入門
Django で始める PyCharm 入門Django で始める PyCharm 入門
Django で始める PyCharm 入門
kashew_nuts
 
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGGroovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
Uehara Junji
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handson
Nobuhiro Sue
 
ぼくのNode.jsのだいいっぽ
ぼくのNode.jsのだいいっぽぼくのNode.jsのだいいっぽ
ぼくのNode.jsのだいいっぽ
拓弥 遠藤
 
ペパボ福岡支社におけるRubyの活用事例
ペパボ福岡支社におけるRubyの活用事例ペパボ福岡支社におけるRubyの活用事例
ペパボ福岡支社におけるRubyの活用事例
Uchio Kondo
 
20120706-readablecode
20120706-readablecode20120706-readablecode
20120706-readablecodeMasanori Kado
 
Chromeでストレージ永続化を実現するには
Chromeでストレージ永続化を実現するにはChromeでストレージ永続化を実現するには
Chromeでストレージ永続化を実現するには
goccy
 
Node.js Tutorial at Hiroshima
Node.js Tutorial at HiroshimaNode.js Tutorial at Hiroshima
Node.js Tutorial at Hiroshima
Yoshihiro Iwanaga
 
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっているJJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
Koichi Sakata
 
人間たちとsystemd
人間たちとsystemd人間たちとsystemd
人間たちとsystemd
Uchio Kondo
 
Apache CloudStack コントリビューション
Apache CloudStack コントリビューションApache CloudStack コントリビューション
Apache CloudStack コントリビューションSatoshi KOBAYASHI
 

What's hot (20)

俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略
俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略
俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略
 
Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309
 
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
 
はじめてのTDD
はじめてのTDDはじめてのTDD
はじめてのTDD
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
 
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
 
Crystal 勉強会 #5 in 渋谷 発表資料
Crystal 勉強会 #5 in 渋谷 発表資料Crystal 勉強会 #5 in 渋谷 発表資料
Crystal 勉強会 #5 in 渋谷 発表資料
 
Groovy Shell Scripting 2015
Groovy Shell Scripting 2015Groovy Shell Scripting 2015
Groovy Shell Scripting 2015
 
Groovyの紹介20130323
Groovyの紹介20130323Groovyの紹介20130323
Groovyの紹介20130323
 
Django で始める PyCharm 入門
Django で始める PyCharm 入門Django で始める PyCharm 入門
Django で始める PyCharm 入門
 
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGGroovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handson
 
ぼくのNode.jsのだいいっぽ
ぼくのNode.jsのだいいっぽぼくのNode.jsのだいいっぽ
ぼくのNode.jsのだいいっぽ
 
ペパボ福岡支社におけるRubyの活用事例
ペパボ福岡支社におけるRubyの活用事例ペパボ福岡支社におけるRubyの活用事例
ペパボ福岡支社におけるRubyの活用事例
 
20120706-readablecode
20120706-readablecode20120706-readablecode
20120706-readablecode
 
Chromeでストレージ永続化を実現するには
Chromeでストレージ永続化を実現するにはChromeでストレージ永続化を実現するには
Chromeでストレージ永続化を実現するには
 
Node.js Tutorial at Hiroshima
Node.js Tutorial at HiroshimaNode.js Tutorial at Hiroshima
Node.js Tutorial at Hiroshima
 
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっているJJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
 
人間たちとsystemd
人間たちとsystemd人間たちとsystemd
人間たちとsystemd
 
Apache CloudStack コントリビューション
Apache CloudStack コントリビューションApache CloudStack コントリビューション
Apache CloudStack コントリビューション
 

Similar to 開発現場で使えるかもしれないGroovy

Rubyist started to learn Groovy - things important to leran new LL
Rubyist started to learn Groovy - things important to leran new LLRubyist started to learn Groovy - things important to leran new LL
Rubyist started to learn Groovy - things important to leran new LL
Uchio Kondo
 
Javaに這いよる.NET
Javaに這いよる.NETJavaに這いよる.NET
Javaに這いよる.NET
Hiroshi Maekawa
 
G* Workshop in Fukuoka - Introduction
G* Workshop in Fukuoka - IntroductionG* Workshop in Fukuoka - Introduction
G* Workshop in Fukuoka - Introduction
Kazuchika Sekiya
 
ゆるふわアーキを支える技術
ゆるふわアーキを支える技術ゆるふわアーキを支える技術
ゆるふわアーキを支える技術
Shinichi Kozake
 
DevSummit2011JGGUG OpenJam: Groovy
DevSummit2011JGGUG OpenJam: GroovyDevSummit2011JGGUG OpenJam: Groovy
DevSummit2011JGGUG OpenJam: GroovyNobuhiro Sue
 
Java one 2013 sf 報告会lt
Java one 2013 sf 報告会ltJava one 2013 sf 報告会lt
Java one 2013 sf 報告会lttorutk
 
JavaとScalaとGroovyと
JavaとScalaとGroovyとJavaとScalaとGroovyと
JavaとScalaとGroovyとirof N
 
簡単!Groovy入門
簡単!Groovy入門簡単!Groovy入門
簡単!Groovy入門
Lee Choong Geun
 
Java初心者がJava8のラムダ式をやってみた
Java初心者がJava8のラムダ式をやってみたJava初心者がJava8のラムダ式をやってみた
Java初心者がJava8のラムダ式をやってみた
Aya Ebata
 
JavaとRubyのすてきな関係
JavaとRubyのすてきな関係JavaとRubyのすてきな関係
JavaとRubyのすてきな関係
garden_tree
 
脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに
Hiroko Tamagawa
 
そろそろJavaみなおしてもええんやで
そろそろJavaみなおしてもええんやでそろそろJavaみなおしてもええんやで
そろそろJavaみなおしてもええんやでなおき きしだ
 
これからのJavaのとっかかりを掴む #jdt51 #kanjava
これからのJavaのとっかかりを掴む #jdt51 #kanjavaこれからのJavaのとっかかりを掴む #jdt51 #kanjava
これからのJavaのとっかかりを掴む #jdt51 #kanjava
irof N
 
非エンジニアが MENstackでWebアプリをつくった話 #nodejs
非エンジニアが MENstackでWebアプリをつくった話 #nodejs非エンジニアが MENstackでWebアプリをつくった話 #nodejs
非エンジニアが MENstackでWebアプリをつくった話 #nodejs
Yusaku Kinoshita
 
JavaFXとRoboVMを使ってiOS上で動くアプリを試してみた
JavaFXとRoboVMを使ってiOS上で動くアプリを試してみたJavaFXとRoboVMを使ってiOS上で動くアプリを試してみた
JavaFXとRoboVMを使ってiOS上で動くアプリを試してみたSatoshi Takami
 
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
y torazuka
 
この実装には問題がある!
この実装には問題がある!この実装には問題がある!
この実装には問題がある!
GOMI NINGEN
 

Similar to 開発現場で使えるかもしれないGroovy (17)

Rubyist started to learn Groovy - things important to leran new LL
Rubyist started to learn Groovy - things important to leran new LLRubyist started to learn Groovy - things important to leran new LL
Rubyist started to learn Groovy - things important to leran new LL
 
Javaに這いよる.NET
Javaに這いよる.NETJavaに這いよる.NET
Javaに這いよる.NET
 
G* Workshop in Fukuoka - Introduction
G* Workshop in Fukuoka - IntroductionG* Workshop in Fukuoka - Introduction
G* Workshop in Fukuoka - Introduction
 
ゆるふわアーキを支える技術
ゆるふわアーキを支える技術ゆるふわアーキを支える技術
ゆるふわアーキを支える技術
 
DevSummit2011JGGUG OpenJam: Groovy
DevSummit2011JGGUG OpenJam: GroovyDevSummit2011JGGUG OpenJam: Groovy
DevSummit2011JGGUG OpenJam: Groovy
 
Java one 2013 sf 報告会lt
Java one 2013 sf 報告会ltJava one 2013 sf 報告会lt
Java one 2013 sf 報告会lt
 
JavaとScalaとGroovyと
JavaとScalaとGroovyとJavaとScalaとGroovyと
JavaとScalaとGroovyと
 
簡単!Groovy入門
簡単!Groovy入門簡単!Groovy入門
簡単!Groovy入門
 
Java初心者がJava8のラムダ式をやってみた
Java初心者がJava8のラムダ式をやってみたJava初心者がJava8のラムダ式をやってみた
Java初心者がJava8のラムダ式をやってみた
 
JavaとRubyのすてきな関係
JavaとRubyのすてきな関係JavaとRubyのすてきな関係
JavaとRubyのすてきな関係
 
脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに
 
そろそろJavaみなおしてもええんやで
そろそろJavaみなおしてもええんやでそろそろJavaみなおしてもええんやで
そろそろJavaみなおしてもええんやで
 
これからのJavaのとっかかりを掴む #jdt51 #kanjava
これからのJavaのとっかかりを掴む #jdt51 #kanjavaこれからのJavaのとっかかりを掴む #jdt51 #kanjava
これからのJavaのとっかかりを掴む #jdt51 #kanjava
 
非エンジニアが MENstackでWebアプリをつくった話 #nodejs
非エンジニアが MENstackでWebアプリをつくった話 #nodejs非エンジニアが MENstackでWebアプリをつくった話 #nodejs
非エンジニアが MENstackでWebアプリをつくった話 #nodejs
 
JavaFXとRoboVMを使ってiOS上で動くアプリを試してみた
JavaFXとRoboVMを使ってiOS上で動くアプリを試してみたJavaFXとRoboVMを使ってiOS上で動くアプリを試してみた
JavaFXとRoboVMを使ってiOS上で動くアプリを試してみた
 
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
 
この実装には問題がある!
この実装には問題がある!この実装には問題がある!
この実装には問題がある!
 

開発現場で使えるかもしれないGroovy