iq29 diary

EG.LAB 開発日記

毎日その日のタスクを自動通知する Slack bot 作った話

毎日その日のタスクを自動通知する Slack bot 作った話

経緯

つまり

スプレッドシート
1. 工数管理 (自動計算)
2. 工数管理の情報を元に1ヶ月のスケジュールを組む
3. Slack で毎日その日のタスク通知してくれたら便利やん!
と思った (月並)

スプレッドシート作成

  • 工数管理シート
    タスクの工数を自動計算してくれるシート f:id:loney1986:20180408114309p:plain

  • スケジュールシート
    1ヶ月のタスクを登録しておくシート f:id:loney1986:20180408114142p:plain

  • Slack シート
    f:id:loney1986:20180408114331p:plain Slack で通知して欲しい情報はこのシートで全て管理している
    TODAY() で日付オブジェクトを作り、
    MATCH() でスケジュールシートの日付とマッチした行番号取得
    その行番号に欲しい情報が全てあるので、列名と組み合わせて文字列のセル番号を作成
    indirect() で文字列セル番号をオブジェクト化して、値を参照できるようにしている

GoogleAppScript (GAS)

ただの JavaScript だった

function myFunction() {
  // spread sheet 取得
  var sheet    = SpreadsheetApp.openById('13RzmCmRRsYc4N2MU9xwJoRVhDQLjqNwkrhj5dc8YUVU');
  
  // 拾うシートの名前
  var sheetName = 'slack';
  
  // 日付
  var today = sheet.getSheetByName(sheetName).getRange(1,1).getValue();
  
  // 曜日
  var week = sheet.getSheetByName(sheetName).getRange(1,2).getValue();
  
  // タスク名
  var task = sheet.getSheetByName(sheetName).getRange(1,3).getValue();
  
  // 大目標
  var big = sheet.getSheetByName(sheetName).getRange(1,4).getValue();
  
  // 中目標
  var medium = sheet.getSheetByName(sheetName).getRange(1,5).getValue();
  
  // 小目標
  var small = sheet.getSheetByName(sheetName).getRange(1,6).getValue();
  
  // タスク進捗率
  var percent = sheet.getSheetByName(sheetName).getRange(1,7).getValue() * 100;
  

  var sentence = 
    "-- *きょうのいけだの衝動* --\n" +
    "*" + task + "* [ *" + percent + " %* ] " + "\n" +
    "\n" + 
    ":yavai: 大目標 `" + big + "` \n" +
    "\n" + 
    ":yavai: 中目標 `" + medium + "` \n" +
    "\n" + 
    ":yavai: 小目標 `" + small + "` \n" +
    "https://drive.google.com/open?id=13RzmCmRRsYc4N2MU9xwJoRVhDQLjqNwkrhj5dc8YUVU";
  
  var payload  = {
    'text'      : sentence,
    'channel'   : 'stand_up'  ,  // 投稿するチャンネル
  };
  
  var options = {
    'method'      : 'post'                 ,
    'contentType' : 'application/json'     ,
    'payload'     : JSON.stringify(payload),
  };
  
  var url = '(Slack incoming WebhookでコピーしたURL)';
  
  UrlFetchApp.fetch(url, options);
}

完成

まりこ様 bot が決まった時間に通知してくれるようになりました f:id:loney1986:20180408115201p:plain

参考

www.tam-tam.co.jp

tech.camph.net

www.minemura-coffee.com


Slack 設定画面が変わり続けているので、色々と昔と違うところがありました
今回使ったトークンの種類は Webhooks です
共有リンクはオンにしておかないと届かないみたいです
覚えたばかりの工数でいうと1人日かかりました