【物忘れ防止】チャットワークのタスクをリマインドしてもらう。①
はじめに
こんにちは。とうとうブログの更新が長らく滞ってしまいました。
前回の更新の最後に書いた通り、かなり苦しいジョブローテーションで、自分を追い込みすぎた結果完全にブログどころでは無くなっていました。
ただ、その話はまた別の記事で語ることにして、今回はまた別の話です。
ICカードについてのお話を以前までしていましたが、なかなかカードリーダとの相性が良くなく開発の進捗がまったく出ません。
ただ、つい先日「チャットワークのタスクをリマインドしてほしい」という要望が同期から上がりました。
「それなら出来るし、みんなに使ってもらえるのでは?」と考えてこちらのタスクに取り掛かっているという状態ですね。実際、ICカードに関してはかけた時間に対してリターンが自分にしか返ってこないことが悔しかったので・・・。
ひとまずICカードリーダとは距離を置き、仲良くなれたらまた記事にしようと思います。グッバイカードリーダ。また会う日まで。
要件
ゴールは「チャットワークのタスクをリマインドしてくれる」ということですね。
この目標を、今回こんな感じで達成しようと思います。
- チャットワークからタスクを取ってくる
- 期限の種類によってリマインド処理を変える
- 時間期限なら「15分前・期限時間」
- 日付期限なら「業務開始5分後・業務終了1時間前」
- 期限切れ/期限なし はリマインドなし
- リマインド処理はチャットワークのToメッセージ
- マイチャット/自分専用リマインドスペース
こんなもんでしょうか。時間はかなり適当です。
というか、最近(2019年5月入ってから?)のアップデートでチャットワークのタスク期限に「時間」が設定できるようになったんですよね。
なのでおそらく、時間の期限について着目して記事にしているのは僕が最初です。すごいでしょう。
で、これを実装するにはGASというGoogleが提供しているスクリプトを使用します。何がいいかと言えば「自前サーバーがなくても勝手に動き続けてくれる」っていうところですね。あとはスプレッドシートとの相性がいいので、大量のデータを処理するのに向いてます。
セキュリティもお金も気にせず気軽に電子工作できるのでほんと最高です。エディターの機能性の低さを除けば、ですが。
開発
そして、ひとまず作れるところまで作ってみました。
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var taskIDColumn = 3 - 1;
var taskLimitTypeColumn = 4 - 1;
var taskLimitColumn = 5 - 1;
var taskListSheet = spreadsheet.getSheetByName("タスク一覧");
var allTasks = taskListSheet.getRange(2,1,taskListSheet.getLastRow() - 1,taskListSheet.getLastColumn()).getValues();
var reminderSetSheet = spreadsheet.getSheetByName("リマインド管理");
var remindTasks = reminderSetSheet.getRange(2,1,reminderSetSheet.getLastRow() - 1,reminderSetSheet.getLastColumn()).getValues();
function getTasks(){
var params = {
headers : {"X-ChatWorkToken" : ChatWorkToken},
method : "get"
};
var url = "https://api.chatwork.com/v2/my/tasks?status=open";
var strRespons = UrlFetchApp.fetch(url, params);
if(strRespons == "") return false;
var json = JSON.parse(strRespons.getContentText());
var tasks = [];
for each (var res in json){
tasks.push([res.task_id,res.limit_type,res.limit_time,res.body]);
}
var taskListSheet = spreadsheet.getSheetByName("タスク一覧");
taskListSheet.getRange(2,1,tasks.length,tasks[0].length).setValues(tasks);
}
ひとまず、タスクを取ってくることまでは完了しました。
ここまでの処理は実際多くの先駆者の方が実装しており、その方々のコードを真似て書いたようなものです。なので、自分の力というわけでもありませんが・・・
とは言え、完成まで待ってると投稿がかなり先になりそうなので、完璧主義の自分を戒めることもかねてこのタイミングで投稿しておきます。
実際はもうちょっと開発が進んでいるので、あるべき関数はガリガリ作って早く完成まで持っていきたいですね。完成度としては全体の8割程度は完成してます。
ここまで明確に「誰かのために物作りをする」という経験、なかなかないので正直どれくらい使えるかも未知ですし、かなり不安です。
ただ、きっと多くの方からフィードバックいただけると思うのでこの件に関しては必ず完成まで走りきります。
期待して待っていただけると幸いです。
11