経緯
今まで、プロジェクト管理にBrabio!を使用していたのですが、このたび代替ツールの使用を検討することにしました。
チームメンバーに使われ方や需要を確認したところ、タスク管理ツールにマクロからミクロまで、すなわち
- ガントチャート
- 中長期のマイルストーン管理
- チーム個人のスケジュール管理
- 日々のタスク管理
- Slack等、他アプリケーションとの連携
を求めているようです。現状1-4まですべてbrabioに書き込まれる運用がなされています。
Brabio! が得意としているのは、主に1,2で、日々のタスク管理やスケジュールの管理に不便が生じてきたため、今回別の運用を考えてみることにしました。その際、Slack連携も導入したいところです。
新しい運用では、移行のため上記に加えて
- 現在のbrabioのデータ(200件ほどのタスクが登録されている)を扱うことができる
- 複数のアプリケーションを用いる場合は互いに同期できる
を満たす必要があります。連携機能が弱いため、brabioを利用した運用の提案はここで弾かれます。
現状のプロジェクトのプロジェクト管理データを用いて新しく導入するアプリケーションを検討してみたいので、
一旦、現状のbrabioのデータを扱いやすく加工することにしました。
データの書き出し
brabioでは、管理権限を持っていればプロジェクトをExcel形式または、CSV形式で書き出すことが可能です。
今回はこちらのCSVデータを加工し、使い勝手をよくするためJSON形式に変換します
フォーマットの作成
brabioにある機能をベースとした、JSONフォーマットを作成します。
{
"company_name": "company_name",
"project": {
"name": "project_name",
"id": "xxx",
"members": ["name1", "name2"],
"milestones": [
{
"name": "name",
"at": "YYYY-MM-DDT00:00:00.000Z",
"tags": ["red"]
}
],
"tasks": [
{
"id": "xxx",
"name": "name",
"parent_id": "yyy",
"start_at": "YYYY-MM-DDT00:00:00.000Z",
"due_on": "YYYY-MM-DDT00:00:00.000Z",
"completed_at": "YYYY-MM-DDT00:00:00.000Z",
"status_type": 0,
"progress": 0,
"member": ["name1", "name2"],
"description": ""
},
]
}
}
今回はこんな感じのフォーマットで書き出すことにしました。
CSV to JSON 変換
エクスポートしたCSVデータをGoogleスプレッドシートにインポートし、GoogleAppsScriptを用いてJSON形式のファイルを取得します。
function brabioToJson(url, inputSheetName, outputSheetName, projectRowIndex) {
var ss = SpreadsheetApp.openByUrl(url);
var sheet = ss.getSheetByName(inputSheetName);
var sheetValues = sheet.getDataRange().getValues();
var sheetData = {
data: sheetValues,
getStringValue: function(column, row) { return this.data[row][column] != null ? this.data[row][column] : "";},
getIntValue: function (column, row) { return parseInt(this.getStringValue(column, row) ? this.getStringValue(column, row) : 0);}
};
getMembers = function(text) { text !== "" ? text.split('\n') : [];}
var ret = {};
ret.company_name = sheetData.getStringValue(0, 0);
ret.modified_at = "";
var project = {};
project.name = sheetData.getStringValue( 3, projectRowIndex);
project.start_at = sheetData.getStringValue( 4, projectRowIndex);
project.due_on = sheetData.getStringValue( 5, projectRowIndex);
project.id = sheetData.getStringValue( 2, projectRowIndex);
project.members = getMembers(sheetData.getStringValue( 10, projectRowIndex));
project.milestones = [];
project.tasks = [];
var beforeParent = [project.id];
var lastRow = sheet.getLastRow();
for (var index = projectRowIndex + 1;index < lastRow; ++index) {
var type = sheetData.getStringValue( 0, index);
var task = {};
task.name = sheetData.getStringValue( 3, index);
if (type === 'milestone') {
task.at = sheetData.getStringValue( 4, index);
task.tags = [sheetData.getStringValue( 11, index)];
project['milestones'].push(task);
}
else {
var outline = sheetData.getIntValue( 1, index);
task.id = sheetData.getStringValue( 2, index);
beforeParent[outline] = task.id;
task.start_at = sheetData.getStringValue( 4, index);
task.due_on = sheetData.getStringValue( 5, index);
task.parent = beforeParent[outline - 1];
task.status = sheetData.getStringValue( 6, index);
task.progress = sheetData.getIntValue( 7, index);
task.completed_at = sheetData.getStringValue( 9, index);
task.members = getMembers(sheetData.getStringValue( 10, index));
task.description = sheetData.getStringValue( 11, index);
project['tasks'].push(task);
}
}
ret.project = project;
var content = ContentService.createTextOutput(JSON.stringify(ret)).setMimeType(ContentService.MimeType.JSON)
var resultSheet = ss.getSheetByName(outputSheetName);
var resultCell = resultSheet.getRange("a1");
resultCell.setValue(content.getContent());
return content;
}
function doGet(e)
{
const Url = "アプリケーションのURL";
const InputSheetName = "読み込みシート名";
const OutputSheetName = "書き出し先シート";
const ProjectRowIndex = 1;
return brabioToJson(Url, InputSheetName, OutputSheetName, ProjectRowIndex);
}
こちらを実行することで、求めるJSONファイルを作成することができました。
次回は、こちらのJSONデータを用いてタスク管理ツールにインポートし、ツールの検討を行なっていきます。