no_picture

nodejsのモジュールをブラウザで使えるようにするbrowserifyでちょっと遊んだ

Browserifyで少し遊んだ。 npmにあるライブラリをクライアントサイドで使いたいなぁ、という時に便利な子がBrowserifyさんです。 HTML側に複数のscriptタグを書かなくてよくなり、<script src="bundle.js"></script>のみ記述しておけば良いので管理が楽です。 (当然bundle.js以外の名前にすることもできます) requirejsの代わりに使うこともできるし、gulpやらを組み合わせてminifyなどもできるでしょう。 とりあえず試すには QUERY_STRINGをクライアントサイドで処理するのを試した。 ライブラリにはqsを利用。 nodejsをインストール npm install -g browserify npm install qs qsを使うコードをかく browserfyを実行 生成されたjsを使う nodejsのインストールは省略。 browserifyコマンドを利用するためにnpm intsall -g browseriyする。 今回はqsを使うのでnpm install qs をする。 以下のコードはmain.jsに書いた。 var qs = require('qs'); console.log(qs.parse('aaa=bbb&ccc=ddd')); 出力は以下のようになった。 { aaa: 'bbb', ccc: 'ddd' } これをブラウザ上でもうごくようにするためにbrowserifyを使う。 以下のコマンドでbundle.jsを作成する。 $ browserify main.js -o bundle.js qsの中身をbundle.jsの中に加えてrequireを使える状態にもなってるらしいけど確認してない。 index.htmlを作成してブラウザで開くとコンソールで開いてみると同じ出力がでている。 <html> <head> </head> <body> <script src="bundle.js"></script> </body> </html> もうちょっとちゃんとQUERY_STRINGを解析してみる さっきのは固定値だったので、ちゃんとURLから取得する。 location.searchの値を使った。 main.js を以下のようにして、HTML上にも表示した。 var qs = require('qs'); var queryString

no_picture

hubot で起動しているウェブサーバを経由して idobata へ投稿してみる

hubot をつかって idobata 用のBOTを作っていた。 heroku にホスティングして HTTPアクセスをすると idobata へメッセージが流れるようにしたい。 最終目的は CircleCI から WebHooks に登録しておいて、ビルドが終了したら通知したい、だったりするけど今回はそこはおいておく。 チャットへメッセージを送るには robot#send を呼べばよくて、第1引数が envelope で 第2引数以降が文字列。 idobata-adapter の場合は第1引数の message.data.room_id に投稿する ROOM_ID が必要になる。 参考 - hubot-idobata robot.send_room 'hogehoge' みたいな感じに投稿できるようにメソッドを加えるならこんな感じになった。 ROOM_ID = process.env.HUBOT_IDOBATA_DEFAULT_ROOM_ID module.exports = (robot) -> robot.send_room = (msg) -> envelope = { message: { data: {room_id: ROOM_ID } } } @send envelope, msg ROOM_ID を取得しないといけないので、登録したBOTに room_id を返すような機能を追加しました。 robot.respond /ROOM_ID/i, (msg) -> room_id = msg.message.data.room_id robot.logger.debug room_id msg.send room_id ROOM_ID がわかったら 環境変数 HUBOT_IDOBATA_DEFAULT_ROOM_ID を設定しておく。 あとは robot.router.get とか robot.router.post をつかって処理を作成すればいよい。 robot.router.post "/hubot/ping", (req, res) -> robot.send_room 'pong' ローカルで実行する場合は 8080 ポート。 heroku へは push するだけで使える。 /hubot/ping にアクセスするとチャットに pong と書き込みがされます。 hubot 自体のソースコードはそんなに長くないので、いじりながらソースよめばなんとか使えるようになりそうでした。 補足 robot.respond とか、使った場合は コールバック引数 msg があるのでこいつの send を利用するだけでチャットにかきこみができる。 msg は Response クラスのインスタンスでサーバからうけとった情報を message プロパティに保存されてて、この情報で envelope.message から取り出せる。 Response#send は以下のように実装されていて、 send: (strings...) -> @robot.adapter.send @envelope, strings...