LoginSignup
68
60

More than 5 years have passed since last update.

毎週のお掃除当番をSlackへランダムで通知する

Last updated at Posted at 2015-09-09

前提

  • 毎週のゴミ捨て担当をランダムで可愛く自動通知してくれるBOTがほしい!
  • GAS x Slackでかんたん実装
  • いつもながらSlackApp神

今回のアウトプット

  • 毎週決まった日付・時間帯に、
  • 下記のようなGoogleSpreadSheetからNameとFaceをrandomで抽出し、 image
  • Slackへ以下のような通知を送る image

事前準備

  • こんなシートを作っておく image

GASコード

全貌

GoogleAppsScript
// 定義文
var slack = {
  postUrl: 'https://slack.com/api/chat.postMessage',
  token: '(A)', // Slackのtoken
  ChannelId: "(B)", // Slackの投稿するCHannelID
  userName: "今週のゴミ捨て当番だドン!", // botの名前
}

//シートの値を先にがさっと全取得する
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
var lastrow = sheet.getLastRow();
var lastcol = sheet.getLastColumn();
var sheetdata = sheet.getSheetValues(1, 1, lastrow, lastcol);//がさっと取得

//NameとFaceをランダムで取得して、Slackへ送る
function OSOJIKUN() {
  var row = Math.floor(Math.random() * 5) + 2;
  Logger.log(row);
  var Name = sheetdata[row][0];  
  var row2 = Math.floor(Math.random() * 5) + 2;//NameのrowをRandomで取得
  var Face = sheetdata[row2][1];
  var slackApp = SlackApp.create(slack["token"]);//FaceのrowをRandomで取得
  var Message = slackApp.postMessage(slack["ChannelId"], "```" + "今週のゴミ捨て当番は…" + Name + "!頼んだドン!" + Face + "```", {username : slack["userName"]});
  Logger.log(Message);
}

要素解説

定義文

  • こちらの記事などとほぼ同じなので割愛します。SlackAppの使い方は一度覚えると非常に汎用性が高いのでオススメです。

シートの値を先にがさっと全取得する

GoogleAppsScript
//シートの値を先にがさっと全取得する
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
var lastrow = sheet.getLastRow();
var lastcol = sheet.getLastColumn();
var sheetdata = sheet.getSheetValues(1, 1, lastrow, lastcol);//がさっと取得
  • getSheetValuesを使用し、まずはシート全体の値を全て取得してしまいます。この利点は2つ。
    1. いちいちgetRangeでセル指定して 、getValueで取得して…という処理を行うと、都度APIに負荷がかかり処理が重くなる。それを避ける事ができる。
    2. 要素を増減した場合でも、選択範囲を変更する必要がない(これはgetlastRowgetLastColumnで範囲指定しているからですね)

NameとFaceをランダムで取得して、Slackへ送る

GoogleAppsScript
//NameとFaceをランダムで取得して、Slackへ送る
function OSOJIKUN() {
  var row = Math.floor(Math.random() * 5) + 2;
  Logger.log(row);
  var Name = sheetdata[row][0];  
  var row2 = Math.floor(Math.random() * 5) + 2;//NameのrowをRandomで取得
  var Face = sheetdata[row2][1];
  var slackApp = SlackApp.create(slack["token"]);//FaceのrowをRandomで取得
  var Message = slackApp.postMessage(slack["ChannelId"], "```" + "今週のゴミ捨て当番は…" + Name + "!頼んだドン!" + Face + "```", {username : slack["userName"]});
  Logger.log(Message);
}

  • rowをランダムで取得する際にMath.randomメソッドを使います。*xを記載した場合、0~xまでの整数を取得してくれます。
  • 今回はrow = 2 ~ 7の範囲で取得したかったため、上記のような記載となっていますが、より動的な記述に変更可能ですね。

トリガー

  • 後は上記のscriptを走らせたい周期でトリガーを設定しましょう。タイトルに毎週と書きましたが、うちでは毎週月、木の朝9:00~10:00の時間帯に走らせています。 image

コメント

  • オフィス内での定期的な連絡業務などは自社でどんどんSlack x GASで自動処理しています。
  • このTips自体よりはこういった組織運営の小さなところへも使える技術を適用していく組織文化を大事にしていきたいなと思う次第。
68
60
2

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
68
60