shojiです。
今回は、Google Apps Script(GAS)を使い、BoardというバックオフィスツールとSlackを連携して、月末に請求情報をSlack通知する仕組みを作ってみたので、その実装方法をブログにしてみます。今回は第2回(全2回)の実装編です。
実装内容
前回、準備作業が完了したので、今回はGoogle Apps Scriptのプログラムコードを書いていきます。
ファイルの構成とそれぞれの処理内容は次のようにします。
- Board.gs(Boardクラス)
- Board APIを実行し、パラメータで指定された期間に請求日が含まれる全ての請求情報を取得する。
- Board APIは1回で100件の取得上限があるため、100件以上データがある場合はループで何度も取得する。
- 取得したデータから、Slackへ投稿するために必要なデータのみをオブジェクトに格納して配列で返す。
- Slack.gs(Slackクラス)
- 請求データを整形し、SlackのエンドポイントへPOSTデータとして送信する。
- Utility.gs(Utilityクラス)
- 現在日付から月初(文字列)を返す関数。
- 現在日付から月末(文字列)を返す関数。
- 現在日付からその月の最終の平日を返す関数(ただし土日対応のみ。祝日対応はしない。)
- Main.gs(メイン処理)
- 今日が実行対象日(月の最後の平日)ではなかったら、何もせず終了する。
- 今日が実行対象日だったら、Boardから請求情報を取得してSlackへ送信する。
- この関数をトリガーで毎日指定時間に実行させる。
では早速それぞれのソースコードファイルを書いていきます。
Boardクラス
Google Apps Scriptの「ファイルを追加」ボタン(+)から、「スクリプト」を選択して、名前をつけてからコードを書きていきます。
まず、BoardのAPIから請求情報を取得して返却するBoardクラスをズバっと書きます。
API仕様についてはBoard APIオンラインドキュメントを参考にしながら記述します。
Slackクラス
続いて、Slackのエンドポイントへ請求情報データを送信するためのプログラムをズババっと書きます。
Slackへ送信するデータ構造については、Slack公式のBlock Kit Builderというツールを使って作ると便利です。
定数の*WebHookURL*は第1回(準備編)でメモしておいたエンドポイントURLに置き換えてください。
Utilityクラス
日付処理を行う便利メソッドを書きます。
今回作成するのは、次の3つの関数です。
- パラメータのdateオブジェクトから、その月の月初の日付(YYYY-MM-DD)文字列を返す関数
- パラメータのdateオブジェクトから、その月の月末の日付(YYYY-MM-DD)文字列を返す関数
- パラメータのdateオブジェクトから、その月の最後の平日のdateオブジェクトを返す関数
それぞれ実装していきます。
メイン処理
最後にメイン処理のプログラムを書きます。
実行対象日(月の最後の平日)であればSlack通知を行い、そうでなければログ出力のみを行います。
テスト実行
ここまで作成したら、ちゃんと動くかテストします。
Google Apps Scriptでメイン処理のmyFunction関数を実行します。
実行した日が月の最終の平日であれば、Incoming Webhookの設定で指定したSlackチャンネルへ、当月が請求日の請求情報が投稿されるはずです。
トリガーの設定
最後に、図1のように毎日午前10-11時に定期実行されるように、トリガーを設定します。
トリガーで月の最終の平日に実行!・・・と指定できればよいのですが、そういう設定はできないため、毎日10-11時に実行するようにトリガーを設定し、プログラム側で平日かどうか判定することで実現しています。
まとめ
以上で、実行編は終了となります。
Boardに限らず、データを取得できるサービスであれば同様の仕組みは作れると思いますので、ぜひこの記事を参考にオリジナルのSlack Botを作ってみてください。
それでは!