【GAS】Trelloで日報記録
会社で書いている日報とは別に、個人で日報(日記)として毎日記録をつけています。 記録先としてはDay oneなどの日記アプリではなく、Googleカレンダーを利用しています。
定期的な予定として1日の終わりに日報記入の時間を入れています。
予定画面
予定詳細画面
説明欄に日報の内容を記入していきます。 今はそのまま平文を記入していますが、markdown形式で書いておいて、Trelloに登録した時にMarkdownが反映されるかも試してみたいです。
実装
TrelloからBoardId, ListId, LabelIdを取得するコードは割愛。 一点、躓いたポイントとしては、Trelloからの返却値がJSONであることを忘れていて、なかなか出力できないなというケアレスミスが発生。
下記のコードに加えて、GASのトリガーで日記記入の翌日に起動するように設定すればOK
Code
Trello操作関連
var prop = PropertiesService.getSctiptProperties().getProperties(); var key = prop.TRELLO_KEY; var token = prop.TRELLO_TOKEN; var username = prop.TRELLO_USER; var baseURL = 'https://trello.com/1/'; // リスト追加関数 function addList(payload) { var boardId = 'id'; var url = baseUrl + '/boards/' + boardId + '/lists/?key=' + key + '&token=' + token; var options = { 'method' : 'post', 'muteHttpExceptions' : true, 'payload' : payload } var result = UrlFetchApp.fetch(url, options); return result; } // カード追加関数 function addCard(payload) { var url = baseUrl + '/cards/?key=' + key + '&token=' + token; var options = { 'method' : 'post', 'muteHttpExceptions' : true, 'payload' : payload } UrlFetchApp.fetch(url, options); }
AddTrello.gs
function addTrello() { var cal = CalendarApp.getCalendarById('id'); var yest = new Date(); yest.setDate(yest.getDate() - 1); var option = { search : '日報' }; var events = cal.getEventsForDay(yest, option); var result = new Array(); for (var i in events) { var title = events[i].getTitle(); var desc = events[i].getDescription(); if (title === '日報') { result = [yest, desc]; } } var ss = SpreadsheetApp.openById('id').getSheetByName('name'); // crD = currentDay, crM = currentMonth var crD = yest.getDate(); var crM = yest.getMonth() + 1; // ssM = SpreadSheetMonth(命名は適当。スプレッドシートにMMを記録) var ssM = sh.getRange('B1').getValue(); if (crM == ssM + 1) { if (crD == 1) { var payload = { 'name' : crM + '月', 'pos' : 'top' } var res = addList(payload); var text = JSON.parse(res); // 現在の月, TrelloのリストIdを更新 sh.getRange('B1').setValue(crM); sh.getRange('D1').setValue(text.id); // 更新記録としてスプレッドシートに残しておく用 var array = [crM, text.id] sh.appendRow(array); } } if (result.length !== 2) return; if (result[1] == "") { var value = '日報が書かれていません'; result.splice(1, 1, value); } // リストにカードを追加 var cardTitle = Utilities.formatDate(result[0], 'Asia/Tokyo', 'MM/dd') + " " + title; var caedDesc = result[1]; var listId = sh.getRange('D1').getValue(); ver payload2 = { 'name' : cardTitle, 'desc' : cardDesc, 'due' : '', 'idList' : listId, 'urlSource' : '' } addCard(payload2); }