そんな今日この頃の技術ネタ

本家側に書くほどでもない小ネタ用

TogelackをDockerで導入してみた

イケてる感じのIT企業で絶賛大流行のSlack。

(残念ながら前職ではもろもろの都合で導入できなかったし、次の職場も今のところ違うツールらしいんだけど・・・)

かくいう僕も、Slackはコミュニケーションツールというよりは個人用のタイムラインとして活用してたりする。

blue1st.hateblo.jp

  • Bitcoinの値動き通知
  • ゴミ出しの曜日の通知
  • サーバの監視アラート
  • 重いスクリプトの完了通知

...etc

あらゆるものを一箇所にまとめられるし、スマホからも確認できるから便利なのだ。


そんな感じでテック系な使い方を挙げてみたけど、もっと単純にスマホからもPCからもアクセスできることを活かして、 例えば技術ネタだったり本や映画の感想だったりの思いついた短文をひょいひょい上げるメモとしても重宝していたりする。

で、そういった使い方をしていると欲求として出てくるのが、 発言を必要なものだけ取り出して並べ替えたりしたいという欲求。

つまりはSlack版のTogetterが欲しい!

APIもあるし自作しようか・・・と考えていたが、そういえばそういうのを既に作ったようなニュースを見かけたこと思い出し、 ググって出てきたのがTogelack。

github.com

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を作成する。

blue1st.hateblo.jp

そろそろ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」ボタンから発行。

f:id:blue1st:20160918151203p:plain

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

f:id:blue1st:20160918151218p:plain

2. CLIENT IDおよびCLIENT SECRETの取得

https://api.slack.com/appsより「Create New App」から作成。

f:id:blue1st:20160918151230p:plain

f:id:blue1st:20160918151236p:plain

3. コールバックURLの設定

「OAuth & Permissions」タブを選択し、認証後のブラウザのリダイレクト先を設定する。

ここにはhttp://<togelackにアクセスするためのURL>/auth/slack/callbackを記述しよう。

f:id:blue1st:20160918151252p:plain

4. TEAM IDの確認

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

f:id:blue1st:20160918151302p:plain

起動してみる

各種設定・記述が終わったら、docker-compose up -dで起動してみる。

問題なく起動できていれば、指定したポートのアドレスにアクセスするとページが表示されるはずだ。

f:id:blue1st:20160918151321p:plain

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

f:id:blue1st:20160918151330p:plain

まとめを作成してみる

認証が済んだら出てくる「まとめの作成」メニューより、実際にまとめの作成を行う。

Slack上でまとめたい発言のリンクを取得し、

f:id:blue1st:20160918151344p:plain

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

f:id:blue1st:20160918151405p:plain

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

f:id:blue1st:20160918151432p:plain



そんな感じでひとまずセッティング終わり。

単純にお遊び要素としても使えるけど、 例えば障害発生時のアラートなんかをSlackに飛ばすようにしていれば事象と対応手順が時系列でまとまったものとして資料化することもできるし、 結構実用方向でも意義のあるものなんじゃないかと思う。

redashから通知飛ばして、KPIの変化とそこへのアプローチなんかをまとめるのも面白いかもしれない。

blue1st-tech.hateblo.jp

次の職場はツール導入には寛容らしいし、Slack使えたらこれも導入してみたいなぁ。

Slack入門 [ChatOpsによるチーム開発の効率化]

Slack入門 [ChatOpsによるチーム開発の効率化]

Docker

Docker