今回はRedmineからRESTAPIを使って作業時間を取得して、データを加工して表示するWindowsアプリを作ってみます。C# では、redmine-net-api というものがReadmineの公式ページからダウンロードできるようなので、それを使います。
やりたいこと
Redmineの作業時間のページです。作業時間は日付順にソートされています。しかし、この画面から作業時間の集計が非常にめんどくさいです。
なので、C#で、自動的に集計してテキストで出力するWindowsアプリを作成します。

↑のように設定を入力してボタンを押したら自動的に出力します。
Redmineからデータを取得するために、redmine-net-apiを使います。
- Windows10
- Microsoft Visual Studio Community2019
- .NET Framework 4.7.2
- WPF アプリ( .NET Framework )
- Redmine 3.4.2
- redmine-net-api 3.0.6.1
目次
redmine-net-api をダウンロードする
redmine-net-api は.ReadmineのREST APIにアクセスするために使われるC#のライブラリです。
※ 詳しくは Using the REST API with .NET から。
redmine-net-api は以下のページからダウンロードします。

C#のプロジェクトからredmine-net-apiを参照する
今回はC#のWPFアプリ (.NET Framework ) でプロジェクトを作成します。プロジェクト名は、RedmineTimeConversion とします。
プロジェクトからredmine-net-apiを参照するためには、ソリューション エクスプローラーから
- ソリューションを右クリック
- 追加→既存のプロジェクト
を選択します。

先ほどダウンロードしたredmine-net-apiの中の、redmine-net-api-master/src/redmine-net-api/redmine-net-api.csproj を選択します。

これで、redmine-net-apiが使用できるようになりました。
RedmineのREST APIを使うためには、設定を有効にする必要があります。

管理権限のユーザーでログインし、管理→設定でAPI タブを選択し、「RESTによるWebサービスを有効にする」をチェックします。
redmine-net-api で作業時間を取得する
では、アプリを作成してみます。
using Redmine.Net.Api; using Redmine.Net.Api.Types; using System; using System.Collections.Generic; using System.Collections.Specialized; using System.Windows; namespace ReamineTimeConversion { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); - 略 - } // 作業時間を取得ボタン押し private void Button_Click(object sender, RoutedEventArgs e) { - 略 - // redmine-net-apiで開始日から終了日までの作業時間データを取得する string date_start = ((DateTime)(Date_Start.SelectedDate)).ToString("yyyy-MM-dd"); string date_finish = ((DateTime)(Date_Finish.SelectedDate)).ToString("yyyy-MM-dd"); var manager = new RedmineManager(Setting.GetInstance().URL, Setting.GetInstance().APIKEY); var parameters = new NameValueCollection { { RedmineKeys.LIMIT, "100" }, { RedmineKeys.PROJECT_ID, Setting.GetInstance().PROJECTID}, { RedmineKeys.SPENT_ON, "><" + date_start + "|" + date_finish } }; try { // データ取得処理 List<TimeEntry> timeEntryList = manager.GetObjects<TimeEntry>(parameters); // 出力用のクラスにRedmineから取得したデータを設定 - 略 - // チケット順にソート - 略 - } catch( Exception ) { TextBox_TimeEntryConversion.Text = "取得に失敗しました。"; } } } }
メインファイルのソースコードの一部です。
var manager = new RedmineManager(Setting.GetInstance().URL, Setting.GetInstance().APIKEY);
まずは、RedmineManager のオブジェクトを作成します。
- string host : RedmineのURL ( https:// ~ )
- string apiKey : Redmine のApiKey
RedmineのApiKey はRedmineのページから取得します。
個人ページから個人設定でAPIアクセスキーを表示できます。

var parameters = new NameValueCollection { { RedmineKeys.LIMIT, "100" }, { RedmineKeys.PROJECT_ID, Setting.GetInstance().PROJECTID}, { RedmineKeys.SPENT_ON, "><" + date_start + "|" + date_finish } };
次に、パラメータを設定します。
- RedmineKeys.LIMIT : 取得する作業時間の最大数
- RedmineKeys.PROJECT_ID : 取得するプロジェクトのID( 文字列 )
- RedmineKeys.SPENT_ON : 取得する開始日から終了日 ( yyyy-mm-dd )
List<TimeEntry> timeEntryList = manager.GetObjects<TimeEntry>(parameters);
最後に作業時間のリストを取得します。RedmineManagerクラスのGetObjects メソッドで取得します。データはTimeEntryリスト形式で取得できます。
作成したプロジェクト
作成したプロジェクトは↓のサイトを参考にしてください。
まとめ
今回はRedmineからRESTAPIを使って作業時間を取得して、データを加工して表示するWindowsアプリを作ってみました。
C# では、redmine-net-api というものがReadmineの公式ページからダウンロードできるようなので、それを使いました。
コメントを残す