はじめに
こんにちは。近藤です。
前回はRedmileのデータをKibanaで表示してみました。
今回はRedmineデータをEVMグラフとして表示します。
例えば、Kibana+Timelionを使うと、RedmineデータからEVMグラフを表示できるのです。
◆EVMグラフ例
では早速、Kibana+Timelionを使ってみましょう。
なお、下記を前提としています。
- Windows環境で構築する。
- Redmineのデータベース(MySQL)に直接接続する。
EVMとは?
EVM(Earned Value Management:アーンド・バリュー・マネジメント)はPMBOKでも説明されている有名なプロジェクト管理技法です。
今回は下記の値を計測します。
計測値 | 説明 | 略称 |
---|---|---|
Planned Value | 計画価値 | PV |
Actual Cost | 実コスト | AC |
Earned Value | 出来高 | EV |
それぞれの計測値をITプロジェクトにおける数値に置き換えると、下記のように言えます。
- 画面開発に必要な工数(Planned Value:PV)
- メンバーが稼働した時間(Actual Cost:AC)
- 開発が完了した作業量(Earned Value:EV)
これらの数値を別々に把握できると、下記が別々に管理できそうです。
- (1).画面開発の進捗(EV ÷ PV)
- (2).メンバーの生産性(EV ÷ AC)
(1)の値をSPI(Schedule Performance Index)、(2)の値をCPI(Cost Performance Index)と呼びます。
いずれも標準値が”1.00”。それを下回る場合は、課題があると考えられます。
RedmineのデータをEVM表示するとどうなる?
例えば、下記のような4件のチケットがRedmineに登録されているプロジェクトがあったとします。
チケット番号#4の進捗が50%の状況ですね。
この場合、PVの累計は”32h“、EVの累計は”28h“。PVに対してEVが”4h“足りていないことが分かります。
また、SPIは”0.875“。進捗が”0.125“つまり、12.5%遅延していることが分かります。
作業時間を付記した場合のEVMの例
今度は作業時間を付記してみました。
この場合、ACの累計は”28h“です。
また、CPIは”1.00“。つまり、生産性は標準であることがわかります。
つまり、遅延はしているが、メンバーの生産性は標準。
メンバーの作業時間を確保することで、進捗が向上する事が検討出来そうです。
EVMを使うことで多角的にプロジェクトを把握できますね。
今回は、このEVMをグラフで表示します。
大まかな流れ
下記の手順でグラフを表示します。
- 環境構築
- データ投入
- EVM 表示
1.環境構築
環境構成図
今回もELK+Timelionを利用して、Redmineデータの可視化環境を構築します。
(a)ELKをダウンロード
- Elastic Search Download URL
- →前回の構築時から最新版が出ているため(2017/1/19時点)私の場合は、「elasticsearch-5.1.2.zip」をダウンロードしました。
(b) Kibanaをダウンロード
- Kibana Download URL
- →私の場合は、
kibana-5.1.2-windows-x86.zip
をダウンロードしました。
- →私の場合は、
(c) Logstashをダウンロード
- Logstash Download URL
- →私の場合は、
logstash-5.1.2.zip
をダウンロードしました。
- →私の場合は、
(d) 「c:\elastic」というフォルダを作成
(e) 先ほどダウンロードしたそれぞれの圧縮ファイルを解凍し、「c:\elastic」へ配置します。
最終的には下記のようなフォルダ構成になります。
C:\elastic |
2.RedmineデータをELKに取り込む
次に、JDBCドライバを用意します。
前回ダウンロードした mysql-connector-java-5.1.39-bin.jar
というファイルを、C:\elastic\logstash-5.1.2\bin
以下に配置します。
次に、「redmine.txt」というファイルを作成。中身は下記のようにします(★を含む箇所は皆様の環境に合わせた値へ変えて下さい)。
input { |
中に記載されているSQLでは、下記5つの値を取得します。
SQL上の項目名 | Redmine上の項目名 |
---|---|
due_date | 「期日」 |
updated_on | 「更新日」 |
pv | 「予定工数」 |
ev | 「予定工数」×「進捗率」 |
ac | 「作業時間の記録」 |
この「redmine.txt」も「C:\elastic\logstash-5.1.2\bin」に配置。
結果的に、下記のようなフォルダ構成になります。
C:\elastic |
では、ElasticSearchを実行します。
「C:\elasticsearch-5.1.2\bin」フォルダで下記のコマンドを実行。
elasticsearch.bat
コマンドプロンプトの右下に”started”と表示されたら起動完了です。
次にLogstashを使って、RedmineのデータをElasticSearchへ取り込みます。
「C:\elastic\logstash-5.1.2\bin」フォルダで下記コマンドを実行。
logstash.bat -f redmine.txt
取り込みが完了しました。
次に、Kibanaを起動します。C:\elastic\kibana-5.1.2-windows-x86\bin
フォルダで下記コマンドを実行。
kibana.bat
Kibanaが起動しました。
では、Kibanaを表示します。ブラウザで http://localhost:5601
を開く。
[Configure an index pattern]という画面が開くので、[Time-field name]に”due_date”を指定します。
そして、[Create]をクリック。
そして、左側の[Timelion]をクリックすると、Timelionの画面が開きます。
グラフが出ましたね!
次は、少し見やすくするために、グラフエリアを最大化します。
グラフにカーソルを当てると[Full screen]ボタンが表示されるのでクリック。
するとグラフが最大化されます。
そして、次は表示期間を変更します。右上[Last 15 minutes]ををクリック。
すると日付が選べます。今回は[Last 1 Year]をクリック。
次に、画面右上あたりの[Last 1 Year]をクリック。
グラフが大きく見やすくなりましたね。
3.EVM 表示
では、.es(*)
という記載を.es(metric='sum:pv', timefield='due_date').cusum().label('[累積]pv')
に変更します。
PVの累計が期日別に表示されました。
記載の意味は下記の通りです。
- .es(metric):表示する項目を指定する。今回はPVの合計を指定。
- .es(timefield):X軸の項目名を指定する。今回は期日(due_date)を指定。
- .cusum():累積表示するという意味。
次は、.es(metric='sum:pv', timefield='due_date').cusum().label('[累積]pv')
という記載を
.es(metric='sum:pv', timefield='due_date').cusum().label('[累積]pv'),.es(metric='sum:ev', timefield='updated_on').cusum().label('[累積]ev')
に変更します。
すると、EVの累計が更新日別に表示されます。
記載の意味は下記の通りです。
- .es(metric):表示する項目を指定する。今回はEVの合計を指定。
- .es(timefield):X軸の項目名を指定する。今回は更新日(updated_on)を指定。
- .cusum():累積表示するという意味。
次は、.es(metric='sum:pv', timefield='due_date').cusum().label('[累積]pv'),.es(metric='sum:ev', timefield='updated_on').cusum().label('[累積]ev')
という記載を
.es(metric='sum:pv', timefield='due_date').cusum().label('[累積]pv'),.es(metric='sum:ev', timefield='updated_on').cusum().label('[累積]ev'),.es(metric='sum:ac', timefield='updated_on').cusum().label('[累積]ac')
に変更します。
すると、ACの累計が更新日別に表示されます。
これで、PVとEV、ACが表示されましたね。
さらに、CPIも併記させます。
左下の[Exit full screen]をクリックし、グラフの大きさを元に戻します。
そして、右上の[Add]をクリック。
グラフが追加されました。
そして、.es(*)
という記載を.es(metric='sum:ev', timefield='updated_on').cusum().divide(.es(metric='sum:ac', timefield='updated_on').cusum()).label('cpi').yaxis(min=0.75, max=1.25)
に変更すると。
CPIが表示されました。
記載の意味は下記の通りです。
- .divide():割り算するという意味。今回は、EV÷ACを指定。
- .yaxis():Y軸の表示範囲を指定する。今回は、0.75~1.25を指定。
これでTimelionの左側に、PVとEVとAC。右側にCPIが併記されました。
最後に
EVMグラフを表示しました。RedmineをKibana+Timelionと組み合わせることで、グラフ表示が可能になり、結果的にプロジェクト状況の把握が容易になります。
みなさまのプロジェクトマネジメントに役に立てば幸いです。
シリーズとして連載しています。こちらもぜひどうぞ。
- マネージャーがうれしいRedmineデータのグラフ表示方法を公開します!!
- マネージャーがうれしいRedmineデータのEVM表示方法を公開します!!
- マネージャーがうれしいRedmineデータのダッシュボード表示方法を公開します!!
- マネージャーがうれしいRedmineデータのグラフ表示方法を公開します!!(Metabase編)