LoginSignup
12
6

More than 5 years have passed since last update.

Trello に積まれたタスク群を jq 使っていい感じの CSV にする

Posted at

最終形

$ 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 をエクスポートできます。

スクリーンショット 2015-09-18 17.59.32.png

スクリーンショット 2015-09-18 17.59.41.png

スクリーンショット 2015-09-18 18.00.02.png

で、これを 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 でも使った方が楽だと思います。
12
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
6