CSVを読み込んでRedmineのカスタムフィールドを更新するツール(redmine-issue-updater)を作りました

(この記事は Redmine Advent Calendar 2018 - Adventar の16日目の記事です。)

Redmineのチケットを更新するツールです。CSVファイルを読み込んで、チケットを更新します。現在更新対象としているのは、カスタムフィールドのみとなります。

チケットIDだけでなく、カスタムフィールドをキーとして更新できます。というか、これがやれるツールが無かったので、今回作りました。(チケットIDをキーとするものばかりなので)

利用方法

Java(JDK8以上)がインストールされた環境で、下記コマンドでアプリケーションをビルドします。

gradlew shadowJar

build/libs/redmine-issue-updater-all.jarというファイルが出来上がります。

下記のコマンドで、アプリケーションを実行します。

java -jar build/libs/redmine-issue-updater-1.0.0-all.jar config.json issues.csv

第1引数が設定ファイル、第2引数が更新する情報が書かれたCSVファイルとなります。

実行すると、下記のように更新されたチケットの情報が出力されます。

Processing start...
#1 is updated.
#2 is updated.
#3 is updated.
Processing is completed. 3 issues were updated.

以下は設定ファイルの例です。

{
  "readmineUrl": "http://localhost",
  "apyKey": "20d0779f947c3c9a7248332a078ff458644ed73d",
  "csvEncoding": "UTF-8",
  "fields": [
    {
      "headerName": "#",
      "type": "ISSUE_ID",
      "primaryKey": true
    },
    {
      "headerName": "Field1",
      "type": "CUSTOM_FIELD",
      "customFieldId": 1,
      "primaryKey": false
    },
    {
      "headerName": "Field2",
      "type": "CUSTOM_FIELD",
      "customFieldId": 2,
      "primaryKey": false
    }
  ]
}

各項目の内容は下記の通りです。

  • readmineUrl : Redmineの接続先URL。
  • apyKey : RedmineのAPIアクセスキー。
  • csvEncoding : CSVファイルのエンコーディング。
  • fields : CSVの各フィールド情報。CSV内の全てのフィールドを記載する必要は無く、利用するものだけ書いてあれば良い。
    • headerName : CSV内のヘッダ名。
    • type : 種別。(ISSUE_ID または CUSTOM_FIELD)
    • customFieldId : カスタムフィールドのID。種別がCUSTOM_FIELDの場合に設定します。
    • primaryKey : プライマリーキーか。trueとなっているフィールドの情報を使って、更新対象のチケットを検索。

カスタムフィールドのIDは、管理者画面のカスタムフィールドの設定画面で、対象のカスタムフィールドを選択した際のURLで確認できます。 以下のような場合、カスタムフィールドのIDは1となります。

または、チケット作成、編集画面でカスタムフィールドの入力欄に振られたIDでも確認できます。以下のような場合、カスタムフィールドのIDは2となります。

<input type="text" name="issue[custom_field_values][2]" id="issue_custom_field_values_2" value="A" class="string_cf">

以下はCSVファイルの例です。

#,Subject,Field1,Field2,Field3
1,xxxx,A,a,C
2,yyyy,B,b,B
3,zzzz,C,c,A

設定ファイルとCSVファイルのサンプルは、sampleフォルダ配下にあります。

注意事項

  • Redmine の REST API を利用しますので、REST APIが有効になっている必要があります。
  • カスタムフィールドをキーとする場合、対象のカスタムフィールドの設定として「フィルタとして使用」がONとなっている必要があります。