Slackはじめまして。engineering.otobank.co.jpさっそく弊社CTOの記事でネタにされてますが、Slack導入されてテンション上がっているエンジニアのasmzです。好物はアサヒスーパードライです。ところで、何でこの飲んだくれエンジニアがまだシラフのくせにSlack導入されてテンション上がっているのかというと、SlackはHubotと連携してボットを動かす事ができるんですね。Slack上でボット動かすことで、以下のようにいろいろ楽しいことができるそうなんですよ。チームの効率を最大化!nanapi流ChatOpsの取り組みチャットで勤怠管理する「みやもとさん」をリリースしましたただのボットに留まらぬこのポテンシャル、見逃す手はないですよねー。弊社のSlackにはCTOが「otobot」という名前のHubotを入れてくれたので、このotobot君を愛すべきマスコットキャラに育て上げるべく、我々エンジニアが頑張らなくてはなりません。愛すべき我らがotobot君という訳で、今回試しに我らがotobot君に機能追加してみたので、その内容と手順をご紹介します。皆さんは普段会社で仕事してて、こんな経験はありませんか?今雨降ってるから、止むタイミングを見計らって帰りたい会社の置き傘持って行く必要あるかどうか、自宅付近の天気次第で決めたい何かすごい豪雨らしいから見に行きたいけど、今ちょっと席を立てないとにかく今の天気が気になって仕事が手につかない最後に当てはまる人は何か別の理由がありそうですが、ちょっとしたタイミングで外の天気知りたい時、ありますよね。そんなときのために今回は、サクッと今の天気を調べてくれるHubotスクリプトを作成し、稼働中のotobot君に追加してみたいと思います。Platform(YOLP)のWebAPIを利用します。IDとアプリケーションIDが必要になります。Hubotへの実装Hubotの構成と仕組み稼動中のHubotプロジェクトは基本的に以下のようなディレクトリ構成になっているかと思います。youtube.coffeeこのHubotを動かすと、scriptsディレクトリ以下にある「*.coffee」が自動的に読み込まれ、そこに記載されているロジック通りにHubotが反応する、という仕組みです。単純に機能追加したいだけなら稼働中のHubotのscriptsディレクトリに自前のスクリプトを放り込めばよいというわけです!簡単!今回作成したHubotスクリプト実際にscriptsディレクトリへ放り込むスクリプトはこちらです。amagumo.coffee以下、抜粋でいくつかコード解説を。msg.match[2]Hubotに対して呟かれた内容を正規表現でマッチさせ、必要な情報を変数に格納しています。ここがYahoo!ジオコーダAPIへのリクエスト部です。queryに入力された地名を渡し、ヒットした最初の1件のみJSONで取得しています。"type:rainfall"Yahoo!スタティックマップAPIのURL生成部は長いので関数化しました。overlayパラメータで設定している「type:rainfall」で地図表示に雨雲レーダーがオーバーレイされます。実は私CoffeeScriptを書くの初めてなんですが、Hubotスクリプトは割と単純なので、他のスクリプトなどを読んでいれば大体どう書けばわかるのが良い所ですね。実際にSlack上で動作させるとこんな感じになります。これで仕事しながらいつでも外の天気知ることができますね!npmへ公開してみよう!ここまででHubotへの機能追加は完了ですが、せっかくスクリプトを作ったのなら、いろんな人に使ってもらいたいものです。Manager)とは、Node.jsで作られたパッケージモジュールを管理するためのツールです。<パッケージ名>コマンド一つでそのパッケージをインストールすることが出来ます。npmへの公開手順npmへのパッケージ公開は以下の手順で行います。パッケージ用のディレクトリ構造を用意package.jsonファイルを作成npmにユーザアカウントを作成パッケージ公開コマンド実行パッケージ用のディレクトリ構造を用意パッケージとして公開するにあたってのディレクトリ構造例はこんな感じです。amagumo.coffeeLICENSE.md、README.mdお馴染みのやつです。README.mdではインストール方法や具体的な使用方法を書いておくとよいですねindex.coffeeこのスクリプトが実際のエントリーポイントとなります。具体的にはこちらのソース内容を見てもらえばよいですが、ここで「scripts」配下のスクリプトのローディングを行いますpackage.json後述しますが、npmへ登録するためのメタ情報を記載しますscripts/amagumo.coffee先に紹介したスクリプト実体です利用者がこのパッケージを自分のHubotへインストールすると、Hubotディレクトリ内のnode_modules以下にこの構造ごと配置され、エントリーポイントであるindex.coffeeが自動的に読み込まれることで利用可能になるという仕組みです。package.jsonファイルを作成package.jsonファイルは、npmへパッケージとして登録する際に必要となるメタ情報をJSON形式でまとめたものです。公開対象パッケージのディレクトリ内に作成してください。ゼロから自分で書くことも出来ますが、対象ディレクトリで以下のコマンドを実行することで、対話形式で作成することも可能です。init具体的な記載内容は公式ドキュメント(日本語版)や、今回作ったものをご参照ください。npmにユーザアカウントを作成npmへパッケージとして登録するためには、事前にユーザアカウントを保持している必要があります。アカウント作成は以下のコマンドで簡単に行えます。land.front.high.field@gmail.comパッケージ公開コマンド実行ここまでで公開準備は完了となり、後は以下のコマンドを対象パッケージの(package.jsonが存在する)ディレクトリで実行するだけでパッケージが公開されます。hubot-yahoo-amagumo@0.0.3なお、パッケージの新規登録だけでなくバージョンアップの場合も、package.jsonの「version」を変更した上で、再度このコマンドを実行します。以下のコマンドを実行することで、公開されたパッケージ内容を確認することが可能です。:(省略)以上がHubotへの機能追加~公開までの一連の手順となります。長くなってしまいましたが、ご静聴ありがとうございました。ここで作ったHubotスクリプトはGitHubとnpmに公開していますので、興味持たれた方はぜひご利用(またはバグのご指摘)ください!最後にこちらのスクリプトはYahoo!JAPANさんのAPIの元に成り立っております。有用なAPIを提供していただき感謝致します。(欲を言えば、Yahoo!スタティックマップAPIがまだ高解像度降水ナウキャストに対応されていないようなので、早く対応されると嬉しいなぁ、なんて)おまけさて、秋風が寒くなってきていよいよ冬の足音が聞こえてきた今日このごろですが、そろそろこんな季節ですね。PHP拡張/パッケージをCIで検出し、インストール漏れエラーを防ぐ。PHPで広く使われて...2020-08-17APIが不必要にセンシティブなデータを返していないことをCIで担保する暑い日が続きますね。編~どうも、けいまです。最近は日中の暑さも和らぎ、夜は窓を開け...2015-08-26slackでランダムメッセージを定期的に送りたい!/デザイナーだけどHubot-scriptと格闘し...最近、プログラミングのハードルが高くて悶々としているぺろこ...2015-06-19社内でHubotスクリプト勉強会を開催したよこんにちは。麦芽系エンジニアasmzです。10引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。