はじめに
TechDiv BXサービスチームの宇治川です。
複数のアジャイル開発プロジェクトを担当していると、プロジェクトを横断した進捗管理や優先度付けなど大変ですよね。そこで今回はプロジェクト管理ツールTaigaにおける複数ブロジェクトを横断したユーザーストーリーの優先度や進捗をBIツールTableauで可視化してみました。
環境
Node.js v8.9.4
macOS High Sierra
Taiga とは
オープンソースのプロジェクト管理プラットフォーム。
UIはシンプルで直感的に操作が可能で、個別の細かいカスタマイズも可能です。
参照:Taiga.io
本記事のゴール
・可視化を実現する
・自動化を実現する
可視化を実現するためのフロー
1-1. TaigaユーザーストーリーをCSV形式で出力する
1-2. 出力したCSVデータをGoogleDrive上にアップロードする
1-3. アップロードファイルをTableauDesktopと接続する
1-4. TableauDesktopでの可視化
自動化を実現するためのフロー
2-1. TaigaデータCSVデータをGoogleDrive上にアップロードする作業をバッチにて自動化する
1-1. TaigaユーザーストーリーをCSV形式で出力する
ADMIN(左バー一番下のネジ) → PROJECT → REPORTS → USER STORIES REPORTS の 「DOWNLOAD CSV」 ボタン並びに、APIのURLからユーザーストーリーの情報を簡単に出力することができます。
1-2. 出力したCSVデータをGoogleDrive上にアップロードする
ここでは、「USER STORIES REPORTS」から出力されるCSVデータをTableau可視化用に文字コードなど少し加工した上で、それをエクセルファイルとしてGoogleドライブ上にアップロードします。また、アップロード方法は、Googleの 「Drive File Stream」を導入することによって、アップロード処理をGoogleのAPIなど用いずに、Googleとのファイル同期処理によりアップロード処理を実行することができます。
参考:Googleドライブ[ドライブファイルストリーム]の導入方法と使い方
また、今回はNode.jsを使ってCSVデータを文字コードなど少し加工した状態でエクセルファイルとして出力しました。Node.jsにこだわった理由は特になく、一番手っ取り早く実装できる環境にいたのがNode.jsでした。 以下がソースコードです。
taiga_api_us.js
var Client = require('node-rest-client').Client;
var client = new Client();
var fs = require('fs')
var path = require('path')
var iconv = require('iconv-lite')
var Excel = require('exceljs');
var totalWorkBook = new Excel.Workbook();
////////Taiga Project1
client.get('USER STORIES REPORTSのAPI URL', function (data, response) {
let filename = "Project1.csv";
createCsv(data, filename);
let workbook = new Excel.Workbook();
workbook.csv.readFile(filename).then(function () {
write2Excel(workbook, totalWorkBook, "ALL_PROJECT_US.xlsx", "PROJECT1");
});
});
////////Taiga Project2
client.get('USER STORIES REPORTSのAPI URL', function (data, response) {
let filename = "Project2.csv";
createCsv(data, filename);
let workbook = new Excel.Workbook();
workbook.csv.readFile(filename).then(function () {
write2Excel(workbook, totalWorkBook, "ALL_PROJECT_US.xlsx", "PROJECT2");
});
});
/////////////////////////////
function createCsv(data, filename){
var csvfile = data.toString("utf8")
var dist = path.join( process.env.PWD || process.cwd() , filename);
fs.writeFileSync( dist , "" );
var fd = fs.openSync( dist, "w");
var buf = iconv.encode( csvfile , "UTF-8" );
fs.write( fd , buf , 0 , buf.length , (err, written, buffer) => {
if(err){
throw err;
}
else {
console.log(filename + " ファイルが正常に書き出しされました。")
}
});
}
/////////////////////////////
function write2Excel(workbook, totalWorkBook, filename, sheetname) {
var sheet = workbook.getWorksheet(1);
var maxColumnCount = sheet.columnCount;
var maxRowCount = sheet.rowCount;
var sheetPROJECT = totalWorkBook.addWorksheet(sheetname);
for(var a = 1; a <= maxRowCount; a++){
for(var b = 1; b <= maxColumnCount; b++){
sheetPROJECT.getCell(a, b).value = sheet.getCell(a, b).value;
}
}
totalWorkBook.xlsx.writeFile(filename).then(function() {
console.log(filename + " ファイルに正常に書き出しされました。");
});
}
上記の taiga_api_us.js を「Drive File Stream」経由でGoogleドライブ内のフォルダに置いて実行することによってTaigaのユーザーストーリーデータをエクセルファイルとしてアップロードすることができます。
1-3. アップロードファイルをTableauDesktopと接続する
先ほどGoogleドライブにアップロードしたエクセルファイルをTableauと接続します。
次に接続されたエクセルをシート単位でユニオンを作成します。こうすることによりプロジェクトをまたいだデータ分析が可能になります。
1-4. TableauDesktopでの可視化
複数プロジェクトを横断したユーザーストーリーを管理を目的にTableauDesktopでダッシュボードを作成し可視化してみました。
PROJECT1 / PROJECT2のシートはこんな感じです。
2-1. TaigaデータをGoogleDrive上にアップロードする作業をバッチにて自動化する
最後に自動化してみましょう。具体的な方法は以下のブログ記事に記載しております。
参照: PC起動時に定型業務を自動化する方法|CCI TECH BLOG
@echo off
:top
pushd "G:\マイドライブ\[taiga_api_us.jsが存在するフォルダ]"
timeout 1800
start /MIN "TAIGA" "%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe" "node taiga_api_us.js"
goto top
こんな感じで30分ごとにTaigaのユーザーストーリーデータを更新しても良いかもしれませんね。