道産子エンジニア

悲観主義は気分に属し、楽観主義は意志に属する

アプリストアの監視をSlackを使っていい感じに自動化する

10月3記事目〜

でも意外と〜を自動化しようって思いつかなかったりする。それだけ普段やってる面倒なことに慣れちゃうよなって思う。 勉強会とかで聞いてて手頃なところから自動化していこうと思ったのでささっとやった内容。

やりたいことは、Slackでbotにメンション>監視開始>ストア反映>Slackに通知する、これだけ。 今までリリース後「まだかなまだかな〜」みたいな心理的負荷があったのがなくなるので良い。

実際はこんな感じで動く

f:id:yuichi31:20161023224030p:plain f:id:yuichi31:20161023231342p:plain

去年に岡野さんがストア監視を自動化した話をしてて試したかったのと、botkitを使ってもう少し手順を簡単にしたかったのでやって良かった。

TONKOTSUはgoで書かれているのでgoの勉強にもなったし、botkitはNodeなのでjsの勉強にもなった。 TONKOTSUはマジ便利で最高なのだけど、tomlファイルにSlackのチャンネル情報やbotのtokenを起動時に使うので、社内のマシンに置きたかった。 botkitさえ動けばいいので、それぞれの環境があると思うけど、チームにiOSのビルド用Mac miniが転がっていたのでそいつにbotkit立てて社内Slackのbotを動かすことにした。岡野さんはGCMで動かしてるっぽい

必要なもの

  • 手頃なマシン
  • Node.js
  • yarn(npmでok)
  • Slack bot
  • go
  • TONKOTSU
  • botkit

Slack側の準備

さすがにチャンネルとかのセットアップは割愛。botの追加からいきます。

bot作成

以下の順番でbotを追加

f:id:yuichi31:20161023230410p:plain

f:id:yuichi31:20161023230644p:plain

f:id:yuichi31:20161023231603p:plain

f:id:yuichi31:20161023231614p:plain

説明適当すぎかな笑 登録したらbotのtokenをメモ。 APIドキュメントはここ

Bot Users | Slack

チャンネルのIncomming WebHookURLを用意

f:id:yuichi31:20161023231631p:plain ここにあるWebHookURLをメモる。なければチャンネルにIncomming WebHooksのインテグレーションを追加する。

マシンセットアップ

ここからが本番〜

TONKOTSUインストールとセットアップ

  • cloneしてtomlファイルを編集
$ git clone https://github.com/operando/tonkotsu.git
$ cd tonkotsu
$ vim config.toml

主に以下の変更

  • Slackへポストするbotのアイコンとか名前を可愛げにする(一番重要)
  • アプリのidやスキーマを設定
  • チャンネルとWebHookUrlを設定

これだけ。 iOSのアプリIDは 「id」に数字をくっつけて登録 これはURLの仕様なので .go ファイルをよしなにしてくれると変えらる。

Node.js

入れ方はいくらでもあると思うけど、バージョンの使い分けを簡単にするために @1000chパイセンのQiita記事を読むとすぐできる。

qiita.com

brewもあるのでbrewがある環境ならそっちの方が早そう。

botkitインストール

npmからも正式に反応が来てますます、これから使っていくぞという気持ちになった Yarn を使ってインストールしてみた。体感早かった。 (まだ何か困るほどnpmも使ってないけど)

$ yarn add botkit

もしくは

$ npm install --save botkit

Golang

この辺をみてインストール http://golang.jp/install

botkitのセットアップ

botの部分はこれくらいのコード。

var exec = require(‘child_proccess’).exec;
controller.hears([‘ストア’], ‘direct_mention, mention’, function(bot, message) {
    startMonitoring();
});

function startMonitoring() {
    exec(‘go run /YOUR_DIRECTORY/tonkotsu.go /YOUR_DIRECTORY/config.go -c /YOUR_DIRECTORY/config.toml’, function(err, stdout, stderr){
        if (err) {console.log(err);}
    });
};

execspawn とかと同じくシェルコマンドをjsで叩くライブラリ。 botkitはcontrollerの動きがわかればだいたい使えるかと。 注意したいのは .go ファイルをプロセスが叩くときうまくやらないと場所わからないので、俺はフルパスで指定した。他にいい方法あったら知りたい。 なので /YOUR_DIRECTORY/ の部分を変えてもらうとよい。あと、configも実行場所にいないと読み込まれないので指定したのだけど、他にいい方法ないだろうか… 先に cd でtonkotsuの場所まで移動すれば良いかもだけど、そうすると spawn とかの方がいいのかな。

上で用意したbotのtokenを使って

$ token=YOUR_TOKEN node slack_bot.js

で起動。あとは上の画像な感じでうまくいく。

以上!簡単!botkit最高!botは活き活きとさせたいのでもっともっと成長させていきたい。 あれしたい、これしたいってときにサクッとjsのライブラリ調べればできるので、なんでもできる感。いいねぇ。


そういえばネスペ受けたけど今回は惨敗でした…かなり午後の準備不足だったので反省。 二年分「午前一」が免除になるので、来年こそはという気持ち。 4月はデータベーススペシャリストがあるので、そちらをまずは取りに行く。