Redmineのチケット一覧結果をシェルスクリプトで整形する

結果

  1. Redmineの任意のチケット一覧をCSV形式でダウンロードする
  2. iconv -f SJIS -t UTF-8 /path/to/issues.csv | sort -r -k 3 -t , | awk -F ',' '{printf "[%s] #%s %s\n", $3, $1, $7}'

こういうアウトプットになる。

[トラッカー] ## 題名
[機能] #XXXXX XXする
[機能] #XXXXX YYする
[タスク] #XXXXX 【XX】デプロイする
[タスク] #XXXXX XXを設定する
[バグ] #XXXXX XXの修正
[バグ] #XXXXX XX YY ZZ エラー対策

Macの場合最後に | pbcopy などいれるとクリップボードに入って便利。あと [トラッカー] あたりは除外したほうがよいかも。

背景

Redmineを普段使っている。通常はRedmineのオンラインのチケット上で管理、やりとりをしているけれど、ローカルのテキストファイルで扱いたい場合がある。そのときに簡単な整形をしたい。

前は PythonCSV を読み込んでテキストを出力するする小さなスクリプトを書いていたのだけど、毎回起動してメンテし拡張するのがだるくて結局使わなくなってしまった*1。こういう操作はシェルスクリプトのほうが楽なことが多い。あと wc , grep などの操作はシェルのコマンドとパイプの強力さをそのまま使ったほうが便利という印象。書いてて楽しいし。

CSV を処理するときに文字コードを変換する iconv を使ってみて便利だったというのがこれを書いたきっかけ。ではいままでどうしていたかというと、CSVの話とかぶるけれど、文字コードの変換を伴う作業はだいたい Python 上で処理していた。なんとなくやらないでいたけど、特にやらない理由もなかった。

その他

毎回 awk の文法を使っては忘れるので、 perlruby を試そうとしてはだらだらしてしまってやらないままになってる……。

*1:思うんだけど、こういうシェルスクリプトの気楽さって入力と出力のパスを最初に考えなくていいところなのかも