groovyなgae/j gaelykでかんたんbot工作
DESCRIPTION
名古屋SGGAE/J勉強会で使った資料TRANSCRIPT
名古屋SGGAE/J勉強会 / 2009.12.26slide #1
GroovyなGAE/JGaelykでかんたんbot工作Kazuchika Sekiya <[email protected]>
名古屋SGGAE/J勉強会 / 2009.12.26slide #2
話す人! 『Groovyイン・アクション』翻訳者の一人! JGGUG運営委員スタッフ(兼翻訳隊長)! ブログ: Groovyラボ @Reloaded! Twitter: kazuchika
名古屋SGGAE/J勉強会 / 2009.12.26slide #3
アジェンダ
ヒントと注意事項
Gaelykで遊ぼう!
Gaelykって?
名古屋SGGAE/J勉強会 / 2009.12.26slide #4
Part 1: Gaelykって?
summer special g* workshop / 2009.08.22slide #5
Groovyとは(1分で)! Java VM上で動作する動的スクリプト言語
! JSR-241で標準化。実装はオープンソース! 特徴
! 簡潔さ– RubyなどのLLと同水準の強力な表現力
! 柔軟性– 動的、メタプログラミング、DSL向き
! Javaとの親和性– 構文、相互呼び出し、実行環境、知識/ノウハウ
名古屋SGGAE/J勉強会 / 2009.12.26slide #6
とは! GAE/JをGroovyで利用するための便利キット
! GroovletとTemplateEngineを即活用! プロジェクトテンプレート
– 定義済み設定ファイル! GAE固有サービス/APIのラッパー
! 「げーりっく」と読みましょう! ゲール人(gaelic)をもじったもの! ガーリック(garlic)じゃないよ!
?
名古屋SGGAE/J勉強会 / 2009.12.26slide #7
やってみよう!(1)! (GAEのアカウントを用意)! GAEのコンソールから app-id を取得
! https://appengine.google.com/! Gaelykのテンプレートプロジェクトをダウンロードして展開(<DIR> とする)! http://gaelyk.appspot.com/download
! 設定ファイルを編集し app-id を設定! <DIR>/war/WEB-INF/appengine-web.xml
名古屋SGGAE/J勉強会 / 2009.12.26slide #8
やってみよう!(2)! hello.groovy スクリプトを書いて<DIR>/war/WEB-INF/groovy に置く
!
// ミニマム版out.println "Hello, Nagoya!"
html.html { // オプション:HTML版head { title "Greeting" }body {
h1 "Greeting"p "Hello, Nagoya!"
}}
名古屋SGGAE/J勉強会 / 2009.12.26slide #9
やってみよう!(3)! ローカルサーバでテスト
! <DIR> で次を実行! ブラウザでアクセス
– http://localhost:8080/hello.groovy! クラウドにデプロイ
! <DIR> で次を実行! ブラウザでアクセス
– http://<app-id>.appspot.com/hello.groovy
% dev_appserver.sh war
% appcfg.sh update war
名古屋SGGAE/J勉強会 / 2009.12.26slide #10
おさらい! 実質こんだけ:1.Gaelykのテンプレートをダウンロードして展開2.appengine-web.xmlにapp-idを設定
日本語使うなら文字コード設定(後述)も必要3.スクリプトを書いてwar/WEB-INF/groovyに置く
groovletなら拡張子.groovy、テンプレートなら.gtpl! 超簡単でしょ!
名古屋SGGAE/J勉強会 / 2009.12.26slide #11
ディレクトリ構造<DIR>/
src/
war/ – デプロイされるのはここ以下index.gtpl – welcomeファイルWEB-INF/
appengine-web.xml – GAE固有の設定ファイルweb.xml – 通常のJava EE設定ファイルcron.xml - cron設定ファイルclasses/ – クラスファイルgroovy/ – Groovyスクリプトincludes/ – ヘッダ、フッタ等lib/ – JARファイル
名古屋SGGAE/J勉強会 / 2009.12.26slide #12
もっと学ぶには! 本家チュートリアル(バージョン0.3.2)
! http://gaelyk.appspot.com/tutorial! 日本語版(バージョン0.2)
! http://dl.dropbox.com/u/132573/Gaelyk-Tutorial.html! この後の山本さんのセッション?
名古屋SGGAE/J勉強会 / 2009.12.26slide #13
Part 2: Gaelykで遊ぼう!
名古屋SGGAE/J勉強会 / 2009.12.26slide #14
自作のTwitter botたち鉄道情報A1100 followers
鉄道情報B18 followers
鉄道情報C3000 followers
tokyoweather450 followers
yokohamaweather270 followers
amedas_tokyo210 followers
amedas110 followers
名古屋SGGAE/J勉強会 / 2009.12.26slide #15
なぜGAE/Gaelykでbot?! 自前のサーバ不要
! Googleによる24時間365日のホスティング! cronによるバッチジョブ実行! 便利なwebコンソール! botならトラフィックの心配がほとんどない
! Twitter botならフォロワーが増えてもノーリスク! GroovyならXML処理やスクレイピングは楽勝
名古屋SGGAE/J勉強会 / 2009.12.26slide #16
フレームワーク化してみた! モジュールを組み合わせてパイプラインを構成
! 入力モジュール:1個以上! フィルタモジュール:0個以上! 出力モジュール:1個以上
! モジュールの構成を設定ファイルに書くだけ! <パイプライン名>Config.groovy! ConfigSlurper形式
! 下記URLへのアクセスで起動(通常はcron)! http://<サーバ>/pipe/<パイプライン名>
名古屋SGGAE/J勉強会 / 2009.12.26slide #17
入力モジュール! 何らかの情報源から情報を取得するモジュール
! retrieve() メソッド– 規定された形式のマップ(のリスト)を返す
! モジュールの例! LWWS(Livedoor Weather Web Service)! Amedas(スクレイピング)! 鉄道情報A,B,C(スクレイピング)! 汎用feedリーダ(開発中)
名古屋SGGAE/J勉強会 / 2009.12.26slide #18
「情報」マップの構造key 説明
title タイトル
summary 概要。100文字程度
description 内容の詳細
timestamp タイムスタンプ。Date型
importance 重要度。0-2
url URL。オプション
名古屋SGGAE/J勉強会 / 2009.12.26slide #19
フィルタモジュール! 情報を選別したり変換したりするモジュール
! process(infolist) メソッド– 規定された形式のマップのリストを受け取り、処理結果のリストを返す
! モジュールの例! Select! Tee(分岐)! Sort! Unique
名古屋SGGAE/J勉強会 / 2009.12.26slide #20
出力モジュール! 何らかの出力先に情報を通知するモジュール
! publish(subject, infolist) メソッド– 規定された形式のマップのリストを受け取り、出力先に通知する
! モジュールの例! WebDump(テスト・デバッグ用)! Tweeter! ProwlPush(iPhoneにプッシュ)! NabaztagTalker! Emailer(開発中)
名古屋SGGAE/J勉強会 / 2009.12.26slide #21
パイプラインの実例1:お天気情報bot
! 1日3回、定時にcron起動! パイプライン構成
名古屋SGGAE/J勉強会 / 2009.12.26slide #22
パイプラインの実例2:交通情報レポート
! 平日の毎朝2回、定時にcron起動! パイプライン構成
名古屋SGGAE/J勉強会 / 2009.12.26slide #23
パイプラインの実例3:鉄道運行情報bot
! 15分おきにcron起動! パイプライン構成
名古屋SGGAE/J勉強会 / 2009.12.26slide #24
パイプライン作成デモ:名古屋お天気情報bot
! 1日3回、定時にcron起動! パイプライン構成
! 必要な設定! Twitterアカウント(済)! nagoyaweatherConfig.groovy! cron.xml
名古屋SGGAE/J勉強会 / 2009.12.26slide #25
今後の予定! ちゃんと公開! モジュールの充実
名古屋SGGAE/J勉強会 / 2009.12.26slide #26
その他のbot! JGGUG bot
! TwitterのJGGUGアカウントに連携– http://twitter.com/jggug
! #jggug ハッシュタグ発言を自動retweet! 発言者を@jggug/jggugリストに追加
! Google wave bot! waveのbotはGAEで作る! もちろんGroovyでも書ける! 試してみたので作り方をそのうちまとめます
名古屋SGGAE/J勉強会 / 2009.12.26slide #27
Part 3: ヒントと注意事項
名古屋SGGAE/J勉強会 / 2009.12.26slide #28
文字コード設定! appengine-web.xmlに下記を設定
! groovyソースやテンプレートはUTF-8で書く
<system-properties><property name="file.encoding" value="UTF-8"/><property name="groovy.source.encoding" value="UTF-8"/>
</system-properties>
名古屋SGGAE/J勉強会 / 2009.12.26slide #29
ロギング! デバッグの手段として極めて重要!! 標準出力に書く
! System.out は Infoレベルでログに記録! System.err は Warningレベルでログに記録! 現時点では日本語は文字化けしてしまうので注意
! JDKの標準ロギング機構を使う! java.util.logging.Logger! 文字化けしない
名古屋SGGAE/J勉強会 / 2009.12.26slide #30
cronについて! 次のような設定が書けない
! 毎時xx分に起動! 時間の列挙(毎日5時、11時、17時に起動とか)! 範囲指定(朝6時から夜2時まで等)
! "every x minutes"はかなり不正確で、だんだん後ろにずれていったりする
名古屋SGGAE/J勉強会 / 2009.12.26slide #31
GAEの制限事項関連! URLフェッチサービスは重い
! CPU Timeを結構消費する! GAEとの相性が悪いサービスがある?! 外部へのHTTPアクセスは最小限かつ効率良く
! 30秒ルールに注意! DeadlineExceededExceptionで強制終了! Twitterのような重いサービスへのアクセスで発生! 通信途中で中断されても矛盾を残さないロジック
名古屋SGGAE/J勉強会 / 2009.12.26slide #32
Let's get Groovy!