twitterのつぶやきをSlackにポストする方法とそのメリット

※更新
Hubot Integrationが更新されて必要な環境変数等が変わっているので注意。
http://qiita.com/KeitaMoromizato/items/0ee11d795d18a49538d8

# twitterのつぶやきをSlackにポストする方法とそのメリット
タイトルの通り、Slackにtwitterのつぶやきを投稿する方法を説明しています。これ、自社サービスをお持ちの企業でやると意外と効果的だったり。最後の方にメリットを書いていますのでどうぞ。

## 前提
* herokuにユーザ登録済み
* herokuコマンドが使える
* herokuにクレジットカード情報を登録している

クレジットカードを登録していないとmonglabのアドオンが使えないので登録必須です。課金は発生しないはずですが、万が一発生した場合も自己責任でお願いします...


## twitter token取得
[Twitter Applicatioin Management](https://apps.twitter.com/)から[Create New App]で各種情報を入力し、[create your twitter application]。

![2.png](https://qiita-image-store.s3.amazonaws.com/0/52054/08f879ae-e583-5a93-7890-eace38c5fbf9.png)

[Keys and Access Tokens]からAPI KeyとAPI Secretを取得します。

![4.png](https://qiita-image-store.s3.amazonaws.com/0/52054/b8583833-ba64-1fc4-def5-18c9ace60e08.png)

あとは下のほうにある[Create my access token]から...

![8.png](https://qiita-image-store.s3.amazonaws.com/0/52054/7faed0fb-aabe-d3df-0fd6-61f1af1d094f.png)

Access TokenとAccess Token Secretを取得します。

![9.png](https://qiita-image-store.s3.amazonaws.com/0/52054/e25b2bb2-08a9-578a-ac50-ccd26a84a537.png)


## Slack Token取得
Slackの[add a service integration]から[Incoming Webhooks]を選択、チャネルを選択して[Add Incoming WebHooks Integration]。

![5.png](https://qiita-image-store.s3.amazonaws.com/0/52054/20341d77-3618-81c4-f48e-a240d25fe907.png)

[WebHook URL]の最後の部分がtokenです。

![10.png](https://qiita-image-store.s3.amazonaws.com/0/52054/5853236e-a94d-2142-3a3c-e9f29e4ea591.png)

Group名と投稿先Channel名も確認しましょう。

![13.png](https://qiita-image-store.s3.amazonaws.com/0/52054/0fd0d9f5-9fea-fc4f-90e7-88cf6e6ba820.png)

## herokuにアプリをデプロイ
ここからレポジトリをcloneして下さい。そのまま使えるはずです。
https://github.com/KeitaMoromizato/twitter_to_slack

cloneが終わったらプロジェクトのルートディレクトリに移動し、以下のコマンドを実行。

```
$ heroku create twitter-slack-test
$ git push heroku master
$ heroku ps:scale web=1
$ heroku addons:add mongolab:sandbox
```

完了したらmongolabの設定を確認するため`heroku config`コマンドを実行。

```
$ heroku config

=== twitter-slack-test Config Vars
MONGOLAB_URI: mongodb://heroku_app32417310:xxxxxxx.mongolab.com:63330/heroku_app111111

mongodb://(8)HOST名:(9)PORT名/(10)DATABASE名
というフォーマットです。
```

必要な環境変数を登録。ちょっと多いですが頑張りましょう！

```
$ heroku config:set TWITTER_CONSUMER_KEY=**********(1)
$ heroku config:set TWITTER_CONSUMER_SECRET=**********(2)
$ heroku config:set TWITTER_ACCESS_TOKEN_KEY=**********(3)
$ heroku config:set TWITTER_ACCESS_TOKEN_SECRET=**********(4)
$ heroku config:set SLACK_KEY=**********(5)
$ heroku config:set SLACK_GROUP=**********(6)
$ heroku config:set SLACK_CHANNEL=*********(7)
$ heroku config:set MONGO_HOST=**********(8)
$ heroku config:set MONGO_PORT=**********(9)
$ heroku config:set MONGO_DATABASE=**********(10)
```

## スケジューラの設定
今回herokuにデプロイしたアプリケーションはコードを読んでもらうとわかりますが、スケジューラが含まれていません。動かすには定期的に外からAPIを叩く必要があります。

そこで使用するのがGoogleAppsScript(通称GAS)です。これはGoogle Spreadsheetsから使うことができます。
まずはGoogleSpreadSheetを作成し、[ツール]の[スクリプトエディタ]を開き、以下のコードを書きます(URLはherokuから取得できます)。ここまで終わったら実行ボタン(▶)を押して動作確認。うまくいっていればSlackにポストされるはず。

wordパラメータに','区切りで複数検索ワードを指定できます。
![14.png](https://qiita-image-store.s3.amazonaws.com/0/52054/41ecd2cc-c58d-6b20-b885-df4f0df79b00.png)

時計のアイコンをクリックし、`statusUpdate()`が１分ごとに呼ばれるように設定。これで保存したら設定は完了です！

![15.png](https://qiita-image-store.s3.amazonaws.com/0/52054/9c99401b-462a-3de1-5368-623de9c37cdc.png)

## ツイートをSlackに投稿する意義
これを使えば自社サービスに関するツイートを拾い上げ(いわゆるエゴサ)、Slackに流すことができます。そのメリットとしては、

* サービスの不具合の早期発見
* ユーザの一次情報を見ることでリアルな空気感が伝わる
* サービスがどれだけ盛り上がっているかなんとなく分かる

などなど。
また、何よりもSlackはチャットサービスなのでtwitterの投稿を見ながらシームレスに会話をすることができます。「このツイートについてどう思う？」とか「ここは確かに気になってたんだよねー」とか、ユーザの声を取り入れたコミュニケーションが活発になるはず。

また、今回スケジューラにGASを使用したのは簡単で無料というのもありますが、あのレベルなら非エンジニアの方でも編集ができる、というのが大きいです。ユーザの声を聞くのにエンジニアも非エンジニアも区別はないので、誰でも欲しい検索ワードが増えたら追加できるというのは良いですね。

## 最後に
このシステム、ツイートの量が多くなると追い切れなくなるので自社サービスがあまり流行っていない時にしか使えませんねw
早くこのシステムから脱却するときが来るよう頑張りましょう！