我が家で運用されているSlack

我が家（と言っても2人）でSlackを使い始めて**約2年**になりました！
これまでに紆余曲折を経て、ようやく運用も落ち着いてきたので、どんなことに使ってるか記事にしてみようと思い立ったワケです。
普段なら「いちいちQiitaに上げるような記事じゃないな」と思いつつ「Advent Calendarならいいかも？」と思った次第です。
なので、特段新しい技術を使ってるとかではありません(^ω^;)
ここでは、個人的に利用している人の投稿から「こんな使い方もあるんだね」程度に思ってもらえれば幸いです♪

なお、「ブログにしろよ」というツッコミは受け付けません！
長年改装工事をしていますので…

## Slack導入経緯
###Slack導入以前
今でもサーバーのエラーや何かしらの通知をメールでやってる会社って多いと思います。
我が家もそれに準じ、サーバーからの通知はメール、相方とはLINEだったりハングアウトだったりで連絡を取り合っていました。
でもLINEは当時APIがなかったので**サーバーにデータが保存できない！！**
**外部から何かを送れない！！**
という悶々とした気持ちになっていました。。。
LINE…(´･ω･`)

### Slackを知る
Slackには当時、既に

* Outgoing WebHooks
* Incoming WebHooks

という大変ありがたいAPIが用意されていました。
（ってか今もこれしか使ってないかも…）
しかも機能制限があってよければ無料です！（10,000メッセージまでとか）
これを使わない手はありません( `･ω･´)

### Slack導入
当初LINEでいうところのスタンプがありませんでした。
色んな方がスタンプっぽく使う方法を書かれていますが、私は使用していません。
人って凄いですね、使ってるとそれに慣れてくるんです♪

## こんな事に使ってます(･∀･)

使い方は色々とあると思いますが、メンションとかシャレオツな機能は使ってません。
何せ2人で使ってますから(^ω^;)

### 普段の会話はGoogle スプレッドシートに保存する
**Outgoing WebHooks**を使ってGoogle スプレッドシートに保存し、過去の会話を検索しやすくしてみました。
受け皿のサーバーはGAEです。
別にレイテンシを気にしなくてもいい機能であり、かつ無料でプログラムを動かし続けてOKというのが採用の理由です。
と書くとカッコイイですが、単に使ってみたかっただけです…。

パラメータには

* channel_name: チャンネル名
* service_id: 10桁くらいの数字
* team_domain: 登録ドメイン
* team_id: 9桁くらいの英数字
* token: Outgoing WebHooks作成時に発行されるトークン
* channel_id: 9桁くらいの英数字
* user_name: 投稿ユーザー
* text: 投稿された内容

がPOSTパラメータとして入ってきます。
上から6項目は固定なので、これらをチェックすればまぁ変なデータは登録されないでしょう(`･ω･´)
というより、こんな一個人の情報はハックされない…というのが真実でしょう(笑)

ちなみにこれ、「〜月頃、こんな会話してなかったけ？」的に使おうと思ったワケです。
でも、意外と全然使ってない(笑)
い、いや、無料だと10000メッセージまでだから、消えないようにしたかったんです！
そう、それです！！

### Webのメモにも有効
SlackはOGPをいい具合に表示してくれるので、Webサイトをメモするにはとてもいいです。
例えば料理のレシピとか、買いたいな〜と思った商品だとかをメモするのに大変役立ちます！
![スクリーンショット 2016-12-07 10.11.08.png](https://qiita-image-store.s3.amazonaws.com/0/90107/22bc4f9d-32c0-82f2-8f0f-1c5dd8cf6f49.png)
URLをペッと貼り付ければ終了ですからね♪
そういうチャンネルを作れば、そこを見ればいいワケです。

### Twitterの画像を共有
相方がTwitterを見ればいい話なんですが、タイムラインに色々と流れるのが見る気を失うそうです。。。
ということで、相方のために某キャラが画像を投稿したら、Slackに画像を投稿する機能を作りました。
![スクリーンショット 2016-12-07 10.17.56.png](https://qiita-image-store.s3.amazonaws.com/0/90107/3928e1b4-55df-c1ad-3d2c-e3229142d83e.png)
何のキャラだかすぐ分かる…
定期的にTwitterにAPI経由で取りに行き、メディアのURL情報が入っていればそこからダウンロードしてSlackにPOSTします。
この画像POST機能だけで言えば、汎用性があって結構色々と使えます。

### お天気情報をスクレイピング
毎日21時に、自宅付近の翌日の天気をスクレイピングしてPOSTします。
天気予報自体はAPIってたくさんあるんですけど、ピンポイントのAPIって大体有料なんですよね…
なのでスクレイピングしています。
![weather.png](https://qiita-image-store.s3.amazonaws.com/0/90107/986adac7-645e-c10c-df3f-c570ad155e9d.png)

意外と前日の天気と比べられると、翌日着ていく服が選びやすくなります♪
個人的には、このアイコンが変わってるところがポイント(笑)

### Motionの録画ファイルを送信
まぁ動体検知しなければ送られることはないんですが、仮に動体検知して録画ファイルがあっても
やっぱりサーバーにあったらなかなか見ないです。。。
ということで、Slackにダイレクトにaviファイルを送信します。

![スクリーンショット 2016-12-07 10.26.47.png](https://qiita-image-store.s3.amazonaws.com/0/90107/b17e9e65-16fa-1123-7911-80353bcc6428.png)
これは光の加減で誤検知したヤツですね…

一応保存用として、Dropboxにも上げてはいます。
こちらはmotionのon_movie_endでシェルを呼び出し、curlで送信するようにしています。

## 苦労話
と、サラっと書いてますが、結構苦労した話もあったりします。。。
Slack内でもSlack外でも…

### Google スプレッドシートのライブラリ全然分かんね(>_<)
多分、これが1番大変でした…
色々とドキュメント類があるにはあるんですが、思うように動かない。
というか、**P12ファイルって何だし！！**
POSTできたはいいけど、レスポンス遅いんだけど(´･ω･`)
などなど…2年前だけど結構覚えてます(笑)

### GAE、HttpURLConnectionしか使えず…
GAEから外部へ通信するにはHttpURLConnectionしか使えません。
OkHttpとかHttpClientとか、いかに有名だろうと楽チンライブラリは使えないみたいです。
なので画像をPOSTとなるとまぁ大変！
DataOutputStreamのwriteBytesを使って「CRLF」だの「--」だの入れて、必死に書き込みます(笑)

### icon_urlにSVG使えないのか…
上記の「お天気情報をスクレイピング」ではIncoming WebHooksを使って投稿しているんですが、アイコンにSVGの画像を使おうと思って指定したら、全く反映されず…
「はて？パラメータとかの設定が悪いんだろうか？」と思って調べていたんですが、そもそもSVGはダメというオチ…
なのでSVGをPNGに変換して、サーバーにアップしてそこから取るようにしました。

### 画像はユーザーでないと上げられない…
Incoming WebHooksでは画像はあげられないんですね。。。（多分…）

```
https://slack.com/api/files.upload
```

こやつを使うには、ユーザーを登録してトークンを発行する必要があります。
まぁ自分のアカウントを使えばいいという話もありますが、何かBotで投稿されてるのにアイコンが自分というのは、それじゃない感が凄い(笑)
ということで、新しいユーザーを別アドレスで作りました！

##  自分はSlackがチャットツールでは1番好き
もちろんHipChatやChatWorkも使ったことはありますし、とてもいいと思います。
でも、何となく「#」を使ってるSlackが使いやすくて好きです♪
どの端末でもAndroidアプリへの通知もちゃんと来ますし(･∀･)
（上記のツールではないが、設定しても端末によってたまに通知がこないチャットツールがある…）
適材適所ではありますが、Slackは導入を検討しても損はないツールだと感じています！

## 余談
ちなみに、相方は非エンジニアですがSlackを気に入ってくれています。
同じ人とも、チャンネル分けで違う会話ができるところが気に入ってるそうです。
エンジニア（というか勝手に勉強したがる人）に理解のある方だと、家でIoT系も試せて楽しいですよ♪

### 最後に…
Slackはとても使い易いツールだと思います！
上記の機能の詳細を知りたいと思ってくださる方が多ければ、それぞれ簡単にですがソースも含めQiitaに投稿しようと思います。