この記事は3年以上前に書かれた記事で内容が古い可能性があります
Google Apps Scriptを使ってタスクをSlackにポストする2(User変数などGAS側の設定からSlackに投稿するまで)
2018-11-23
Google Apps Scriptを使ってタスクをSlackにポストする1(Slack Appを作成するまで)の続き
GASでコードの貼り付けまで
まずは、Google Spread Sheetで、このようなタスクシートを作成する。内容は適当に。

「Tools」>「Script editor」をクリック。

このような画面に飛ぶので、もともと記載のあるfunctionは全て消してしまう。

そして、以下のコードを貼り付ける。
<>内の変数は適宜変更ください。
slack tokenの変数名は適当に名前をつけてください。
日付の計算が難しく、冗長になってしまった。。
var targetSheet = SpreadsheetApp.openById( '<spreadsheetのID>' ).getSheetByName( '<シート名>' ); |
var targetSheetUrl = '<spreadsheetのURL>' ; |
var dateColNo = <期限のColum番号>; |
var summaryColNo = <概要のColum番号>; |
var assigneeColNo = <担当者のColum番号>; |
var issueNoColNo = <課題番号のColumの番号>; |
var statusColNo = <ステータスのColumの番号>; |
var token = UserProperties.getProperty( '<slack tokenの変数名>' ); |
postSlack( ':speaker: `Reminder`\n\<' + targetSheetUrl + '\>' ,token); |
getListissues(targetSheet,dateColNo,getToday(),getNextweek(),summaryColNo,assigneeColNo,issueNoColNo,targetSheetUrl,statusColNo,token); |
var nextWeek = new Date(); |
nextWeek.setDate(nextWeek.getDate()+7); |
// 日付変換 (string-> date object) |
if (typeof date1 == 'string' ){ |
date1 = new Date(date1+ ' 00:00:00' ) |
function compareDate(date1,date2){ |
if (date1.getYear()-date2.getYear()==0 && date1.getMonth()-date2.getMonth()==0 && date1.getDate()-date2.getDate()==0){ //同じ日 |
} else if (date1.getYear()-date2.getYear()>0){ |
} else if (date1.getYear()-date2.getYear()<0){ |
} else if (date1.getYear()-date2.getYear()==0){ //年が一緒だった場合の比較 |
if (date1.getMonth()-date2.getMonth()>0){ |
} else if (date1.getMonth()-date2.getMonth()<0){ |
} else if (date1.getMonth()-date2.getMonth()==0){ //月が一緒だった場合の比較 |
if (date1.getDate()-date2.getDate()>0){ |
} else if (date1.getDate()-date2.getDate()<0){ |
return false ; // 上の 'same' の条件と同じ |
// 1週間以内に期限がくる課題をslackにポストする |
function getListissues(targetSheet,dateColNo,toDay,nextWeek,summaryColNo,assigneeColNo,issueNoColNo,targetSheetUrl,statusColNo,token){ |
for (var targetRowNo=1; targetRowNo<=targetSheet.getLastRow();targetRowNo++){ |
var targetDate = targetSheet.getRange(targetRowNo,dateColNo).getValue(); |
var issueNoVal = targetSheet.getRange(targetRowNo,issueNoColNo).getValue(); |
var assigneeVal = targetSheet.getRange(targetRowNo,assigneeColNo).getValue(); |
var summaryVal = targetSheet.getRange(targetRowNo,summaryColNo).getValue(); |
targetDate = toDate(targetDate); |
var targetDateFmt = Utilities.formatDate(targetDate, 'Asia/Tokyo' , 'yyyy/MM/dd' ); |
if (compareDate(targetDate,nextWeek)== 'old' && targetSheet.getRange(targetRowNo,statusColNo).getValue()== '' ){ |
var message = '*課題No.' + issueNoVal + ' ' + assigneeVal + ' ' + targetDateFmt + '*\n```' + summaryVal + '```' ; |
postSlack(message,token); |
postSlack( '直近課題なし' ,token) |
function postSlack(message,token) { |
var channel = '<slack channel ID>' ; |
var username = 'task_reminder' ; |
var icon_emoji = ':woman-tipping-hand:' ; |
'icon_emoji' : icon_emoji, |
var response = UrlFetchApp.fetch(url, params); |
slack token変数設定
貼り付けたら、先ほどのslack tokenの変数名の設定をする。
パスワード系の変数は、コードに直接書きたくないので、User変数として定義する。
「File」>「Project properties」をクリック。

変数定義する前に、project名をつけろと言われたら設定する。

「User properties」>「Add row」とクリック。

先ほど定義した変数と、tokenの値を入力して「Save」。

実行許可
実行関数「mainFunction」を選択する。

「Authorization required」と言われるので許可をする。

許可するアカウントを選んで進めていく。




実行
slackのポストするチャンネルで、作成したBotをinviteする。(「/invite 【ボット名】)



GASのページの三角マーク(▶︎)より実行する。

無事に、未完了の直近タスク(1週間後までのタスクのうち「done」が付いていないタスク)だけがslackにポストされる。

以上