groovyなgae/j gaelykでかんたんbot工作

32
名古屋SGGAE/J勉強会 / 2009.12.26 slide #1 GroovyなGAE/J Gaelykでかんたんbot工作 Kazuchika Sekiya <[email protected]>

Upload: kazuchika-sekiya

Post on 27-May-2015

2.128 views

Category:

Technology


8 download

DESCRIPTION

名古屋SGGAE/J勉強会で使った資料

TRANSCRIPT

Page 1: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋SGGAE/J勉強会 / 2009.12.26slide #1

GroovyなGAE/JGaelykでかんたんbot工作Kazuchika Sekiya <[email protected]>

Page 2: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋SGGAE/J勉強会 / 2009.12.26slide #2

話す人! 『Groovyイン・アクション』翻訳者の一人! JGGUG運営委員スタッフ(兼翻訳隊長)! ブログ: Groovyラボ @Reloaded! Twitter: kazuchika

Page 3: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋SGGAE/J勉強会 / 2009.12.26slide #3

アジェンダ

ヒントと注意事項

Gaelykで遊ぼう!

Gaelykって?

Page 4: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋SGGAE/J勉強会 / 2009.12.26slide #4

Part 1: Gaelykって?

Page 5: GroovyなGAE/J Gaelykでかんたんbot工作

summer special g* workshop / 2009.08.22slide #5

Groovyとは(1分で)! Java VM上で動作する動的スクリプト言語

! JSR-241で標準化。実装はオープンソース! 特徴

! 簡潔さ– RubyなどのLLと同水準の強力な表現力

! 柔軟性– 動的、メタプログラミング、DSL向き

! Javaとの親和性– 構文、相互呼び出し、実行環境、知識/ノウハウ

Page 6: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋SGGAE/J勉強会 / 2009.12.26slide #6

      とは! GAE/JをGroovyで利用するための便利キット

! GroovletとTemplateEngineを即活用! プロジェクトテンプレート

– 定義済み設定ファイル! GAE固有サービス/APIのラッパー

! 「げーりっく」と読みましょう! ゲール人(gaelic)をもじったもの! ガーリック(garlic)じゃないよ!

?

Page 7: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋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

Page 8: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋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!"

}}

Page 9: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋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

Page 10: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋SGGAE/J勉強会 / 2009.12.26slide #10

おさらい! 実質こんだけ:1.Gaelykのテンプレートをダウンロードして展開2.appengine-web.xmlにapp-idを設定

日本語使うなら文字コード設定(後述)も必要3.スクリプトを書いてwar/WEB-INF/groovyに置く

groovletなら拡張子.groovy、テンプレートなら.gtpl! 超簡単でしょ!

Page 11: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋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ファイル

Page 12: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋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! この後の山本さんのセッション?

Page 13: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋SGGAE/J勉強会 / 2009.12.26slide #13

Part 2: Gaelykで遊ぼう!

Page 14: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋SGGAE/J勉強会 / 2009.12.26slide #14

自作のTwitter botたち鉄道情報A1100 followers

鉄道情報B18 followers

鉄道情報C3000 followers

tokyoweather450 followers

yokohamaweather270 followers

amedas_tokyo210 followers

amedas110 followers

Page 15: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋SGGAE/J勉強会 / 2009.12.26slide #15

なぜGAE/Gaelykでbot?! 自前のサーバ不要

! Googleによる24時間365日のホスティング! cronによるバッチジョブ実行! 便利なwebコンソール! botならトラフィックの心配がほとんどない

! Twitter botならフォロワーが増えてもノーリスク! GroovyならXML処理やスクレイピングは楽勝

Page 16: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋SGGAE/J勉強会 / 2009.12.26slide #16

フレームワーク化してみた! モジュールを組み合わせてパイプラインを構成

! 入力モジュール:1個以上! フィルタモジュール:0個以上! 出力モジュール:1個以上

! モジュールの構成を設定ファイルに書くだけ! <パイプライン名>Config.groovy! ConfigSlurper形式

! 下記URLへのアクセスで起動(通常はcron)! http://<サーバ>/pipe/<パイプライン名>

Page 17: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋SGGAE/J勉強会 / 2009.12.26slide #17

入力モジュール! 何らかの情報源から情報を取得するモジュール

! retrieve() メソッド– 規定された形式のマップ(のリスト)を返す

! モジュールの例! LWWS(Livedoor Weather Web Service)! Amedas(スクレイピング)! 鉄道情報A,B,C(スクレイピング)! 汎用feedリーダ(開発中)

Page 18: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋SGGAE/J勉強会 / 2009.12.26slide #18

「情報」マップの構造key 説明

title タイトル

summary 概要。100文字程度

description 内容の詳細

timestamp タイムスタンプ。Date型

importance 重要度。0-2

url URL。オプション

Page 19: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋SGGAE/J勉強会 / 2009.12.26slide #19

フィルタモジュール! 情報を選別したり変換したりするモジュール

! process(infolist) メソッド– 規定された形式のマップのリストを受け取り、処理結果のリストを返す

! モジュールの例! Select! Tee(分岐)! Sort! Unique

Page 20: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋SGGAE/J勉強会 / 2009.12.26slide #20

出力モジュール! 何らかの出力先に情報を通知するモジュール

! publish(subject, infolist) メソッド– 規定された形式のマップのリストを受け取り、出力先に通知する

! モジュールの例! WebDump(テスト・デバッグ用)! Tweeter! ProwlPush(iPhoneにプッシュ)! NabaztagTalker! Emailer(開発中)

Page 21: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋SGGAE/J勉強会 / 2009.12.26slide #21

パイプラインの実例1:お天気情報bot

! 1日3回、定時にcron起動! パイプライン構成

Page 22: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋SGGAE/J勉強会 / 2009.12.26slide #22

パイプラインの実例2:交通情報レポート

! 平日の毎朝2回、定時にcron起動! パイプライン構成

Page 23: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋SGGAE/J勉強会 / 2009.12.26slide #23

パイプラインの実例3:鉄道運行情報bot

! 15分おきにcron起動! パイプライン構成

Page 24: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋SGGAE/J勉強会 / 2009.12.26slide #24

パイプライン作成デモ:名古屋お天気情報bot

! 1日3回、定時にcron起動! パイプライン構成

! 必要な設定! Twitterアカウント(済)! nagoyaweatherConfig.groovy! cron.xml

Page 25: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋SGGAE/J勉強会 / 2009.12.26slide #25

今後の予定! ちゃんと公開! モジュールの充実

Page 26: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋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でも書ける! 試してみたので作り方をそのうちまとめます

Page 27: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋SGGAE/J勉強会 / 2009.12.26slide #27

Part 3: ヒントと注意事項

Page 28: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋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>

Page 29: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋SGGAE/J勉強会 / 2009.12.26slide #29

ロギング! デバッグの手段として極めて重要!! 標準出力に書く

! System.out は Infoレベルでログに記録! System.err は Warningレベルでログに記録! 現時点では日本語は文字化けしてしまうので注意

! JDKの標準ロギング機構を使う! java.util.logging.Logger! 文字化けしない

Page 30: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋SGGAE/J勉強会 / 2009.12.26slide #30

cronについて! 次のような設定が書けない

! 毎時xx分に起動! 時間の列挙(毎日5時、11時、17時に起動とか)! 範囲指定(朝6時から夜2時まで等)

! "every x minutes"はかなり不正確で、だんだん後ろにずれていったりする

Page 31: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋SGGAE/J勉強会 / 2009.12.26slide #31

GAEの制限事項関連! URLフェッチサービスは重い

! CPU Timeを結構消費する! GAEとの相性が悪いサービスがある?! 外部へのHTTPアクセスは最小限かつ効率良く

! 30秒ルールに注意! DeadlineExceededExceptionで強制終了! Twitterのような重いサービスへのアクセスで発生! 通信途中で中断されても矛盾を残さないロジック

Page 32: GroovyなGAE/J Gaelykでかんたんbot工作

名古屋SGGAE/J勉強会 / 2009.12.26slide #32

Let's get Groovy!