"g"はgrapeのg

18
JGGUG New Year LT Party / Jan 27th, 2010 “G” Grape G “G” IS FOR GRAPE

Upload: kazuchika-sekiya

Post on 29-Nov-2014

2.619 views

Category:

Documents


0 download

DESCRIPTION

JGGUG新春LT大会2010で使った資料

TRANSCRIPT

Page 1: "G"はGrapeのG

JGGUG New Year LT Party / Jan 27th, 2010

“G” は Grape の G“G” IS FOR GRAPE

Page 2: "G"はGrapeのG

“The Groovy Adaptable / Advanced Packaging Engine”

Page 3: "G"はGrapeのG

Grape?

✤ Maven/Ivyベースのモジュール管理メカニズム

✤ 必要なjarを実行時に自動ダウンロードしてキャッシュ

✤ 依存関係の自動解決

✤ Groovy 1.6から標準装備、1.7で進化

Page 4: "G"はGrapeのG

ライブラリとってきたり,クラスパスに設定したりとか,そんなややこしいことを超越して,単に > groovy ほにゃらら.groovyとするだけで全てが解決するのは,なかなか感慨深いものがありますよ。

いまいまさのぶさん

『Groovy 1.6 RC1でgrapeを試す』http://d.hatena.ne.jp/masanobuimai/20081224/1230123639

Page 5: "G"はGrapeのG

ふもさん

kiy0takaさん

nobusueさん

ゲンゾウさん

最近、いまさらながらgrapeの機能が便利だな、と思った『groovyスクレイピング & grape』http://genzou-postit.blogspot.com/2009/05/groovy-grape.html

Grapeを利用してTwitter4jのjarを入れなくても使えるように手直ししてみました。『Groovy版Twitterクライアント(@Grab利用)』http://d.hatena.ne.jp/nobusue/20090703/p1

Grapeという機能を使って、勝手にDerbyを落としてきて使ってます。『データベース不要のデータベースクライアントツール「SqlPortable」』http://d.hatena.ne.jp/kiy0taka/20090308/1236459204

自動で最新のcommons-netのjarを取得してきてくれます。便利ですね。『GroovyでFTP by grape』http://d.hatena.ne.jp/fumokmm/20090607/1244391071

Page 6: "G"はGrapeのG

まじない一つで強大なJava

パワーを召喚し自在に操る“G” は Gandalf の G?

Groovy

Page 7: "G"はGrapeのG

In Groovy 1.6

✤ アノテーション

✤ @Grab(group=’gid’, module=’aid’, version=’ver’)

✤ メソッド呼び出し

✤ Grape.grab(group:’gid’, module:’aid’, version=’ver’)

✤ コマンドラインツール

✤ grape <install|list|resolve>

Page 8: "G"はGrapeのG

In Groovy 1.7

✤ アノテーションの制限が緩和

✤ importやpackage、変数宣言にも。一カ所に複数も可に

✤ @Grabパラメータの短縮記法

✤ @Grab(‘gid:aid:ver’)

✤ リゾルバの独自定義

✤ @GrabResolver(name=’repository’, root=’url’)

Page 9: "G"はGrapeのG

詳しくはこちら(訳したよ)

✤ Grapeユーザガイド

‣ http://groovy.codehaus.org/Japanese+Grape

✤ Groovy 1.7リリースノート

‣ http://groovy.codehaus.org/Japanese+Groovy+1.7+release+notes

Page 10: "G"はGrapeのG

例:フルGroovy対応Webサーバ

Page 11: "G"はGrapeのG

@Grab('org.eclipse.jetty:jetty-server:7.0.1.v20091125')@Grab('org.eclipse.jetty:jetty-servlet:7.0.1.v20091125')import org.eclipse.jetty.server.*import org.eclipse.jetty.server.handler.*import org.eclipse.jetty.servlet.*import groovy.servlet.*

server = new Server(8080)servletHandler = new ServletContextHandler(ServletContextHandler.SESSIONS)servletHandler.with { resourceBase = '.' contextPath = '/' addServlet(GroovyServlet, '*.groovy') addServlet(TemplateServlet, '*.gtpl')}resourceHandler = new ResourceHandler( resourceBase:".", welcomeFiles:['index.html'], directoriesListed:true)server.handler = new HandlerList(handlers:[servletHandler, resourceHandler])

server.start()

Page 12: "G"はGrapeのG

例:GitHubのコミット情報取得

Page 13: "G"はGrapeのG

@GrabResolver(name='HiveDB', root='http://www.hivedb.org/maven/')@Grab('org.hivedb:github-api:1.0')import org.hivedb.github.*

hub = new GitHub('glaforge', 'gaelyk')println "Recent commits in ${hub.userName}/${hub.repository}:"hub.commits.each { c -> println """${c.authorDate} by ${c.author.name}${c.message}${c.url}"""}

Page 14: "G"はGrapeのG

例:SmackでGoogle Talk

Page 15: "G"はGrapeのG

@Grab('jivesoftware:smack:3.0.4')@Grab('jivesoftware:smackx:3.0.4')import org.jivesoftware.smack.*

(username, password) = ['自分のユーザ名', 'パスワード']to = '相手のユーザ名@gmail.com'

con = new XMPPConnection( new ConnectionConfiguration('talk.google.com', 5222, 'gmail.com'))con.connect()con.login(username, password)chat = con.chatManager.createChat(to, { chat, msg -> chat.sendMessage(msg.body)} as MessageListener) chat.sendMessage("Say something to me. I'll echo it.")

while(true) { sleep 1000 }

Page 16: "G"はGrapeのG

まとめ

Page 17: "G"はGrapeのG

Grape = 召喚呪文

@Grab

Page 18: "G"はGrapeのG

Let’s get Groovy!今年もよろしく