みんな大好きタスク管理ツール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をお使いでしたら試してみてはいかがでしょうか。