JavaScript
GoogleAppsScript
gas
Trello
Slack

Trello のリスト・カード一覧を Slack に通知したいとき

手順

1.公式サイトからTrello API のキー・トークンを発行する。
2.curl でボードの ID を取得する。

$ curl -X GET "https://trello.com/1/members/<ログイン時の username>/boards?key=<Trello API のキー>&token=<Trello API のトークン>&fields=name"

3.https://<ドメイン>.slack.com/services/new/incoming-webhook を開いてSlack の webhook URL を取得しておく。
4.スクリプトエディタを開き以下のコードを書く。

var _ = Underscore.load();
var ENDPOINT = "https://trello.com/1/";
var KEY = "<Trello API のキー>";
var TOKEN = "<Trello API のトークン>";
var BOARD_ID = "<取得したいボードの ID>";
var trelloList = [];
var trelloCardList = [];

function getAndSendList() {
  var trelloList = JSON.parse(requestTrello("boards/" + BOARD_ID + "/lists").bodyText);
  for (var i = 0; i < trelloList.length; i++) {
    var res = JSON.parse(requestTrello("lists/" + trelloList[i].id + "/cards").bodyText);
    trelloCardList.push({name: trelloList[i].name, length: res.length, cardList: _.map(res, function(item) {return item.name})})
  }
  var message = "";
  for (var i = 0; i < trelloCardList.length; i++) {
    var cardList = "";
    for (var k = 0; k < trelloCardList[i].cardList.length; k++) {
      cardList += trelloCardList[i].cardList[k] + "\n";
    }
    message += "【"+trelloCardList[i].name+"】\n"+trelloCardList[i].length+"枚\n- "+cardList+"\n\n";
  }
  notifySlack(message);
}

function notifySlack(message){
  var url = "https://hooks.slack.com/services/<発行したトークン>";
  Logger.log(message)
  var jsonData =
  {
     "text" : "```"+message+"```"
  };
  var payload = JSON.stringify(jsonData);

  var options =
  {
    "method" : "post",
    "contentType" : "application/json",
    "payload" : payload
  };

  UrlFetchApp.fetch(url, options);
}

function requestTrello(path) {
  var url = ENDPOINT + path + "?key=" + KEY + "&token=" + TOKEN;
  var urlFetchOption = {
    'method' : 'get',
    'contentType' : 'application/json; charset=utf-8',
    'muteHttpExceptions' : true
  };

  var response = UrlFetchApp.fetch(url, urlFetchOption);
  try {
    return {
      responseCode : response.getResponseCode(),
      rateLimit : {
        limit : response.getHeaders()['X-RateLimit-Limit'],
        remaining : response.getHeaders()['X-RateLimit-Remaining'],
      },
      parseError : false,
      body : JSON.parse(response.getContentText()),
      bodyText : response.getContentText()
    };
  } catch(e) {
    return {
      responseCode : response.getResponseCode(),
      rateLimit : {
        limit : response.getHeaders()['X-RateLimit-Limit'],
        remaining : response.getHeaders()['X-RateLimit-Remaining'],
      },
      parseError : true,
      body : null,
      bodyText : response.getContentText()
    };
  }
}

5.getAndSendList関数を定期実行するよう設定しておく。

通知例

【TODO】
3枚
- やること A
- やること B
- やること C 

【DOING】
2枚
- やること D
- やること E

【WAITING】
2枚
- やること F
- やること G

【DOME】
1枚
- やること H