最終形
$ jq -r '.cards[] | select(.closed == false) | select(.idList == "5add1d163d71c2014281fcd6") | [.name, .desc, .idList, .url] | @csv' board.json
"涼しくなったので風邪に注意する","- 早く帰る
- 早く帰る
- 早く帰る","5add1d163d71c2014281fcd6","https://trello.com/c/pCyAorwX/1224--",
... 省略
前置き
Trello は下記のようにメニューの奥のほうから JSON をエクスポートできます。
で、これを jq 使っていい感じの CSV にしてみます。
今回は「特定のリストに入っているカード一覧CVS」の作成をゴールとしました。
過程
まずは下記のコマンドでjsonの第一階層がどうなってるのか調べます。
$ jq 'keys' board.json
[
"actions",
"cards",
"checklists",
"closed",
"dateLastActivity",
"dateLastView",
"desc",
"descData",
"id",
"idOrganization",
"idTags",
"invitations",
"invited",
"labelNames",
"labels",
"lists",
"members",
"memberships",
"name",
"pinned",
"powerUps",
"prefs",
"shortLink",
"shortUrl",
"starred",
"subscribed",
"url"
]
なんとなく、 cards, lists, menbers 辺りに情報がつまっていそうです。
今度は cards の中身を覗いてみましょう。
$ jq '.cards[0] | keys' board.json
[
"attachments",
"badges",
"checkItemStates",
"closed",
"dateLastActivity",
"desc",
"descData",
"due",
"email",
"id",
"idAttachmentCover",
"idBoard",
"idChecklists",
"idLabels",
"idList",
"idMembers",
"idMembersVoted",
"idShort",
"labels",
"manualCoverAttachment",
"name",
"pos",
"shortLink",
"shortUrl",
"subscribed",
"url"
]
name, desc, idList, url 辺りをCSVに出力することにします。
また、closed が true だとアーカイブされているカードのようですので、今回はアーカイブされていないカードを出力することにします。
試しにその部分だけ取得してみましょう。
$ jq '.cards[] | select(.closed == false) | [.name, .desc, .idList, .url]' board.json
[
"涼しくなったので風邪に注意する",
"対策:\n- 早く帰る\n- 早く帰る\n- 早く帰る",
"5add1d163d71c2014281fcd6", // リストのIDっぽいハッシュ値
"https://trello.com/c/hoge/123"
]
...
それっぽいものが取れました。select を使って .closed の値でフィルタリングしています。
あとは、リストのIDでフィルタリングしてあげれば目的が達成できそうですので、リスト一覧を見てみます。
$ jq '.lists[] | select(.closed == false) | [ .id, .name, .closed ]' board.json
[
"5add1d163d71c2014281fcd6",
"TODO",
false
]
...
こちらも closed が true だとアーカイブされているリストのようですので、select でフィルタしてみました。
今回は、この "TODO" リストに入っているカードを出力することにします。
$ jq '.cards[] | select(.closed == false) | select(.idList == "5add1d163d71c2014281fcd6") | [.name, .desc, .idList, .url]' board.json
[
"涼しくなったので風邪に注意する",
"対策:\n- 早く帰る\n- 早く帰る\n- 早く帰る",
"5add1d163d71c2014281fcd6",
"https://trello.com/c/hoge/123"
]
...
無事 TODO リストに入っているカードを出力することができました。
最後に r オプションと @csv を使い、CSVに出力します。
$ jq -r '.cards[] | select(.closed == false) | select(.idList == "5add1d163d71c2014281fcd6") | [.name, .desc, .idList, .url] | @csv' board.json
"涼しくなったので風邪に注意する","対策:
- 早く帰る
- 早く帰る
- 早く帰る","5add1d163d71c2014281fcd6","https://trello.com/c/pCyAorwX/1224--",
... 省略
無事 CSV が出力されました。セル内の改行も対応できていて、いい感じですね。
あとがき
- Trello Pro版はCSV出力が可能です。とはいえ、いい感じに整形したCSVをコマンド一発で出すことは多分できないと思います。
- idList はリスト名で置換しても良さそうです。jq でも出来るのかもですが、sed でも使った方が楽だと思います。