Slack + hubot + Trelloでチームのタスクを見える化しよう

<Font color="red">ついにTrelloが公式にSlackとLinkするようになったので、Hubotを使わなくてもTrelloにチケットが作成できるようになりました。ボードの切り替えなどはHubotを使ったほうが簡単にできるなど、いくつかメリットは残っています。</Font>
http://help.trello.com/article/1049-slack-app  

現在[CafeSnap](http://cafesnap.me/)というアプリをプロデューサー2人 + エンジニア2人で開発しています。 
去年の4月にスタートしてからはSlack + GoogleDocs + Redmineなどでコミュニケーション・タスク管理をしていましたが、お互いのタスクの漏れを防ぐためにこれらのツールを試験的に使っています。

## これらのツールでタスク管理を行うメリット
### Slack上でタスクを作成することができるため、簡単にタスクが作成できる　
今までチャット上でやりとりしていて、そのまま流れて忘れてしまっていたタスクも下記のように気軽にストックできます。 
例えば、チャット上で下記のように打つとタスクが作成されます。
![スクリーンショット 2015-04-16 18.27.58.png](https://qiita-image-store.s3.amazonaws.com/0/10532/553ecd1d-c417-26bc-39ba-09f5df6c9cf7.png "スクリーンショット 2015-04-16 18.27.58.png")

### Trelloの見た目がわかりやすい
担当者のアイコンが表示されたり、操作方法がシンプルです。エンジニア以外の人も気軽に利用できます。 

![スクリーンショット 2015-04-16 18.15.29.png](https://qiita-image-store.s3.amazonaws.com/0/10532/25f978d0-c2d3-bbaa-5505-02010df28423.png "スクリーンショット 2015-04-16 18.15.29.png")


### リマインドも自動化することによって、相手に催促したりするストレスから開放される
hubotでリマインドし、それに対して一言返すとかルールを作るより良いかもしれません。それによって、「あれってやった？」「いや、まだ。。」みたいなやりとりを無くすことができます。


## hubotの準備
下記を参考にheroku上でhubotを動かせるようにします。 
[slackにHubotを導入(Heroku経由)](http://qiita.com/Katsumata_RYO/items/dc4543aa5827d4c3211c)

## Trelloのトークンなどを取得（ここが若干面倒くさい）
Trelloはアカウントを作成し、ログインした状態で進めます。
#### 1. 下記にアクセスし、Keyをコピーしておきます
https://trello.com/app-key
![スクリーンショット 2015-04-16 18.43.24.png](https://qiita-image-store.s3.amazonaws.com/0/10532/0aed840a-1046-adff-1291-d7d11938d361.png "スクリーンショット 2015-04-16 18.43.24.png")
#### 2. 下記にアクセスしてAllowを押します。
https://trello.com/1/authorize?key=[取得したkey]&name=&expiration=never&response_type=token&scope=read,write
![スクリーンショット 2015-04-16 18.57.21.png](https://qiita-image-store.s3.amazonaws.com/0/10532/5601102b-e27a-8b3e-a6ac-63ad7941c9df.png "スクリーンショット 2015-04-16 18.57.21.png")

#### 3. tokenが発行されるので、メモっておく
![スクリーンショット 2015-04-16 18.58.32.png](https://qiita-image-store.s3.amazonaws.com/0/10532/29bede28-3953-4d9d-feeb-ca3180e632ea.png "スクリーンショット 2015-04-16 18.58.32.png")

#### 4. 下記にアクセスし、ボードのIDをメモします
https://trello.com/1/members/me/boards?key=[取得したkey]&token=[取得したtoken]&fields=name

```json:ボードのIDを取得
[
    {
        name: "ボード名",
        id: "ボードのID"
    }
]
```

#### 5. 下記にアクセスし、リストのIDをメモします
https://trello.com/1/boards/[取得したボードのID]/lists?key=[取得したkey]&token=[取得したtoken]&fields=name

```json:リストのIDを取得
[
    {
        name: "リスト名",
        id: "リストのID"
    }
]
```

#### 6. Herokuに上記でメモした値を設定します
herokuコマンドが使えない場合は「heroku toolbelt」などでググって下さい。

```herokuコマンドを使ってterminal上で設定
$ heroku config:set HUBOT_TRELLO_KEY=xxxxxxxx
$ heroku config:set HUBOT_TRELLO_TOKEN=xxxxxxxx
$ heroku config:set HUBOT_TRELLO_TODO=xxxxxxxxxxx
```

```下記コマンドで設定されているか確認
$ heroku config
```

## hubot/herokuの準備
#### 1. Trelloのモジュールをインストール

```bash:インストールコマンド
$ npm install node-trello --save
```

#### 2. slackに反応するscriptを追加
```cofeescript:trello.cofee
Trello = require("node-trello")

module.exports = (robot) ->
    robot.hear /^todo (.*)/i, (msg) ->
        title = "#{msg.match[1]}"
        trello = new Trello(process.env.HUBOT_TRELLO_KEY, process.env.HUBOT_TRELLO_TOKEN)
        trello.post "/1/cards", {name: title, idList: process.env.HUBOT_TRELLO_TODO}, (err, data) ->
          if err 
            msg.send "保存に失敗しました"
            return
          msg.send "「#{title}」 をTrelloのToDoボードに保存しました"
```

#### 3. herokuにpush
```
$ git push heroku master
```

## まとめ
プロジェクトを進めていると、どうしても職種によってそれぞれのタスクがあり、優先度も違います。しかし、エンジニアやプロデューサーがお互いの仕事を理解しあって同じ方向に進んでいくためにも、 これらのツールを駆使しながら日々改善をしていくことが大事かなと思います。 
ツールは補助的な役割ではあるものの、人が気を使う部分をbotに任せるなど上手く活用していきたいですね〜
## TrelloのAPI一覧（追記中）
#### リストに紐づくカード一覧を取得
https://trello.com/1/lists/[リストのID]/cards?key=[key]&token=[token]