Redmine Java API で取得可能なタスク管理用項目(Issue、Journal/JournalDetail、TimeEntry)


この記事について

Redmineでタスク管理しており、状況を可視化するためREST APIによる情報収集を検討しました。

可視化だけなら既存の便利なツールを使えば良いのですが、
勉強がてらJavaのライブラリであるRedmine Java APIを使ってみることにしました。
タスク管理に使えそうな項目の取得方法をメモ書きします。

Redmine API

チケット等、Redmineの各種情報はREST APIで取得することができ、
取得可能な項目、取得方法は redmine.org にまとめられています。
http://www.redmine.org/projects/redmine/wiki/Rest_api

wikiにはDatabaseModelも掲載されており、
「ライブラリで取得できるが、用途不明な項目」について調査する場合の参考情報となります。
https://www.redmine.org/projects/redmine/wiki/DatabaseModel

Redmine Java API

Redmine APIをJavaで扱うためのライブラリです。利用方法はgithubで確認出来ます。
https://github.com/taskadapter/redmine-java-api

以下、チケット情報(Issue)、更新履歴情報(Journal/JournalDetail)、作業工数(TimeEntry)について取得方法と取得可能な項目を記載します。

Issue

取得方法

IssueManager を使用すると、チケット情報を取得することが出来ます。

// 【URI】"http://ホスト名/redmine"
// 【ApiAccessKey】右記参照 http://redmine.jp/glossary/r/rest-api/
RedmineManager manager = RedmineManagerFactory.createWithApiKey("URI", "ApiAccessKey");
IssueManager issueManager = manager.getIssueManager();
Issue issue = issueManager.getIssueById(1);

取得可能な項目

利用しそうな項目に絞ります。

項目 内容
ProjectName プロジェクト
Tracker トラッカー
Id チケットNo
StatusName ステータス
Subject 題名
DueDate 期日
CreatedOn 作成日
UpdatedOn 更新日
AuthorName 作成者
AssigneeName 担当者
EstimatedHours 予定時間

Journal/JournalDetail

取得方法

更新履歴情報はIssueから取得可能です。
Issueを取得する際、Include.journalsをパラメータに含める必要があります。
※IssueManager#getIssuesで複数件取得する場合、Include.journalsを指定してもJournalは取得できませんでした。。

// Includeを指定して、更新履歴を含むチケット情報を取得
Issue issue = issueManager.getIssueById(1, Include.journals);

// チケットは更新回数分、Journalを持つ
for (Journal journal : issue.getJournals()) {
    Integer issueId = journal.getId();
    String userName = journal.getUser().getFullName();
    Date createdOn = journal.getCreatedOn();

    // チケットは複数項目を同時に更新できるため、1つのJournalは複数のJournalDetailを持つ
    for (JournalDetail detail : journal.getDetails()) {
        String name = detail.getName();
        String oldValue = detail.getOldValue();
        String newValue = detail.getNewValue();

取得可能な項目

利用しそうな項目に絞ります。

項目 内容
Id 更新対象のチケットNo
User 更新ユーザ情報
Name 更新対象の項目名
OldValue 更新前の値
NewValue 更新後の値

TimeEntry

取得方法

Redmineには工数管理機能があり、活動内容毎に作業工数を記録することが出来ます。
http://blog.redmine.jp/articles/time-tracking/

作業工数を取得する場合はTimeEntryManager を使用します。

RedmineManager manager = RedmineManagerFactory.createWithApiKey("URI", "ApiAccessKey");
TimeEntryManager timeEntryManager = manager.getTimeEntryManager();
Issue issue = timeEntryManager.getTimeEntriesForIssue(1);

取得可能な項目

利用しそうな項目に絞ります。

項目 内容
UserName 作業者
ActivityName 作業内容
Hours 作業時間
CreatedOn 登録日

出来そうなこと

以下の記事にあるように、様々な計測・分析を行うことが出来そうです。
https://qiita.com/kawahira/items/0196c315642f4a72458f

また、日毎に作業工数を集計することで実績の付け漏れを検知しやすくしたり、
予定工数合計に閾値を設け、メール等でアラートを送るのも良さそうだなと思いました。