みんな大好きタスク管理ツールTrelloは、ユーザインタフェースが使いやすく、見てすぐ使いこなせます。
ウェブ画面でさくさく使えますが、自動化や他サービスとの連携を考えるとプログラムで操作できると良い感じです。
TrelloにはAPIが用意されていて、プログラムからAPIを発行するとウェブ画面で操作するのと同じことができます。
これを試してみました。
準備
APIを発行するには、IDやパスワードの代わりになるキーとトークンの取得が必要です。
これらをまず取得します。
Trelloにログインしておきます。
https://trello.com/1/appKey/generate
にアクセスします。すると、キーが表示されますので、これをメモっておきます
https://trello.com/1/authorize?key=(取得したキー)&name=&expiration=never&response_type=token&scope=read,write
にアクセスします。
下記のような画面が表示されるので、「Allow」をクリックします。
下記のようにトークンが表示されますので、これをメモっておきます。
このキーとトークンを使い、APIを発行してTrelloにカード起票などを行ないます。
カードを起票するまでやってみる
ボードとリストは下記のような状態です。
「未着手」リストにカードを起票するまでをやってみます。
ボード一覧を取得してリスト一覧を取得する
「どのボードのどのリストにカードを起票するか」 を行なうため、ボードのIDとリストのIDが必要です。
これらのIDをAPIを発行して取得します。
$ curl "https://trello.com/1/members/maedatomohiro/boards?key=(キー)&token=(トークン)&fields=name" | jq .
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 305 100 305 0 0 221 0 0:00:01 0:00:01 --:--:-- 221
[
:
:
{
"name": "前田タスク",
"id": "57315cc146bf8f615b662ba9"
},
:
:
]
ボードのIDは「57315cc146bf8f615b662ba9」と分かりました。
ボードにあるリストの一覧を取得
ボードのIDをURLに埋め込んでそのボードにあるリストの一覧を取得します。
$ curl "https://trello.com/1/boards/57315cc146bf8f615b662ba9/lists?key=(キー)&token=(トークン)&fields=name" | jq .
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 157 100 157 0 0 190 0 --:--:-- --:--:-- --:--:-- 190
[
{
"id": "57315d66980bb80dfb51df6e",
"name": "未着手"
},
{
"id": "57315d74e72aacfa5bdaf627",
"name": "作業中"
},
{
"id": "57315d78cb6ebdf031c2ce7f",
"name": "完了"
}
]
「未着手」リストのIDは「 57315d66980bb80dfb51df6e」と分かりました。
メンバのIDを調べる
カードには担当者を示すメンバを登録できます。ボードに居るメンバの一覧を取得し、IDを調べます。
$ curl "https://trello.com/1/boards/57315cc146bf8f615b662ba9/members?key=(キー)&token=(トークン)" | jq .
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 81 100 81 0 0 109 0 --:--:-- --:--:-- --:--:-- 109
[
{
"id": "551b4f5b19a8a6363ca1940c",
"fullName": "Maeda",
"username": "maedatomohiro"
}
]
メンバ「Maeda」のIDは「 551b4f5b19a8a6363ca1940c」と分かりました。
カードを起票するスクリプトを用意する
ここまでのIDを使ってカードを起票してみます。
起票はスクリプトをざっくり作ってやってみます。いろんな言語のライブラリがありますが、今回はPythonでやってみます。
#coding:utf-8 from trello import TrelloApi # import json import simplejson as json import pytz from datetime import datetime # Key Token trello = TrelloApi('キー', 'トークン') # List ID 上記で調べたボードIDから調べたリストID listid = '57315d66980bb80dfb51df6e' # 未着手 # listid = '57315d74e72aacfa5bdaf627' # 作業中 # listid = '57315d78cb6ebdf031c2ce7f' # 完了 # Card Name cardname = '新しいタスク' # Card Description desc = '新しいタスクの内容です。1行目n新しいタスクの内容です。2行目n新しいタスクの内容です。3行目n' card = trello.cards.new(cardname, listid, desc) carddump = json.dumps(card, indent=2, ensure_ascii=False) # print(carddump.encode('utf-8')) cardjson = json.loads(carddump.encode('utf-8')) cardid = cardjson['id'] cardurl = cardjson['url'] print cardid print cardurl # Add Labels trello.cards.new_label(cardid,'green') # Set Due カードの期限の設定 UTCで管理されるので日本時間からUTCに変換して設定している utc = pytz.timezone('UTC') jst = pytz.timezone('Asia/Tokyo') jst_dt = datetime(2016, 5, 15, 17, 00, tzinfo=jst) trello.cards.update_due(cardid, jst_dt.astimezone(utc)) # Add Member 上記で調べたメンバのID 複数人登録したい場合はnew_memberを人数分記載する trello.cards.new_member(cardid, '551b4f5b19a8a6363ca1940c') # Maeda # Add Comment cardcomment = 'コメントを追加' trello.cards.new_action_comment(cardid, cardcomment)
スクリプトを動かして起票してみる
スクリプトを動かしてみます。
スクリプトでprintで記載しているようにカードIDとカードの直リンクを出力しています。
$ python createcard.py 57317319460b6362dfbeb02d https://trello.com/c/GfSiCStr/1--
起票されたようです。ウェブで確認してみます。

無事カードが起票されました。
リストにあるカードを取得する
どれだけカードがあるか(残タスクがあるか)を取得してSlackで通知するなどのシチュエーションがあるかと思います。
これができるようにカードの一覧を取得してみます。
$ curl "https://trello.com/1/lists/57315d66980bb80dfb51df6e/cards?key=(キー)&token=(トークン)" | jq .
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1052 100 1052 0 0 754 0 0:00:01 0:00:01 --:--:-- 754
[
{
"id": "57317319460b6362dfbeb02d",
"checkItemStates": null,
"closed": false,
"dateLastActivity": "2016-05-10T05:35:25.445Z",
"desc": "新しいタスクの内容です。1行目n新しいタスクの内容です。2行目n新しいタスクの内容です。3行目n",
"descData": null,
"idBoard": "57315cc146bf8f615b662ba9",
"idList": "57315d66980bb80dfb51df6e",
"idMembersVoted": [],
"idShort": 1,
"idAttachmentCover": null,
"manualCoverAttachment": false,
"idLabels": [
"57315cc1b0dfecc6d13bc41e"
],
"name": "新しいタスク",
"pos": 16384,
"shortLink": "GfSiCStr",
"badges": {
"votes": 0,
"viewingMemberVoted": false,
"subscribed": true,
"fogbugz": "",
"checkItems": 0,
"checkItemsChecked": 0,
"comments": 1,
"attachments": 0,
"description": true,
"due": "2016-05-15T08:00:00.000Z"
},
"due": "2016-05-15T08:00:00.000Z",
"idChecklists": [],
"idMembers": [
"551b4f5b19a8a6363ca1940c"
],
"labels": [
{
"id": "57315cc1b0dfecc6d13bc41e",
"idBoard": "57315cc146bf8f615b662ba9",
"name": "",
"color": "green",
"uses": 1
}
],
"shortUrl": "https://trello.com/c/GfSiCStr",
"subscribed": true,
"url": "https://trello.com/c/GfSiCStr/1--"
}
]
API発行の結果はJSONで返されますので、あとは、カードのタイトルとURLをJSONからうまいこと抜いて、カードのメンバーから人を特定して、Slackで通知するとかちょっとがんばればできそうです。
終わりに
TrelloのAPIにはTrelloを操作するための命令がひととおり揃っています。
上記のようにcurlで叩いて気軽に何かできたりしますので、使いやすく試しやすいです。
もし、Trelloをお使いでしたら試してみてはいかがでしょうか。