Redmine API を利用してチケット ID からチケット情報を出力するシェルスクリプトを書いた

Redmine API を利用して、curl でチケット情報を取得し、jq で整形して出力するシェルスクリプトを書いた。引数チェックとかもするようにした。

以下のスクリプトを red とかいうファイル名で保存して、PATH が通っているところに置いて実行権限を付ければ OK。

#!/bin/sh

# ================================================================================
# red : Redmine API を利用してチケット情報を出力する
# 
# - 前提事項
#     jq コマンドがインストールされていること
# - インストール方法
#     PATH が通っている場所にこのファイルを置き
#     $ chmod a+x red
#     で実行権限を付与する
# - 使用例
#     $ red 42
#     42:生命、宇宙、そして万物についての究極の疑問の答えを探す
#     担当 :ディープ・ソート
#     状況 :作業中
#     開始日:2018-01-01
#     期日 :2018-12-31
# ================================================================================

# 定数宣言
# --------------------------------------------------------------------------------

# Redmine アドレス : 最後の「/」は抜きで書く
REDMINE_URL='http://my-server.com/redmine'

# API キー : 個人設定ページで確認できるものを書いておく
REDMINE_API_KEY='0089b123d7ddf138ece4f66871c47e6f43cc4b01'

# チケット番号 : 引数1
REDMINE_ISSUE_ID="$1"

# 引数チェック : 引数1がなければ中止する
# --------------------------------------------------------------------------------

if [ "$REDMINE_ISSUE_ID" = "" ] ; then
  echo '引数でチケット番号を指定してください'
  echo "  Usage : $(basename $0) 42"
  
  exit 1
fi

# チケット情報取得:  curl で JSON を取得後、jq コマンドで整形する
# --------------------------------------------------------------------------------

RESULT=$(curl -sS "$REDMINE_URL/issues/$REDMINE_ISSUE_ID.json?key=$REDMINE_API_KEY" | jq -r '.issue | (.id|tostring) + ":" + .subject, "担当 :" + .assigned_to.name, "状況 :" + .status.name, "開始日:" + .start_date, "期日 :" + .due_date')

if [ "$RESULT" = "" ] ; then
  echo "$REDMINE_ISSUE_ID : 取得失敗"
  echo "  当該チケットが参照できるか確認してください"
  echo "  $REDMINE_URL/issues/$REDMINE_ISSUE_ID"
  
  exit 1
fi

echo "$RESULT"

こんな感じ。

シェルスクリプト、なかなか楽しい。