LoginSignup
3
5

More than 3 years have passed since last update.

GAS 入門(Spreadsheet → GoogleDrive → Slack)

Last updated at Posted at 2019-06-22

概要

以下の各記事を参考にGASを触ってみたのでそのまとめです

作るもの

今回は、Spreadsheetに設定情報を管理して、その情報をもとに特定のGoogleDriveのフォルダ内に入っている全ファイルの更新履歴を見て、設定情報に指定されている日付よりも古い場合は、Slackに通知する、というものをGASでサクッと作ってみようと思います。

準備

GASはアプリの追加からスタート
スクリーンショット 2019-06-21 17.21.27.png
そうすると右メニューからGASが現れるようになる
スクリーンショット 2019-06-21 17.22.16.png
ここで試しに公式の最初に紹介されているサンプルコードを試してみることに
スクリーンショット 2019-06-22 13.37.05.png
スクリーンショット 2019-06-21 17.25.25.png
そうするとこんなポップアップが出てくるのでGASとアカウントを紐づけていく


そうすると警告が出てくるので詳細から無題のプロジェクト(安全ではないページ)に移動を選択
もし心配である人は今回作ったGASのプロジェクトを公開するなり正式な情報を設定するなりすると警告は無くなると思います
今回は特にちゃんとした目的はないのでこのまま進めていきます

次はGASと紐づけたアカウントで扱うGドライブとの連携

そして関数を指定して実行(▶️)する
Gドライブ全件のファイル名を取得するためファイル数に応じて実行時間が変わります
Logger.log関数はメニューからログを指定するとその詳細が表示されます
スクリーンショット 2019-06-22 13.50.32.png
スクリーンショット 2019-06-22 13.51.10.png

これで一通りの仕組みが分かったので早速作っていきましょー!

Slackへ通知

まずは通知先のSlackの設定です
Incoming Webhooks を通知先Slackで追加設定していきます
スクリーンショット 2019-06-21 17.59.14.png
WebhookするURLが発行されてこれを使用します
スクリーンショット 2019-06-21 17.59.26.png
一番下にスクロールして設定を保存するをクリックして設定内容を確定させる
スクリーンショット 2019-06-21 18.07.55.png
セットアップ手順から例に記載されているcurlリクエストをコピーして試しにIncoming Webhooksだけで通知を確認
スクリーンショット 2019-06-21 18.10.01.png
スクリーンショット 2019-06-21 18.10.07.png
これだけでもテンション上がりますよねw
スクリーンショット 2019-06-21 18.11.20.png
早速GASと連携させましょう
ですがここまでは参考にさせてもらった記事で紹介されているので詳細は省いてハマりどころを解説します
sendToSlack関数のdataと引数のchannelに設定する内容を間違えないようにさっき使ったcurlリクエストをコメントアウトでメソッド上部に入れて調整作業すると良いです
スクリーンショット 2019-06-21 18.14.06.png
実行すると次は外部サービスとの連携で認可リクエストのポップアップが表示されるので承諾するとSlackに通知がくるようになります
スクリーンショット 2019-06-21 18.06.50.png
スクリーンショット 2019-06-21 18.14.33.png

さて、これでできたようにみえますが、このままで運用するとメンテナンスコストが高いのでせめて、Spreadsheetで設定関連を管理できる仕組みにしたいですね。

Spreadsheetの設定情報を取得

まずはざっくり公式を見ておきましょう
まず特定のスプレッドシートの取得方法はいくつかあり

  • DriveApp.searchFilesを用いるなどして取得するopen関数
  • URLの中にハッシュ化されている文字列を引数に渡して取得するopenById関数
  • 共有リンクを引数に渡して取得するopenByUrl関数

などがありますが今回はopenById関数またはopenByUrl関数で進めていきます
スクリーンショット 2019-06-22 14.38.12.png
あまり管理方法に凝ってもしょうがないので今回は公式のサンプルコードをそのまま使いましょう
スクリーンショット 2019-06-22 14.35.02.png

日付指定について

仮にファイル更新が1ヶ月よりの前のものを検知したいとします
参考にさせてもらった記事ではnew Date()で現在時刻を取得して計算してますが汎用性が下がります
そのためSpreadsheetで日付を制御するようにすれば簡単に調整できるので以下のようにExcelの関数を上手く扱いましょう
スクリーンショット 2019-06-21 19.01.47.png
スクリーンショット 2019-06-21 19.01.40.png

成果物

完成系はこのようになりました。
Spreadsheetのリンクだけはハードコーディングになってますが、気になる方はopen関数を扱うようにして上手いように調整してください。
ここで注目すべきポイントは、Spreadsheetから取得した日付情報がGASのDateクラスとして扱えます。
そのため、特にパースやシリアライズなどの作業すること無く、そのまま日付の計算処理ができたのでGASの魅力に圧倒されましたw
スクリーンショット 2019-06-21 19.25.48.png
スクリーンショット 2019-06-21 19.26.11.png
スクリーンショット 2019-06-21 19.26.21.png

.gsファイル

gistにrequest_update_file.gsをアップしました。

定期的に通知する設定

GASの編集から現在のプロジェクトのトリガーを選択
スクリーンショット 2019-06-22 13.59.19.png
トリガーを追加から今回作ったGASを定期的に実行させるトリガーを作る
スクリーンショット 2019-06-22 13.59.49.png
例えば日付が変わった瞬間に処理させたい場合
スクリーンショット 2019-06-22 14.00.33.png
特定の時間に指定したい場合や動作確認で数分後にトリガーさせたい場合など
スクリーンショット 2019-06-22 14.01.41.png
保存するとリストに表示されるため設定した日時になると処理される
スクリーンショット 2019-06-22 14.02.16.png

さいごに

個人的な感想『扱い方が分かるとGAS楽しいぞ!!』

 

3
5
0

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
3
5