LoginSignup
4
6

More than 3 years have passed since last update.

Trelloの完了したタスクをGASで自動アーカイブする

Last updated at Posted at 2020-03-17

はじめに

仕事のタスク整理にTrelloを使いますが、完了したタスクを手動でアーカイブすると判断に迷ったり、手間を感じることがあるので、完了してから一定期間経過したものをGoogleAppsScript(GAS)で自動アーカイブするようにしました。

準備

TrelloのAPIをGASで使用するにはAPIキーやトークンの取得が必要になります。
方法はこちらの記事を参考にしてください。

処理の流れ

  1. 完了のリストにあるカードを取得する
  2. 取得したカードの最終更新日が7日経過していれば、アーカイブする
  3. アーカイブしたカードの情報をスプレッドシートに出力(追記)する

コード

①カードの取得とアーカイブ対象の選定

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時くらいに起動するように設定しました。

最後に

タスク管理は運用ルールを決めて実施しないと意味がなく、手動だと忘れてしまうことがあるので、自動化できるものは手作業から無くしてしまいましょう!

参考リンク

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6