2014.3.29
須江信洋(@nobusue)
http://d.hatena.ne.jp/nobusue
https://www.facebook.com/nobuhiro.sue
きょんくん&かおりちゃん
結婚おめでとうLT大会 in Tokyo
『Groovy(G*)による
SIer閉鎖空間サバイバル術』
まずは、
ご結婚
おめでとうございます!!!
(from JGGUG一同)
2
自己紹介
 須江 信洋(すえ のぶひろ)
 Twitter: @nobusue
 https://www.facebook.com/nobuhiro.sue
 約10年ほどJavaEE関連の仕事をしてます
 2013年10月よりフリーランス(個人事業主)
 最近興味を持っているもの
 Vert.x / Storm / Camel / ElasticSearch
 Vagrant / Docker / Ansible / Serverspec
 もちろんGroovy / Gradle / Grails
3
Gradle本
(執筆中)
JGGUGって?
 Japan Grails/Groovy User Group
 2009年発足
 Grails/GroovyなどのGroovyエコシステム(G*)に関
するコミュニティ
 前身は2006年から活動していたGrailsコミュニティ
 こわくない
 毎月第3金曜日にG*ワークショップを開催
 参加型(ハンズオンなど)
 告知・申し込みはこちら
 http://jggug.doorkeeper.jp/
4
http://www.jggug.org/
きょんくんとJGGUG
 何度も登壇いただいてます!
 最近だと、、、
5
いつも刺激的な発表をありがとうございます。
今後ともよろしくお願い申し上げます。
(JGGUG一同)
ここから本題
 [Q]Groovyって役に立つの?
 [A]知らなくても生きていけますが、
知っていると快適に生きていけるかも
 例えばこんなとき
 JavaのクラスやJVMの挙動を手っ取り早く調べたい
 JUnitのテストケースを簡潔に書きたい
 Antのビルドスクリプトが複雑すぎて手がつけられな
い
 Jenkinsをちょちょっとハックしたい
 JDK以外禁止の環境で生き延びたい
6
とあるSIerの現場
 インターネット接続制限厳しい
 当然ながらProxyでアクセス制限
 SlideShare禁止
 Dropbox/Google groups禁止
 GitHub禁止
 使えるツールの制限厳しい
 Ruby入ってない(あっても1.8.7)
 Python古い
 Gemとか自由に取ってこれない
 仮想マシン禁止(というか32bit Windows…)
7
インストールレスでGroovy
 JDKさえインストールされていれば、
以下の方法でGroovyが使えます
 Groovyのバイナリを落としてくる
 展開して embeddable/groovy-all-x.x.x.jar を
取り出す
 ターゲット環境で以下を実行
 java –jar groovy-all-x.x.x.jar
hoge.groovy
 java –jar groovy-all-x.x.x.jar –e “println
‘Hello groovy’”
8
実話 その1
 とあるシステム間の疎通確認のため、対向側
のサーバーの指定ポートに接続できるか確認
したい
 間にFirewallがあるので、対向側でnetstat
で確認するだけではダメ
 最近のLinuxはtelnet入ってない・・・
 以下で解決
 java –jar groovy-all.jar –e
"new Socket(‘x.x.x.x’, 9443)“
 接続できない場合、ConnectException が出る
9
実話 その2
 アプリケーションが使っているOSSの名称と
バージョンをリストアップしてお客さんに報告し
なければならなくなった
 ビルドは当然Antで、JARはSubversionに直
接コミットされている・・・
 そんなプロジェクトが十数個
10
こんなの作りました
11
def rootDir = new File(args[0])
rootDir.eachFileRecurse { file ->
if( file.name =~ /.*¥.jar$/ {
def jar = new JarFile(file)
def manifest = jar.manifest
def att = manifest?.mainAttributes
println “[File] ${file.absolutePath}”
println “Title: ${att?.getValue(‘Implementation-Title’)}”
println “Version: ${att?.getValue(‘Implementation-Version’)}”
println
}
というわけで
 Groovy(G*)に興味が湧いてきた方は
ぜひG*ワークショップにお越しください
 告知・申し込みはこちら
 http://jggug.doorkeeper.jp/
 次回はApache Camel+Groovyの予定
 お仕事も承っております
 ご相談は @nobusue まで
12
ありがとうございました
13
https://www.facebook.com/orehiji

20140329_kyon_kao_wedding_LT_Groovy