サイボウズライブでもhubotがしたい!

34
LT駆動開発 #11 - kamera25

Upload: takahiro-nakaoku

Post on 19-Jul-2015

7.166 views

Category:

Technology


2 download

TRANSCRIPT

LT駆動開発 #11 - kamera25

Topロゴだけ頑張りました。

自己紹介

● 広島工業大学情報工学科 4年 (中奥貴浩)

● Twitter : @csc_kamera25● Github : kamera25● ブログ : http://religion.indiesj.com/● CrowSullCore メインプログラマ

1月のベストツイート

要約

今回はそんな Hubot を

サイボウズライブで使えるようにするまでのお話。

Hubotとの出会い

ひむらさんがHubotで事務所管理ツールを作成した事例を発表

Hubot

Githubが作った、ボット作成支援ソフト

Hubot is your company’s robot.

( 僕˘⊖˘) 。o(楽しそうなツールだけど、仕事で

チャットする事なんてないからなぁ…)

ところが…大学組織と社会人を

つなぐ取り組み

「すごい合同勉強会2014 in 広島 - すごい合同勉強会2014 in 広島 - すごいOSCLOVE同好会CloudStackE本LT駆動CTFサーバa-blogスクラムNVDAEmacs岡山Functionalλ++UnityCocoa.rb.hx」で発表

http://www.slideshare.net/ssuser17fb84/ss-40994247

サイボウズライブを多用するように。(チャットも活用)

効率よく作業したい。

よし、Hubotだっ!

あれ…

HipChatIRCTwilioTwitterGtalkSkypeiMessageChatWorkSlackidobata

主なHubotと連携可能なサービス

サイボウズライブじゃ使えないじゃないっ!!

しょうがないので、作りました。

https://github.com/kamera25/hubot-cybozulive

Hubotの構造 / Adapter(アダプター)

hubotスクリプト (応答内容を決めてるスクリプト )

hubotアダプター (外部サービスとの連携部分 )

ブレイン (永続化させるデータ )

ロボット(メイン処理?)

Hubot 外部サービス

Hubotの構造 / Adapter(アダプター)

hubotスクリプト (応答内容を決めてるスクリプト )

hubotアダプター (外部サービスとの連携部分 )

ブレイン (永続化させるデータ )

ロボット(メイン処理?)

Hubot 外部サービス

ここ!

アダプター

● Hubotは Node.js で出来ている。● 記述には CoffeeScript を利用する。● サイボウズライブとの連携は、サイボウズライブデータ APIを使う。

https://developer.cybozulive.com/apps/top

私の経験

Hubot : 経験なし 「シェル版も触った事ない」

Node.js : 経験なし 「存在だけ知って程度」

CoffeeScript : 経験なし 「Javascriptとどう違うの?」

OAuth : 経験なし 「ユーザ認証ってIDとパスワードをhttp平文で送るの?」

サイボウズライブAPI : 経験なし

どうあがいても絶望…

Hubotのインストール

超むずかしいぃ!!!

● Node.jsのアップデート● git clone してビルド。● ライブラリ足りない。● 動かない。● ./bin/hubot で実行しないと動かない。● 返事しない。

1日経過…

Hubotのインストール

npm install -g yo generator-hubot

npmを使えばコマンド一発で簡単だった。

npm … Rubyのgemのようなパッケージ管理ツール

慣れないあいつら

● Node.jsの非同期処理● コールバック地獄● CoffeeScriptで Tab を使いまくりエラー● CoffeeScriptってスペースに意味もつの?● Coffee!!!!● Coffeeめ…● Cooooffffffffffeeeeeeeee!!!

OAuthでつまづく…

サイボウズライブサーバ

Hubotクライアント

Error!!

何送ればええねん!

結局、XAuthで代用した。

サイボウズライブサーバ

Hubotクライアント

ユーザID / パスワード

ユーザIDパスワード

環境変数

アクセストークン

ちなみに Hubot では 環境変数 に設定情報を入れておくのが作法だそうです。

開発中盤に気づく。

チャット API チャットPush API

チャットルームの情報を引き出す。(内容は引き出せない。 ) チャットの内容を送信する

あれ。

チャットの内容を取得するAPIがないっ!!!

妥協した

新着情報APIから、チャットの情報を抜き出してHubotに投げた。

ただし新着で取得できるのは、チャットルームの最新一つの内容のみなのでチャットが高速で流れると、Hubotがガン無視するバグが。

自分 「チャットを受信する 頻度 あげればいいじゃぁ~ん!」

バグ発生

ところが。

https://developer.cybozulive.com/doc/current/pub/overview.html

単純計算で

1分間に4回リクエストでOUT(チャット送信リクエストを入れると更に頻度を落とす必要が …)

妥協。

実行結果

ところで…

つぶやいた。

あっ。

サイボウズライブの偉い人

機械的にFavする前に、Pull API を早く教えてください!

ご清聴ありがとうございました。

https://github.com/kamera25/hubot-cybozulive

ご意見・ご感想・ごイシューお待ちしてます!