【GAS】スプレッドシートに記載したタスクを毎日チャットワークに自動で追加する


daily

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

Google Apps Scriptでチャットワークに自動でタスクを追加するシステムを作成しています。

前回は、チャットワークに期限をつけてタスクを追加する方法についてお伝えしました。

Google Apps Scriptでチャットワークに期限付きのタスクを追加する
Google Apps ScriptでチャットワークAPIを操作してチャットワークに期限付きのタスクを追加する方法です。その際に使うUNIX時間の取得方法、数値の固定小数点表記の方法についても触れます。

これでタスク追加に関する基本的な使い方はバッチリ抑えられたかと思います。

さて、お仕事の中で毎日や毎週、毎月など定期的に発生するタスクがありますよね。

これらを自動的にチャットワークにタスク追加をしていきたいというとき、どのように実現したらよいでしょうか。

Google Apps Scriptでそれぞれのタスクについてスクリプトを組んでいっても良いですが、例えばスプレッドシートに自動追加するタスクを登録しておいて、その通りにタスクを追加してくれたら楽ちんですよね。

今回から何回かに分けて、Google Apps Scriptを使ってチャットワークに自動追加するタスクをスプレッドシートでコントロールするシステムを開発していきたいと思います。

初回はスプレッドシートにリストされているタスクについて毎日自動でチャットワークでもタスク追加する方法です。

では、行ってみましょう!

スポンサーリンク

スプレッドシートで毎日のタスクリストを作成する

このようなスプレッドシートを作成しました。

スプレッドシートに記載した毎日のタスクリスト

毎日発生するタスクを記載しています。

今は二つしかありませんが…そのうち盛り上がりますので。

ルームIDはタスクを追加するグループチャットのルームID、アカウントIDはタスクを追加する担当者のアカウントID(複数いる場合はカンマ区切り)です。

このリストにあるタスクを毎朝(例えば7~8時など)に、指定のグループチャットにタスク追加するというスクリプトを考えていきます。

チャットワークにタスク追加をする関数

各行についてタスク追加をすることになりますので、チャットワークにタスク追加をするルーチンを関数化しておきたいと思います。

チャットワークAPIの仕様を確認すると

POST /rooms/{room_id}/tasks
チャットに新しいタスクを追加

body(必須):タスクの内容
limit:タスクの期限(※Unix timeで入力してください)
to_ids(必須):担当者のアカウントID(※担当者のアカウントIDをカンマ区切りで)

となっています。

HTTPメソッドはPOSTですね。この時点で関数として渡す引数はroom_id,body,limit,to_idsとなります。

リクエストURLは

https://api.chatwork.com/v2/rooms/{room_id}/tasks

です。

またチャットワークAPI共通でHTTPヘッダに “X-ChatWorkToken”というパラメータ名でAPIトークンを渡す必要がありました。

ちょっと引数が多いですが、関数addTaskを

addTask(APIトークン,ルームID,タスク内容,タスク期限,アカウントID)

といった感じで作ってみます。

チャットワークにタスクを追加するaddTask関数

関数addTaskのコードはこちらです。

function addTask(token,room_id,body,limit,to_ids){
  var params = {
    headers : {"X-ChatWorkToken" : token}, //APIトークン
    method : "post",
    payload : {
      body : body, //タスク内容
      limit : limit, //タスク期限
      to_ids : to_ids //アカウントID
    }
  };
  var url = "https://api.chatwork.com/v2/rooms/" + room_id + "/tasks";
  UrlFetchApp.fetch(url, params); //チャットワークAPIにリクエスト
}

詳細は前回のこの記事や

Google Apps Scriptでチャットワークに期限付きのタスクを追加する
Google Apps ScriptでチャットワークAPIを操作してチャットワークに期限付きのタスクを追加する方法です。その際に使うUNIX時間の取得方法、数値の固定小数点表記の方法についても触れます。

チャットワークにメッセージの送受信をする関数の作り方について解説したこちらの記事をご覧ください。

【GAS】チャットワークのメッセージを取り出す関数とメッセージを送る関数
Google Apps Scriptを活用してチャットワークにおみくじチャットを作成しています。今回はチャットワークからメッセージを取り出す、メッセージを送る処理を関数化して全体のコードをスッキリさせます。

スプレッドシートにリストした毎日のタスクをチャットワークに自動追加する

ではこの関数addTaskを使って、前述のスプレッドシートにリストされた毎日のタスクをチャットワーウに自動追加するスクリプトを作っていきます。

プログラムの流れとしては

  • シート自体と最終行数、データの取得をする
  • 本日の日付をUNIX時間で取得し、固定小数点表記に変更
  • 全てのタスクについて
    • D列の頻度が”毎日”であれば
      • タスク内容、ルームID、アカウントID、期限を本日としてタスク追加

という流れとなります。

スクリプトとしてはこちらになります。

function addRegularTasks() {

  var mySheet=SpreadsheetApp.getActiveSheet();
  var maxRow=mySheet.getDataRange().getLastRow();
  var myVars=mySheet.getDataRange().getValues();

  var token = 'APIトークン'; //チャットワークAPIトークン

  var date = new Date();
  var limit = date.getTime()/1000;
  limit = limit.toFixed();

  for(var i=2;i<=maxRow;i++){
    if(myVars[i-1][4-1]="毎日"){
      var body = myVars[i-1][1-1];  //タスク内容
      var room_id = myVars[i-1][2-1];  //ルームID
      var to_ids = myVars[i-1][3-1];  //アカウントID
      addTask(token,room_id,body,limit,to_ids);
    }
  }
}

getValuesを使ってデータ範囲をまとめて配列に格納

5行目ですがgetValuesでシート上のデータ範囲を二次元配列変数myVarsに格納しています。

このスクリプト自体はイベントトリガーを使って完全自動で動作するので、実行速度はあまり気にしなくても良いのかも知れませんが、二次元配列に慣れておいたほうが良いということで、このようにしています。

詳しくはこちらの記事もご覧下さい。

Google Apps Scriptのスプレッドシート読み書きを格段に高速化をする方法
Google Apps Scriptでスプレッドシートの操作をしていて実行速度が遅い!と感じたことがあると思います。今回はスプレッドシートを操作する場合に処理速度を格段に速くする方法をお伝えします。

本日の日付をUNIX時間で取得し固定小数点表記に

9行目~11行目はタスクの期限を求める箇所です。

今回は当日のタスクしかありませんので、本日の日付をそのまま指定しています。

UNIX時間や固定小数点表記についての詳細はこちらの記事をご覧ください。

Google Apps Scriptでチャットワークに期限付きのタスクを追加する
Google Apps ScriptでチャットワークAPIを操作してチャットワークに期限付きのタスクを追加する方法です。その際に使うUNIX時間の取得方法、数値の固定小数点表記の方法についても触れます。

二次元配列からaddTaskの引数を取り出す

15行目~17行目でそれぞれタスク内容、ルームID、アカウントIDを二次元配列から取り出しています。

配列番号は1からではなくて0から始まりますので、指定の際は実際の行番号や列番号をマイナス1した数字になりますので、注意してくださいね。

実行結果

このスクリプトを実行すると

GASによる毎日の自動タスク追加結果

このように無事にタスクが追加されます。

スクリプトエディタのメニューから「リソース」→「現在のプロジェクトのトリガー」から、イベントトリガーを「時間主導型」→「日タイマー」→「午前7時~8時」などとすれば、毎日自動でタスクが追加されます。

まとめ

スプレッドシートにリストされているタスクについて毎日自動でチャットワークでもタスク追加する方法をお伝えしました。

当然、定期のタスクは毎週だったり、毎月だったりに追加したかったりします。

次回以降、スプレッドシートに色々なパターンで自動登録用のタスクをリストできるように改良をしていきたいと思います。

まずはスプレッドシートの日付関連の関数を整理していきますよ。

GoogleスプレッドシートとExcelで使える日付関連の関数まとめ
Googleスプレッドシートやエクセルで日付に関する処理をする場合も多いですよね。今回は、今日の日付、何か月後の日付、月末日をはじめ両方で全く同じく使える日付関連の関数を一通り紹介したいと思います。

どうぞお楽しみに!

連載目次:GASでチャットワークに自動でタスク追加をする

タスク管理は重要なのですが、タスクを立てること自体を忘れてしまったりませんか?このシリーズではスプレッドシートとチャットワークを使って定期的なタスクを自動で追加する方法についてお伝えしています。
  1. Google Apps Scriptでチャットワークにタスクを追加する最も簡単なプログラム
  2. Google Apps Scriptでチャットワークに期限付きのタスクを追加する
  3. 【GAS】スプレッドシートに記載したタスクを毎日チャットワークに自動で追加する
  4. GoogleスプレッドシートとExcelで使える日付関連の関数まとめ
  5. 【GAS】定期的に発生するタスクをチャットワークに自動でタスク追加(完全版)

タイトルとURLをコピーしました