Trello 에 쌓인 태스크군을 jq 를 사용해 좋은 느낌의 CSV 로 한다

6954 단어 Trellojq

최종형


$ 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의 제1 계층이 어떻게 되어 있는지 조사합니다.
$ 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에서도 사용하는 것이 편하다고 생각합니다.
  • 좋은 웹페이지 즐겨찾기