RedmineKit

Redmine Dashboards

Dashboards
5.0 (0)·New インストール

すでにお使いのカスタムクエリから、そのままダッシュボードを組み立てられます。ドラッグ&ドロップのグリッドに KPI タイル・表・15 種類のグラフを並べ、集計は SQL 側で行い、閲覧者に見る権限のあるデータだけを対象にします。

$199 / サーバー 1 台

複数サーバー: $399

5 営業日以内の返金12 か月のアップデートソース同梱
Redmine 6 上の Redmine Charts ダッシュボード。10,000 件のチケットを示す KPI タイル、プロジェクト別ドーナツ、優先度別の棒グラフ、ステータス別ドーナツ、月別作成件数の折れ線グラフ。
ライブなダッシュボード KPI タイル、ドーナツ、棒グラフ、折れ線グラフを 1 枚のボードに。どの数字も、Redmine 自身の権限スコープ内のデータから SQL で集計されます。
ウィジェット種別
23
グラフの種類
15
Redmine
4 · 5 · 6 · 7
データベース
MySQL, MariaDB, PostgreSQL
コアの改変
なし

ドラッグ&ドロップで組み立て

サイズ変更も並べ替えも自由で、作業しながら自動保存されるグリッドです。KPI・グラフ・表を並べ替えて、そのボードが伝えるべきことを伝えるまで整えられます。レイアウトファイルも、ページの再読み込みも不要です。

15 種類のグラフ

棒、横棒、積み上げ棒、折れ線、複数折れ線、エリア、円、ドーナツ、レーダー、極座標、ゲージ、ファネル、ヒートマップ、ツリーマップ、進捗リング。Apache ECharts で描画し、ライトでもダークでも読めます。

保存済みクエリを可視化

ウィジェットを保存済みクエリに向けるだけで、その絞り込みをそのまま引き継ぎます。カスタムフィールド・ウォッチャー・サブプロジェクトも含みます。クエリから 1 クリックでボード全体を生成することもできます。

SQL で集計

GROUP BY・COUNT・SUM・AVG はデータベース側で実行されるため、10 万件のチケットも「数える」だけでインスタンス化はしません。結果はユーザー・ウィジェット・適用中のフィルタ単位でキャッシュされます。

閲覧者に合わせて絞り込み

すべての読み取りは Issue.visible(user)、TimeEntry.visible(user)、Query.visible(user) から始まります。閲覧者がメンバーでないプロジェクトの数値が、グラフに合算されることはありません。

フィルタ・自動更新・ドリルダウン

1 本のフィルタバーでボード全体を絞り直し、ダッシュボードごとの更新間隔で壁掛けディスプレイを最新に保ちます。棒・扇形・セルはいずれも、その裏側のチケット一覧へ飛べます。

Redmine の中で動く姿を見る

ここにあるスクリーンショットはすべて、プラグインを plugins/ に置いただけの素の Redmine 6 から撮ったものです。ダッシュボードは Redmine 自身のヘッダーとメニューの下に表示されます。実際にそこで動いているからです。

ボードを組み立てる

ダッシュボードの編集モード。すべてのウィジェットにドラッグハンドルとリサイズ用の角が表示され、レイアウトは自動保存されます。
編集モード 「編集」スイッチを入れると、すべてのウィジェットをドラッグ・リサイズできます。レイアウトは操作に合わせて自動で保存されます。
「ウィジェットを追加」ダイアログ。ウィジェット種別、データソース、任意の保存済みクエリ、メジャーと集計方法をプルダウンから選びます。
ウィジェットの追加 ウィジェット種別、データソース、必要なら保存済みクエリを選び、メジャーと集計方法を決めるだけ。SQL は誰も書きません。

ウィジェット

ウィジェット種別の選択画面。15 種類の ECharts グラフ、KPI、テーブルに加え、Markdown、メモ、HTML、iframe、活動フィード、最近のチケットが並びます。
23 種類のウィジェット 15 種類の ECharts グラフに、KPI、テーブル、そして 6 種類のコンテンツウィジェット(Markdown、メモ、HTML、iframe、活動フィード、最近のチケット)。
ダッシュボード上でウィジェット固有のメニューを開いたところ。更新、設定、削除の操作があります。
ウィジェットの操作 各ウィジェットは個別に読み込まれ、それぞれ専用のメニューを持ちます。ボード全体を読み込み直さずに、グラフ 1 つだけを更新できます。

共有と切り替え

ダッシュボードの共有ダイアログ。非公開・共有・公開の公開範囲と、ロール・グループ・プロジェクトの選択欄。
共有 ボードは非公開のままにも、特定のロール・グループ・プロジェクトへの共有にも、ログイン中の全ユーザーへの公開にもできます。判定は Redmine のメンバーシップで行われます。
ツールバーのダッシュボード切り替えメニュー。閲覧可能なボードの一覧と、既定に設定・JSON で書き出し・新規作成の各オプション。
ボードの切り替え ツールバーの切り替えメニューに、閲覧できるボードがすべて並びます。既定のボードに設定する、JSON で書き出す、新しく作る、のいずれもここから。

クエリが、そのままレポートになる

ここでは、データをもう一度定義し直す必要はありません。いつもどおりチケット一覧を絞り込んで保存すれば、その保存済みクエリがウィジェットの集計対象になります。Redmine が一覧を描画するときに使うのと、まったく同じリレーションです。

1 つの保存済みクエリから、ボードへ至る 3 つの道
手順やること得られるもの
1. クエリを保存するチケット一覧を絞り込み(カスタムフィールド、ウォッチャー、サブプロジェクトなど)、「保存」を押す名前の付いたクエリ。共有した相手に見えます
2. ウィジェットを向けるウィジェットのダイアログでそのクエリを選ぶデータソースと妥当な既定のグループ化が自動的に導かれます
3. またはボードごと生成する「クエリから作成」をクリックそのクエリに紐づく KPI タイルとグラフのダッシュボードが、1 リクエストで完成します

SQL ではなく、プルダウンで設定する

ウィジェットは、データソース・ディメンション・メジャー・集計方法の 4 つで決まります。チケットをステータス・優先度・トラッカー・担当者、あるいは任意の日付フィールドを日・週・月・年に丸めてグループ化し、件数を数える、予定工数を合計する、進捗率を平均する、といったことができます。グラフを 1 つ作るのにチームの誰も SQL を書きません。そして書く SQL がない以上、閲覧者の権限を越えて手を伸ばすクエリも存在しません。

「クエリから作成」ダイアログ。Redmine の保存済みクエリを選ぶと、その絞り込み条件に紐づいた KPI とグラフのダッシュボードが生成されます。
保存済みクエリから 保存済みクエリを 1 つ選ぶだけで、その絞り込み条件に紐づいた KPI とグラフ(ステータス、優先度、担当者、推移、テーブル)がそろったボードが完成します。

どのウィジェットも、1 つのフォームで設定

KPI でも棒グラフでもドーナツでも、設定はすべて同じ短いフォームで行います。タイトルと種別、データソース、絞り込み用の任意の保存済みクエリ、メジャー、そして Top-N 付きのグループ化。種別を変えれば、フォームもそれに合わせて変わります。

KPI のウィジェット設定フォーム。タイトル「チケット総数」、データソース「チケット」、保存済みクエリ、メジャー「チケット件数」、関数 count。
KPI タイル 数字を 1 つ。保存済みクエリに対するメジャーと集計方法で決まります。
棒グラフのウィジェット設定フォーム。優先度別チケット、優先度でグループ化、Top N は 20。
棒グラフ 優先度など任意のディメンションでグループ化し、Top-N でロングテールを切り詰めます。
ドーナツグラフのウィジェット設定フォーム。ステータス別チケット、ステータスでグループ化。
ドーナツグラフ 項目は同じで、種別だけが違います。グラフを切り替えてもデータの設定はそのまま残ります。
Redmine Charts プラグインの設定。キャッシュ有効、キャッシュ有効期限 300 秒、既定のテーマはライト、自動更新間隔は 0。
プラグインの設定 キャッシュ、キャッシュ TTL、既定のテーマ、自動更新を、Redmine 自身の設定画面で。

管理者向けの設定は 1 ページだけ

管理 › プラグイン › Redmine Charts で、ユーザー単位の結果キャッシュ、キャッシュ TTL(5〜86400 秒、既定は 300)、既定のライト/ダークテーマ、既定の自動更新間隔(0 で無効)を設定します。このページは Redmine 自身のプラグイン設定画面です。

23 種類のウィジェット、そして自作の余地

各種別はレジストリ上のメタデータです。設定画面はウィジェット自身の宣言から組み立てられるので、グラフごとに手書きのフォームを用意する必要はありません。

同梱されているカタログ
分類種類設定項目
グラフ棒、横棒、積み上げ棒、折れ線、複数折れ線、エリア、円、ドーナツ、レーダー、極座標、ゲージ、ファネル、ヒートマップ、ツリーマップ、進捗リングデータソース、ディメンション、メジャー、集計方法
KPI / 数値独自のフィルタを持つ、単一の集計値count · sum · avg · min · max
テーブル同じ権限スコープのデータに対するページ送り付きの表列の選択とフィルタ
コンテンツMarkdown、メモ、HTML、iframe、活動フィード、最近のチケット自由記述、または Redmine 自身のフィード

描画は Apache ECharts

15 種類のグラフはライトとダークの双方に合わせて調整され、サイズ変更時に描き直され、壁掛けディスプレイでも読めます。ビルド済みのバンドルを同梱しているため、インストールに Node もビルド手順も不要です。

どの要素からもドリルダウン

棒・扇形・ヒートマップのセルをクリックすると、その対象だけに絞り込まれた Redmine のチケット一覧が開きます。裏側の行にいつでも降りられるので、数字は常に検証可能なままです。

全体フィルタと自動更新

1 本のフィルタバーでボード上のすべてのウィジェットを一度に絞り直せます。ダッシュボードごとの更新間隔で、廊下のディスプレイも最新のままです。0 を指定すれば自動更新は止まります。

テンプレートとブループリント

ボードを再利用可能なテンプレートとして保存し、チームごとに複製できます。JSON のブループリントとして書き出して別インスタンスへ取り込めば、検証環境から本番環境へ手作業で組み直さずに移せます。

1 つのプラグインで、チームごとのボードを

デリバリーリード、サポートデスク、そして一人の開発者。それぞれが手元にあった保存済みクエリから、数分でこれらを作りました。

縦に長いダッシュボード。KPI、ドーナツ、優先度別の棒グラフ、月別の推移、担当者別の作業量、ページ送り付きのチケット表。
ポートフォリオの概要 KPI、ドーナツ、推移、担当者別の作業量、ページ送り付きのチケット表。
「担当しているチケット」ダッシュボード。KPI、エリアチャート、ステータス別ドーナツ。
担当しているチケット エリアチャートとステータス別ドーナツを備えた個人用ボード。
「作成したチケット」ダッシュボード。KPI、トラッカー別ドーナツ、優先度別の棒グラフ。
作成したチケット トラッカーの内訳、優先度の分布、ステータスがひと目でわかります。
サポート用ダッシュボード。チケット総数と作業時間の KPI タイル、ステータス別ドーナツ、優先度別・サブトラッカー別・モジュール別の棒グラフ、月別作成件数の折れ線グラフ。
サポートの概要 サポート期間ごとのチケット数、作業時間、優先度、サブトラッカー、モジュール別の作業量。
1 年分のサポート用ダッシュボード。チケット総数と作業時間の KPI タイル、ステータス別ドーナツ、優先度別・モジュール別・サブトラッカー別の棒グラフ、月別作成件数の折れ線グラフ。
数字で見るサポートの 1 年 チケット数、作業時間、優先度別・モジュール別の内訳と、月ごとの推移。

標準で 2 つ、その隣に自作のデータソースを

チケットと作業時間は、ディメンションとメジャーがあらかじめ登録された状態で同梱されています。どちらも Redmine 自身の可視性スコープの内側にあり、別のプラグインが追加したデータソースもまったく同じ扱いを受けます。

データソースディメンションメジャー
チケットステータス、優先度、トラッカー、プロジェクト、担当者、作成者、カテゴリ、対象バージョン、作成日、更新日、期日チケット件数、予定工数、進捗率
作業時間プロジェクト、ユーザー、作業分類、日付時間、記録件数
自作のもの登録したものすべて登録したものすべて

拡張はパッチではなく、登録で行う

データソースとは、名前・ディメンション・メジャー、そして権限で絞り込まれた base_scope を持つクラスです。ウィジェット種別は単なるハッシュです。自分のプラグインの init.rb から RedmineCharts.register_data_source または register_widget_type で登録すれば、設定画面にすぐ現れ、フィルタ・キャッシュ・ドリルダウンをそのまま引き継ぎます。そのために本プラグインへ手を入れる必要はありません。

読めないものは、誰にも集計できない

ダッシュボードは数字を漏らす近道になり得ます。だからこそ、すべての読み取りは最後に権限を確認するのではなく、閲覧者自身のスコープから始まります。

可視性が先、グループ化は後

Issue.visible(user)、TimeEntry.visible(user)、Query.visible(user) が、1 行でも数える前にリレーションを絞り込みます。自分がメンバーでないプロジェクトの合計値は、そもそも集合に含まれていないため、どのウィジェットにも現れません。

4 つの細かい権限

ダッシュボードの閲覧、作成、全体の管理、テンプレートの管理。いずれもロール単位で割り当てられます。そしてプロジェクトで「ダッシュボード」モジュールを有効にするまで、すべて無効のままです。

共有はメンバーシップ経由

ボードはユーザー・グループ・ロール・プロジェクト単位で共有できます。リクエストのたびに viewable_by? と editable_by? を Redmine 自身のメンバーシップから解決し直すので、やがてずれていく独自の権限一覧に頼りません。

データはサーバーの外に出ない

フロントエンドが通信する相手は、自社の Redmine 上にある本プラグインの JSON API だけで、既存のセッションと CSRF トークンをそのまま使います。外部サービスも、ライセンス確認の通信も、テレメトリもありません。

大規模インスタンスに耐える造り

10 万件のチケットを数えるために、10 万個のオブジェクトを読み込む必要はないはずです。ここでは実際に必要ありません。

ボードを開いたときに起きること
論点対処の仕方
集計GROUP BY・COUNT・SUM・AVG は SQL で実行され、数えるためだけに行をインスタンス化することはありません
値の多いディメンション取り得る値が数千に及ぶ場合も、Top-N への畳み込みで応答を小さく保ちます
繰り返しの閲覧結果は Rails.cache により、ユーザー・ウィジェットの更新時刻・適用中のフィルタ単位でキャッシュされます。TTL は設定項目で、Redis もそのまま使えます
遅いウィジェットが 1 つあるウィジェットは個別に読み込まれるため、重いクエリ 1 本がボード全体を止めることはありません
JS バンドルがないRails が各ウィジェットのデータをサーバー側で描画してフォールバックするので、画面は真っ白にならず機能が落ちるだけで済みます

移植性は偶然ではなく、設計の結果

複数バージョン・複数データベースへの対応は、最初から設計に組み込まれています。マイグレーション、JSON の格納、日付の区切り方は、どれも環境の違いを乗り越えるように書かれています。

論点対応範囲実現方法
Redmine4.x、5.x、6.x、7.xrequires_redmine version_or_higher 4.0.0 を宣言。古びていくようなコアのオーバーライドはありません
Rails5.2 → 8.0マイグレーションは、8.0 までのすべてのリリースが解釈できる 5.2 を基準にしています
Ruby2.5+Redmine 4 の最低要件に合わせています
データベースMySQL、MariaDB、PostgreSQLJSON は通常の text カラムに格納(DDL はどこでも同一)。シリアライザが Rails のバージョンごとに適切な形式を選びます
日付のグループ化日、週、月、年可搬な CAST(col AS DATE) でグループ化し、Ruby 側で区間に畳み込みます。ベンダー固有の SQL はありません
マイグレーションの再実行安全防御的に書かれているため、中断したアップグレードもやり直せます

初日からスクリプトで操作できる

すべてのエンドポイントは /redmine_charts/api 配下にあり、JSON を返し、画面とまったく同じ権限を適用します。CI からボードを用意することも、チームごとに生成することもできます。

メソッドパス内容
GET/dashboards呼び出し元が閲覧できるすべてのダッシュボード
POST/dashboardsダッシュボードを作成する
GET/dashboards/:idダッシュボードをウィジェットごと取得する
PATCH/dashboards/:id名前・レイアウト・設定を変更する
POST/dashboards/:id/duplicateウィジェットごと複製する
GET/dashboards/:id/exportJSON ブループリントを書き出す
POST/dashboards/importブループリントからボードを作成する
POST/dashboards/:id/widgetsウィジェットを追加する
GET/widgets/:id/data集計済みで権限スコープの適用されたウィジェットのデータ
GET/meta/data_sourcesデータソース、ディメンション、メジャー、利用可能な保存済みクエリ

今日提供しているもの、次に来るもの

ロードマップの項目は、新しいデータソース、ウィジェット種別、書き出し機能といった追加的なものばかりなので、どれも移行作業を求めません。機能ではなくロードマップとして載せているのは、今日の箱の中身で判断していただくためです。

機能状況
ダッシュボード:作成、複製、既定に設定、書き出し、取り込み提供中
ドラッグ&ドロップでリサイズできるグリッドと自動保存提供中
KPI、テーブル、ECharts のグラフ一式提供中
SQL 不要のビジュアルなウィジェット設定提供中
保存済みクエリの再利用と、1 クリックでのボード生成提供中
ボード全体を更新する全体フィルタ提供中
グラフからチケット一覧へのドリルダウン提供中
ユーザーごとの権限スコープ付き SQL 集計とキャッシュ提供中
共有、テンプレート、ライト/ダークテーマ提供中
複数バージョン・複数データベース対応、サーバー側フォールバック提供中
PDF・PNG・Excel への書き出し予定
非常に重いレポート向けのバックグラウンドジョブ予定
WebSocket によるリアルタイム更新予定
スナップショットの定期作成とメール送信予定
キオスク/ウォールボードモード予定
AI による自然言語のレポートビルダー予定
カレンダー、バーンダウン、ガントサマリーのウィジェット予定

価格

サーバー 1 台

$199

Redmine インスタンス 1 つ · ユーザー数無制限 · 12 か月のアップデート。

Unlimited users12 months of updatesPriority email support
ライセンスを購入

複数サーバー

$399

Redmine サーバー数無制限 · ユーザー数無制限 · 12 か月のアップデート。

Unlimited users12 months of updatesPriority email support
ライセンスを購入
購入