概要
以下の各記事を参考にGASを触ってみたのでそのまとめです
- GoogleAppsScriptで特定のDriveフォルダにあるファイル更新情報をSlackで通知する
- SlackのWebhook URL取得手順
- 【JavaScript】日付処理
- Google Apps Script で Spreadsheet にアクセスする方法まとめ
- Google Apps Scriptの初回実行に必要となる承認手順
- Google Apps Script で毎日決まった時刻にスクリプトを実行するトリガー設定
- 日付を加算または減算する
作るもの
今回は、Spreadsheetに設定情報を管理して、その情報をもとに特定のGoogleDriveのフォルダ内に入っている全ファイルの更新履歴を見て、設定情報に指定されている日付よりも古い場合は、Slackに通知する、というものをGASでサクッと作ってみようと思います。
準備
GASはアプリの追加からスタート
そうすると右メニューからGASが現れるようになる
ここで試しに公式の最初に紹介されているサンプルコードを試してみることに
そうするとこんなポップアップが出てくるのでGASとアカウントを紐づけていく
そうすると警告が出てくるので詳細から無題のプロジェクト(安全ではないページ)に移動を選択
もし心配である人は今回作ったGASのプロジェクトを公開するなり正式な情報を設定するなりすると警告は無くなると思います
今回は特にちゃんとした目的はないのでこのまま進めていきます
次はGASと紐づけたアカウントで扱うGドライブとの連携
そして関数を指定して実行(▶️)する
Gドライブ全件のファイル名を取得するためファイル数に応じて実行時間が変わります
Logger.log
関数はメニューからログを指定するとその詳細が表示されます
これで一通りの仕組みが分かったので早速作っていきましょー!
Slackへ通知
まずは通知先のSlackの設定です
Incoming Webhooks を通知先Slackで追加設定していきます
WebhookするURLが発行されてこれを使用します
一番下にスクロールして設定を保存するをクリックして設定内容を確定させる
セットアップ手順から例に記載されているcurlリクエストをコピーして試しにIncoming Webhooksだけで通知を確認
これだけでもテンション上がりますよねw
早速GASと連携させましょう
ですがここまでは参考にさせてもらった記事で紹介されているので詳細は省いてハマりどころを解説します
sendToSlack
関数のdataと引数のchannelに設定する内容を間違えないようにさっき使ったcurlリクエストをコメントアウトでメソッド上部に入れて調整作業すると良いです
実行すると次は外部サービスとの連携で認可リクエストのポップアップが表示されるので承諾するとSlackに通知がくるようになります
さて、これでできたようにみえますが、このままで運用するとメンテナンスコストが高いのでせめて、Spreadsheetで設定関連を管理できる仕組みにしたいですね。
Spreadsheetの設定情報を取得
まずはざっくり公式を見ておきましょう
まず特定のスプレッドシートの取得方法はいくつかあり
-
DriveApp.searchFilesを用いるなどして取得する
open
関数 - URLの中にハッシュ化されている文字列を引数に渡して取得する
openById
関数 - 共有リンクを引数に渡して取得する
openByUrl
関数
などがありますが今回はopenById
関数またはopenByUrl
関数で進めていきます
あまり管理方法に凝ってもしょうがないので今回は公式のサンプルコードをそのまま使いましょう
日付指定について
仮にファイル更新が1ヶ月よりの前のものを検知したいとします
参考にさせてもらった記事ではnew Date()
で現在時刻を取得して計算してますが汎用性が下がります
そのためSpreadsheetで日付を制御するようにすれば簡単に調整できるので以下のようにExcelの関数を上手く扱いましょう
成果物
完成系はこのようになりました。
Spreadsheetのリンクだけはハードコーディングになってますが、気になる方はopen
関数を扱うようにして上手いように調整してください。
ここで注目すべきポイントは、Spreadsheetから取得した日付情報がGASのDate
クラスとして扱えます。
そのため、特にパースやシリアライズなどの作業すること無く、そのまま日付の計算処理ができたのでGASの魅力に圧倒されましたw
.gs
ファイル
gistにrequest_update_file.gsをアップしました。
定期的に通知する設定
GASの編集
から現在のプロジェクトのトリガーを選択
トリガーを追加から今回作ったGASを定期的に実行させるトリガーを作る
例えば日付が変わった瞬間に処理させたい場合
特定の時間に指定したい場合や動作確認で数分後にトリガーさせたい場合など
保存するとリストに表示されるため設定した日時になると処理される
さいごに
個人的な感想『扱い方が分かるとGAS楽しいぞ!!』