Excelコース担当の松尾です。
今回は、GAS(Google Apps Script)を利用してSlack通知を自動化してみたのでどのように作業を進めたかを紹介します。
そもそもGASとは何か?を知りたい方はGASを使って自動化しようをご一読いただければと思います。
やりたいこと
毎月発生する作業を5名の中から3名担当者を決めて対応しているのですが、その作業をやらないといけないことを失念してしまうことが多く、対応が遅くなってしまうことがありました。
そこで、毎月決まったタイミングで担当者に通知が飛ぶように仕組化することで作業漏れを防ぎたいという目的でSlack通知の自動化に取り組みました。
毎月の担当者はGoogleスプレッドシートに記載されています。
今回は、毎月1日に担当者にSlackで担当者である旨をメンションするような仕組みを作ります。
取り組む順番
スプレッドシートを見た時に、大きく分けて以下2つの要素が必要だと思いました。
- 取得したいデータの列を動的に制御する。
→当月が1月ならB2セル、B3セル、B4セルのデータを取得する。
当月が2月ならC2セル、C3セル、C4セルの出たを取得する。
… - 取得したセルのデータを元にSlackに通知する。
→当月が1月なら佐藤(B2セルのデータ)、鈴木(B3セルのデータ)、高橋(B4セルのデータ)宛にSlackでメンション通知を行う。
…
正直、やりたいことが実現できるのであれば取り組む順番は何でもいいかなと思うのですが、
個人的には「簡単に取り組めそうなところから着手する」というのを大事にしています。
そういった観点で必要な要素を見比べてみると、「取得したいデータの列を動的に制御する」より「取得したセルのデータを元にSlackに通知する」方が簡単に取り組めそうです。
そこで今回は以下の順番で進めることとします。
①取得したセルのデータを元にSlackに通知する。
②取得したいデータの列を動的に制御する。
タスクの細分化
一旦「① 取得したセルのデータを元にSlackに通知する。」から取り組むことにしましたが、このままでは具体的に何をどう進めていけばいいかよくわかりません。
「① 取得したセルのデータを元にSlackに通知する。」ことを実現するために必要なことをさらに細かいレベルで書き出します。
なお、今回は決め打ちで1月の担当者のデータを取得することとします。従って以下のことが必要になります。
- B2セル、B3セル、B4セルのデータを取得する。
- B2セル、B3セル、B4セルの担当者を相手にメンションを含むメッセージを投稿する。
では早速スプレッドシートのデータを取得する方法を調べます。
Google検索にて「GAS セル」まで入力するとサジェストにいろいろな候補が出てきます。
今回はセルに入っているデータを取得したいので、「セルの値を取得」を選んでみます。
いろいろなサイトで解説されているようで、参考になりそうなサイトが複数表示されます。
ざっと見てみると、どうやらセルの値を取得するためには「どのスプレッドシートを扱うのか」も指定しなければならないことに気が付きました。
必要なことリストに追加します。
- 操作するスプレッドシートを取得する。
- B2セル、B3セル、B4セルのデータを取得する。
- B2セル、B3セル、B4セルの担当者を相手にメンションを含むメッセージを投稿する。
次にGASでSlack投稿を行う方法を調べてみます。
先ほどと同様にキーワードをいくつか入力すると関連しているキーワードを表示してくれます。
今回は「GAS Slack 連携」で調べてみます。
丁度初心者向けのサイトが見つかったのでこちらを参考にしてみます。
※個人の方が書いたサイトは情報が古く間違っている可能性も0ではありません。そのことを踏まえて参考にするようにしましょう。
プログラミング
下準備
まずはGASを使えるようにします。
スプレッドシートのメニューから「拡張機能」をクリックし、「Apps Script」をクリックします。
無題のプロジェクトが作成されました。
プロジェクト名はお好きに変えていただいて問題ありません。
実際にGASを書き始める前に、やりたいことを簡単にコメントで記載していきます。
これでGASを使う下準備は完了しました。
操作するスプレッドシートを取得する
スプレッドシートの取得方法は複数あるようですが、今回はスプレッドシートのURLで指定する方法にします。
const spreadSheet = SpreadsheetApp.openByUrl("<取得したいスプレッドシートのURL>")
また、先ほどは気づきませんでしたがシートが複数ある場合はシート名を指定する必要があります。
そこで以下の内容も追記します。
//シートを取得
const sheet = spreadSheet.getSheetByName("<シート名>");
ここまででコードは以下のようになっています。
B2セル、B3セル、B4セルのデータを取得する
セルのデータの取得方法も色々あるようですが、今回はセルの範囲で取得する方法を使ってみます。
const managers = sheetByActive.getRange("B2:B4").getValues();
一旦ここまでで取得したいデータを取得できているのか確認するために、コンソールに取得したデータを表示させてみます。
Logger.log(managers);
ここまででコードは以下のようになっています。
なお、初めて実行する場合はアクセス権限の許可が必要になりますのでそちらの操作も行います。
「このアプリはGoogleで確認されていません」の画面が表示された時は左下の「詳細」をクリックします。
その後、左下の「<Googleスプレッドシート名>(安全ではないページ)に移動」をクリックします。
Google アカウントへのアクセスをリクエストされるので、「許可」をクリックします。
スペルミスなどがなければ実行ログに以下の通り表示されます。
プログラミングに慣れていない方はなじみがないかもしれませんが、実行ログに出力されているデータを確認すると
取得したセルのデータが「2次元配列」になっていることがわかります。
次は「2次元配列」からデータを取り出す操作が必要になります。
ちょっと長くなってしまったので今回はここまで、次回は2次元配列の処理から記載します。