イケてる感じのIT企業で絶賛大流行のSlack。
(残念ながら前職ではもろもろの都合で導入できなかったし、次の職場も今のところ違うツールらしいんだけど・・・)
かくいう僕も、Slackはコミュニケーションツールというよりは個人用のタイムラインとして活用してたりする。
- Bitcoinの値動き通知
- ゴミ出しの曜日の通知
- サーバの監視アラート
- 重いスクリプトの完了通知
...etc
あらゆるものを一箇所にまとめられるし、スマホからも確認できるから便利なのだ。
そんな感じでテック系な使い方を挙げてみたけど、もっと単純にスマホからもPCからもアクセスできることを活かして、 例えば技術ネタだったり本や映画の感想だったりの思いついた短文をひょいひょい上げるメモとしても重宝していたりする。
で、そういった使い方をしていると欲求として出てくるのが、 発言を必要なものだけ取り出して並べ替えたりしたいという欲求。
つまりはSlack版のTogetterが欲しい!
APIもあるし自作しようか・・・と考えていたが、そういえばそういうのを既に作ったようなニュースを見かけたこと思い出し、 ググって出てきたのがTogelack。
http://qiita.com/ru_shalm/items/32160b23df535ed78967qiita.com
http://qiita.com/ru_shalm/items/35100b527877cfe09b5eqiita.com
Herokuに一発デプロイする手段も用意されているっぽいけど、極めて個人的な代物ということで自宅サーバに入れることにした。
かねてより自宅サーバに関しては出来る限りDockerで導入しようという方針なので、今回もDockerで環境構築することにした。
Dockerfile
探してみたらDockerHubにも一つイメージが上がっていたけれど、公式じゃないしDockerfileも公開されてなさそうなので、 ひとまず自前で作成。
FROM ruby:2.2.4
ENV APP_ROOT /usr/src/togelack
WORKDIR $APP_ROOT
RUN apt-get update && \
apt-get install -y git nodejs \
--no-install-recommends && \
rm -rf /var/lib/apt/lists/*
RUN git clone https://github.com/rutan/togelack.git $APP_ROOT
RUN \
echo 'gem: --no-document' >> ~/.gemrc && \
cp ~/.gemrc /etc/gemrc && \
chmod uog+r /etc/gemrc && \
bundle config --global jobs 4 && \
bundle install && \
rm -rf ~/.gem
RUN rake assets:precompile
EXPOSE 3000
ENTRYPOINT ["rails", "server"]
CMD ["-b", "0.0.0.0"]
ruby:2.2.4のイメージをベースにモジュール入れたりgithubからコード拾ってきたり。
普段Railsまわりをいじる機会がそんなに無いのでもうちょっと苦労するかなと思ったけど、 流石はメジャーなフレームワークというべきか、参考になる情報がいっぱいあって思いの外スルッと作成できた。
※前職の独自フレームワーク(作成者は既に退職)での苦労を思うと涙が滲んできた
docker-compose.yml
もはやおなじみDocker Composeを使うためにdocker-compose.ymlを作成する。
そろそろversion2フォーマットにも慣れてきた。
version: "2"
services:
togelack:
build: .
ports:
- "XXXXX:3000" # ホストの開いてるポートを割り当てよう
environment:
- "RAILS_ENV=production"
- "MONGOID_ENV=production"
- "MONGO_URL=mongodb://mongo:27017/togelack"
- "REDIS_URL:redis://redis:6379"
- "SLACK_TOKEN=XXXXXXX" # 1. apiのauthページで発行されるトークン
- "SLACK_CLIENT_ID=XXXXXX" # 2. apiのappページで取得
- "SLACK_CLIENT_SECRET=XXXXXXXXX" # 2. apiのappページで取得
- "SLACK_TEAM_ID=XXXXXXXXX" # 4. apiを叩いて拾う
- "SLACK_TEAM_NAME=XXXXXXX" # ドメインのhttps://XXXXXX.slack.com/の部分
- "SECRET_KEY_BASE=XXXXXXXXXX" # 適当な文字列を設定しよう
restart: always
depends_on:
- mongo
- redis
restart: always
mongo:
image: mongo:latest
volumes:
- "/srv/docker/togelack/mongo:/data/db" # データの永続化のため
restart: always
redis:
image: redis:latest
volumes:
- "/srv/docker/togelack/redis:/data" # データの永続化のため
restart: always
1. トークンの発行
slackログイン後にhttps://api.slack.com/web#authenticationページにアクセスし、 「Generate test tokens」ボタンから発行。

「xoxp-~」というのがソレ。

2. CLIENT IDおよびCLIENT SECRETの取得
https://api.slack.com/appsより「Create New App」から作成。


3. コールバックURLの設定
「OAuth & Permissions」タブを選択し、認証後のブラウザのリダイレクト先を設定する。
ここにはhttp://<togelackにアクセスするためのURL>/auth/slack/callbackを記述しよう。

4. TEAM IDの確認
https://api.slack.com/methods/team.info/test より「Test Method」ボタンで確認できる。

起動してみる
各種設定・記述が終わったら、docker-compose up -dで起動してみる。
問題なく起動できていれば、指定したポートのアドレスにアクセスするとページが表示されるはずだ。

右上の「ログイン」ボタンより認証を行う。

まとめを作成してみる
認証が済んだら出てくる「まとめの作成」メニューより、実際にまとめの作成を行う。
Slack上でまとめたい発言のリンクを取得し、

右側のフォームに入力することで発言を取得、ドラッグ&ドロップでまとめの作成を行うことができる。

作成するとトップに表示され、後から編集し直しや削除なんかができる。

そんな感じでひとまずセッティング終わり。
単純にお遊び要素としても使えるけど、 例えば障害発生時のアラートなんかをSlackに飛ばすようにしていれば事象と対応手順が時系列でまとまったものとして資料化することもできるし、 結構実用方向でも意義のあるものなんじゃないかと思う。
redashから通知飛ばして、KPIの変化とそこへのアプローチなんかをまとめるのも面白いかもしれない。
次の職場はツール導入には寛容らしいし、Slack使えたらこれも導入してみたいなぁ。
![Slack入門 [ChatOpsによるチーム開発の効率化] Slack入門 [ChatOpsによるチーム開発の効率化]](https://images-fe.ssl-images-amazon.com/images/I/51g9K9r7quL._SL160_.jpg)
- 作者: 松下雅和,小島泰洋,長瀬敦史,坂本卓巳
- 出版社/メーカー: 技術評論社
- 発売日: 2016/06/28
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る

- 作者: Adrian Mouat,Sky株式会社玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/08/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る