#はじめに
仕事のタスク整理にTrelloを使いますが、完了したタスクを手動でアーカイブすると判断に迷ったり、手間を感じることがあるので、完了してから一定期間経過したものをGoogleAppsScript(GAS)で自動アーカイブするようにしました。
#準備
TrelloのAPIをGASで使用するにはAPIキーやトークンの取得が必要になります。
方法はこちらの記事を参考にしてください。
#処理の流れ
- 完了のリストにあるカードを取得する
- 取得したカードの最終更新日が7日経過していれば、アーカイブする
- アーカイブしたカードの情報をスプレッドシートに出力(追記)する
#コード
###①カードの取得とアーカイブ対象の選定
cardArchived.gs
// カードのアーカイブ
function cardArchived() {
// スクリプトプロパティのオブジェクト取得
var scriptProperty = PropertiesService.getScriptProperties().getProperties();
//TrelloのAPIキーの取得
var Key = scriptProperty.API_KEY;
//TrelloのAPIトークンの取得
var Trello_Token = scriptProperty.TOKEN;
//削除対象のリストIDの取得
var ListId = scriptProperty.LIST_ID_DONE;
/*
リストにあるカードの一覧の取得
【取得するfrield】
id = カードのID
name = カードの名称
dateLastActivity = 最終更新日
shortUrl = カードのURL
desc = カードの説明
*/
console.log("リストにあるカードの一覧の取得");
var cardListURL = 'https://api.trello.com/1/lists/' + ListId + '/cards'
+ '?key=' + Key
+ '&token=' + Trello_Token
+ '&fields=id,name,dateLastActivity,shortUrl,desc';
//カードの一覧取得要求
var response = UrlFetchApp.fetch(cardListURL);
//取得した情報をJSON形式に変換
var json = JSON.parse(response.getContentText("UTF-8"));
///現在時刻の取得
var nowDate = Moment.moment();
// yyyy/mm/dd形式に変換
var nowDate_format = nowDate.format("YYYY/MM/DD");
// 取得したカードの判定
for (var i in json) {
// 最終更新日をMoment型にパース
var dateLastActivity_moment = Moment.moment(json[i]["dateLastActivity"]);
//最終更新日 + 7日
var dateLastActivity_moment_add = dateLastActivity_moment.add(7, "days");
// 表示形式を変換
var dateLastActivity_format = dateLastActivity_moment_add.format("YYYY/MM/DD");
// 日付の比較(現在>日付加算後)
// Moment.moment(現在日付).isAfter(最終更新日+7日);
if (Moment.moment(nowDate_format).isAfter(dateLastActivity_format)){
console.log("完了してから最終更新日から7日経過したカードをアーカイブする");
// 対象のカード内容(ログ出力)
console.log("カードの名称 = "+json[i]["name"]);
console.log("最終更新日 = "+json[i]["dateLastActivity"]);
console.log("カードのURL = "+json[i]["shortUrl"]);
// スプレッドシート出力
outputSpreadsheet(nowDate_format,dateLastActivity_format,json[i]);
// 対象のカードをアーカイブ
var cardURL = 'https://api.trello.com/1/cards/' + json[i]["id"]
+ '?key=' + Key
+ '&token=' + Trello_Token
+ '&closed=true';
UrlFetchApp.fetch(cardURL, {'method' : 'put'});
}
}
}
###②アーカイブしたカードをスプレッドシートに出力(累積させる)
outputSpreadsheet.gs
// スプレッドシートにアーカイブしたカードを出力
function outputSpreadsheet(nowDate_format,dateLastActivity_format,json) {
// スプレッドシートの取得
const sheet = SpreadsheetApp.getActive().getSheetByName('archived_log');
// 最終行の取得
const lastRow = sheet.getLastRow();
// 出力
var outputRow = lastRow + 1;
sheet.getRange(outputRow, 1).setValue(nowDate_format); // アーカイブ実施日
sheet.getRange(outputRow, 2).setValue(json["name"]); // カード名称
sheet.getRange(outputRow, 3).setValue(json["desc"]); // カードの説明
sheet.getRange(outputRow, 4).setValue(dateLastActivity_format); // カードの最終更新日
sheet.getRange(outputRow, 5).setValue(json["shortUrl"]); // カードのショートURL
}
#コード作成後の作業
あとはスクリプトを時限式のイベントトリガーで指定した時間に自動起動するように設定するだけです。
私は上記①のスクリプトを毎朝7~8時くらいに起動するように設定しました。
#最後に
タスク管理は運用ルールを決めて実施しないと意味がなく、手動だと忘れてしまうことがあるので、自動化できるものは手作業から無くしてしまいましょう!
#参考リンク
- TrelloのカードをGASから自動でアーカイブする。
- 初心者向け実務で使えるGoogle Apps Script完全マニュアル
- 日付&時刻の便利ライブラリ「Moment.js」をGoogle Apps Scriptで使う方法
- GASを使ってTrelloのボードID・リストID・カードIDを取得する方法
- GAS版Moment.jsライブラリで超簡単に日時の比較をする方法
- 時限式のイベントトリガーを設置して決まった時刻にBotを送信する方法
- GASでログ出力する2つの方法(Logger.logとconsole.log)の紹介と使い分け