GoogleスプレッドシートでPSP(Personal Software Process)

今以下の本を読んでPSPを実践している。

パーソナルソフトウェアプロセス入門

作者: ワッツハンフリー,Watts S. Humphrey,PSPネットワーク

出版社/メーカー: 共立出版

PSP(Personal Software Process)とは日頃自分がどの作業にどれくらい時間を使っているか記録しておき、それを分析することで作業の改善を行っていく枠組みのこと。

詳しくは上記の本やパーソナルソフトウェアプロセス(PSP)入門:CodeZine(コードジン)参照。

せっかくなので時間記録ログをとろうと思い、Googleスプレッドシートで時間記録ログの表を作成した。

GoogleスプレッドシートExcel同様Ctrl+;で現在の日付、Ctrl+:で現在時刻を挿入できるのだが、Excelではセルに=C2-B2というようにすると時間の差分が計算できるが、Googleスプレッドシートでは”7:18 午前”というような文字列が挿入されてしまうため、Excelのように単純な数式では差分が計算できない。

そこで、Googleスプレッドシートに備わっているGoogle Apps Scriptで時間の差分を計算する関数を作成した。

function diffTime(start, end) {
var startTimeAry = toTimeAry(start);
var startHour = startTimeAry[0];
var startMin = startTimeAry[1];
var endTimeAry = toTimeAry(end);
var endHour = endTimeAry[0];
var endMin = endTimeAry[1];

if (endHour < startHour) {
endHour += 24;
}

var totalStartMins = startHour * 60 + startMin;
var totalEndMins = endHour * 60 + endMin;
return totalEndMins - totalStartMins;
}

function toTimeAry (timeStr) {
ary = timeStr.split(" ");
//Logger.log(ary[0]);
//Logger.log(ary[1]);
timeAry = ary[0].split(":");
var hour = Number(timeAry[0]);
var min = Number(timeAry[1]);

if (ary[1] == "午後") {
hour += 12;
}
var timeAry = new Array(2);
timeAry[0] = hour;
timeAry[1] = min;
return timeAry;
}

function diffTimeTest() {
var diff = diffTime("11:18 午後", "10:10 午前");
if (diff !== 10 * 60 + 52)
throw "test failed";

diff = diffTime("11:18 午後", "0:10 午前");
if (diff !== 52)
throw "test failed";

diff = diffTime("11:18 午前", "0:10 午後");
if (diff !== 52)
throw "test failed";

diff = diffTime("11:9 午後", "0:10 午前");
if (diff !== 61)
throw "test failed";

diff = diffTime("0:0 午前", "11:59 午前");
if (diff !== 11*60 + 59)
throw "test failed";

Browser.msgBox("tests passed!");
}

作業時間セルには’=diffTime(B2, C2)’というように指定すると、B2、C2セルにある時刻の差分を分単位で表示することができる。

Google Apps Script初めて触ったけど、Javascriptで書けるからVBAよりいい感じ♪

逐一時間を記録するのはけっこうつらいが、ここまでやったんだから続けてみようと思う。

そのうち週間、月間レポートを生成するようなスクリプトも作成してみたいなぁ。