最近 「分報」 なるものが流行っているようです。(調べたら全然最近じゃなかった)
Slackで「分報」を導入したらめっちゃ作業効率があがった
Slackで簡単に「日報」ならぬ「分報」をチームで実現する3ステップ〜Problemが10分で解決するチャットを作ろう
僕もそんな時代の潮流に乗るべく分報なるものを実践してみたのですが、
「これめんどくさくない?」
いちいち作業した後にコメントするのなんて忘れちゃいます。
でも自分の作業を記録するのにはかなり賛成で、今からやる作業の時間を測ると謎の競争心によりセルフ・タイムアタックが始まります。
結果的に早く終わるのでこれはやりたい。
そのためにTogglを使い始めたのですが、これを分報にしちゃいたいということでGASで作ってみました。(Zapierで連携できるのですが月100件までの制限付きなので自分で作るつくる)
参考
下準備
- スプレッドシート このスプレッドシートをコピーして使ってください。(このカラムの順番にデータが書き込まれるので)
- SlackでAPIの準備(WebhookでOK)
- TogglからAPIキーの取得
コード
var Toggl = {
BASIC_AUTH: '【ご自身のAPIキー】:api_token',
get: function(path){
var url = 'https://www.toggl.com/api/v8' + path;
var options = {
'method' : 'GET',
'headers': {"Authorization" : "Basic " + Utilities.base64Encode(this.BASIC_AUTH)}
}
var response = UrlFetchApp.fetch(url, options);
return JSON.parse(response);
},
getTimeEntries: function(){
var path = '/time_entries'
return this.get(path)
},
getTimeEntry: function(id) {
var path = '/time_entries/' + id
return this.get(path);
},
getProject: function(id) {
var path = '/projects/' + id
return this.get(path);
}
}
var Slack = {
post: function(message){
var url = '【ご自身で作ったAPIのURL】';
var options = {
'method': 'POST',
'contentType': 'application/json',
'payload': JSON.stringify({'text': message})
}
var response = UrlFetchApp.fetch(url, options);
return response;
},
}
function main() {
var togglLogSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("TogglLog");
var timeEntries = Toggl.getTimeEntries();
var lastTimeEntryId = togglLogSheet.getRange(1,1).getValue();
for(var i in timeEntries) {
var timeEntry = timeEntries[i];
if(timeEntry.id <= lastTimeEntryId) {
continue;
}
if(timeEntry.duration < 0) {
continue;
}
lastTimeEntryId = timeEntry.id
var projectName = Toggl.getProject(timeEntry.pid).data.name
var data = []
togglLogSheet.getRange(togglLogSheet.getLastRow() + 1, 1, 1, togglLogSheet.getLastColumn())
.setValues([[timeEntry.id, projectName, timeEntry.description, timeEntry.duration, new Date(timeEntry.start), new Date(timeEntry.stop)]]);
Slack.post(formatText(projectName, timeEntry))
}
togglLogSheet.getRange(1,1).setValue(lastTimeEntryId);
}
function formatText(projectName, timeEntry) {
return '【' + projectName + '】 *' + timeEntry.description + '* :' + Math.round(timeEntry.duration/60/60*100)/100 + '時間'
}
後半なんか疲れちゃったので死ぬほど変な部分あると思いますがとりあえず動くと思います。(たぶん)
あとはGASの方でトリガーとか設定すれば大丈夫です。
スプレッドシートに書き込むようにしたのは色々分析したかったからです。(Togglに綺麗なダッシュボードありますけど)
※ 1行目1列目のIDが最後のTimeEntryのIDで、そこをみて新規のTimeEntryかどうかを判断しています。
ツイッターもやっているのでお友達になっていただけると嬉しいです。
こちらからは以上です。