プロジェクト管理ツールTaigaのデータをTableauで可視化する方法

はじめに

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のユーザーストーリーデータを更新しても良いかもしれませんね。