Redmineのチケットを複数条件でフィルタした結果をAPIで取得してみる

記事タイトルとURLをコピーする

こんにちは。技術5課の松尾です。
節分は小袋入りのワサビ味の柿の種を袋ごと撒きました。袋ごと撒くと、忘れた頃にソファの下から豆が出てくるといったアクシデントに合わないので長年オススメしているのですが、同意してくれる人は少数です。
さて、こんなめんどくさがりの私ですが、Redmineのチケット確認をWebで行なうのが面倒でした。そこでAPIで何とかしてみました。

Redmineのチケットを探すのが面倒だった

日々のチケット管理では下の画像のように、「ステータス」「優先度」「担当者」など様々なフィルタを駆使し、見るべきチケットを検索しますよね。 フィルタ条件が増えれば増えるほど、定期的にチケット有無の確認の為だけにRedmineを開くのが私には面倒に感じました。

ちなみに、Redmineにはカスタムクエリという便利機能があります。カスタムクエリとは、よく使用するフィルタを登録しておく機能のことです。 カスタムクエリについてはこちらを参照してください。

複数条件でフィルタした結果をRedmineのAPIで取得してみる

Redmine API

RedmineではAPIが使用でき、XML形式とJSON形式をサポートしています。

Redmine API

APIアクセスキーの取得

APIを使用するにあたり、APIキーが必要になります。
Redmineの右上にある「個人設定」をクリックすると以下のような画面になるので、右下の「APIアクセスキー」の「表示」をクリックします。 APIキーが表示されます。
このAPIキーを使用するので、コピーしておきます。

もしAPIキーが表示されない場合はRedmineのシステム管理者でAPIの有効化が必要です。

curlコマンドでAPIをたたく

まずはチケット一覧を取得してみる

では、curlコマンドでAPIをたたき、チケット一覧を取得してみましょう。
こちらのページでどのようにAPIを使用するのか確認します。

GET /issues.[format]

でチケット一覧が取得できそうです。

今回はjson形式で取得したいので以下コマンドを実行します。

$ curl --header 'X-Redmine-API-Key:自分のAPIキー'\
 'https://xxxxx.com/redmine/projects/xxxxx/issues.json?'
  • X-Redmine-API-Key には先ほどコピーしておいたAPIキーを貼り付けます。
  • Redmineのチケット一覧のURLは適宜読み替えてください。

以下のようにズラズラと出力されます。非常に見にくいです。

jsonをjqコマンドで見やすくしてみる

jqコマンドは、jsonをいい感じにフィルタしてくれます。 早速実行してみます。

$ curl --header 'X-Redmine-API-Key:自分のAPIキー'\
 'https://xxxxx.com/redmine/projects/xxxxx/issues.json?' | jq .

以下のように整形されて出力されます。見やすくなりました。

複数のフィルタで絞り込んだ結果を取得する

さて、ここからが本題です。 チケット一覧からステータスや作成日等の複数のフィルタで絞り込んだ結果を取得します。 このページを参照し、試行錯誤しましたが上手いこと出力されませんでした。

諦めてしまいたい気持ちになりながら閃いたのは、「curlってURL指定しているんだから、フィルタしたした際に表示されているURL使ってしまえばいいのでは?」でした。 ということで、チケット一覧からステータスや作成日等の複数のフィルタで絞り込んだ際にアドレスバーに表示されているURLをコピーします。

curlコマンドでAPIを叩いてみます。

$ curl --header 'X-Redmine-API-Key:自分のAPIキー'\
 'チケット一覧からステータスや作成日等の複数のフィルタで絞り込んだ際に
アドレスバーに表示されているURL' | jq .

無事取得できました!

ちなみに、出力結果からチケットIDだけを取り出したい場合は以下のようにします。

$ curl --header 'X-Redmine-API-Key:自分のAPIキー'\
 'チケット一覧からステータスや作成日等の複数のフィルタで絞り込んだ際に
アドレスバーに表示されているURL' | jq '.issues[] .id'

まとめ

Redmineへのログインさえ面倒だったり時間が取れない際は、このようにAPIを叩いてslackなどに通知すると楽ちんですね!