"g"はgrapeのg
DESCRIPTION
JGGUG新春LT大会2010で使った資料TRANSCRIPT
![Page 1: "G"はGrapeのG](https://reader033.vdocuments.net/reader033/viewer/2022042813/5481281eb37959532b8b5d0e/html5/thumbnails/1.jpg)
JGGUG New Year LT Party / Jan 27th, 2010
“G” は Grape の G“G” IS FOR GRAPE
![Page 2: "G"はGrapeのG](https://reader033.vdocuments.net/reader033/viewer/2022042813/5481281eb37959532b8b5d0e/html5/thumbnails/2.jpg)
“The Groovy Adaptable / Advanced Packaging Engine”
![Page 3: "G"はGrapeのG](https://reader033.vdocuments.net/reader033/viewer/2022042813/5481281eb37959532b8b5d0e/html5/thumbnails/3.jpg)
Grape?
✤ Maven/Ivyベースのモジュール管理メカニズム
✤ 必要なjarを実行時に自動ダウンロードしてキャッシュ
✤ 依存関係の自動解決
✤ Groovy 1.6から標準装備、1.7で進化
![Page 4: "G"はGrapeのG](https://reader033.vdocuments.net/reader033/viewer/2022042813/5481281eb37959532b8b5d0e/html5/thumbnails/4.jpg)
ライブラリとってきたり,クラスパスに設定したりとか,そんなややこしいことを超越して,単に > groovy ほにゃらら.groovyとするだけで全てが解決するのは,なかなか感慨深いものがありますよ。
いまいまさのぶさん
『Groovy 1.6 RC1でgrapeを試す』http://d.hatena.ne.jp/masanobuimai/20081224/1230123639
![Page 5: "G"はGrapeのG](https://reader033.vdocuments.net/reader033/viewer/2022042813/5481281eb37959532b8b5d0e/html5/thumbnails/5.jpg)
ふもさん
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](https://reader033.vdocuments.net/reader033/viewer/2022042813/5481281eb37959532b8b5d0e/html5/thumbnails/6.jpg)
まじない一つで強大なJava
パワーを召喚し自在に操る“G” は Gandalf の G?
Groovy
![Page 7: "G"はGrapeのG](https://reader033.vdocuments.net/reader033/viewer/2022042813/5481281eb37959532b8b5d0e/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022042813/5481281eb37959532b8b5d0e/html5/thumbnails/8.jpg)
In Groovy 1.7
✤ アノテーションの制限が緩和
✤ importやpackage、変数宣言にも。一カ所に複数も可に
✤ @Grabパラメータの短縮記法
✤ @Grab(‘gid:aid:ver’)
✤ リゾルバの独自定義
✤ @GrabResolver(name=’repository’, root=’url’)
![Page 9: "G"はGrapeのG](https://reader033.vdocuments.net/reader033/viewer/2022042813/5481281eb37959532b8b5d0e/html5/thumbnails/9.jpg)
詳しくはこちら(訳したよ)
✤ 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](https://reader033.vdocuments.net/reader033/viewer/2022042813/5481281eb37959532b8b5d0e/html5/thumbnails/10.jpg)
例:フルGroovy対応Webサーバ
![Page 11: "G"はGrapeのG](https://reader033.vdocuments.net/reader033/viewer/2022042813/5481281eb37959532b8b5d0e/html5/thumbnails/11.jpg)
@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](https://reader033.vdocuments.net/reader033/viewer/2022042813/5481281eb37959532b8b5d0e/html5/thumbnails/12.jpg)
例:GitHubのコミット情報取得
![Page 13: "G"はGrapeのG](https://reader033.vdocuments.net/reader033/viewer/2022042813/5481281eb37959532b8b5d0e/html5/thumbnails/13.jpg)
@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](https://reader033.vdocuments.net/reader033/viewer/2022042813/5481281eb37959532b8b5d0e/html5/thumbnails/14.jpg)
例:SmackでGoogle Talk
![Page 15: "G"はGrapeのG](https://reader033.vdocuments.net/reader033/viewer/2022042813/5481281eb37959532b8b5d0e/html5/thumbnails/15.jpg)
@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](https://reader033.vdocuments.net/reader033/viewer/2022042813/5481281eb37959532b8b5d0e/html5/thumbnails/16.jpg)
まとめ
![Page 17: "G"はGrapeのG](https://reader033.vdocuments.net/reader033/viewer/2022042813/5481281eb37959532b8b5d0e/html5/thumbnails/17.jpg)
Grape = 召喚呪文
@Grab
![Page 18: "G"はGrapeのG](https://reader033.vdocuments.net/reader033/viewer/2022042813/5481281eb37959532b8b5d0e/html5/thumbnails/18.jpg)
Let’s get Groovy!今年もよろしく