2018-09-15
バイト先の塾ではかなり素朴な手法で名簿が作成されているので、Google App Script で自動化を目指す。(現在進行形)
以下、現在の名簿作成ワークフロー。
生徒がホームページから申し込み → 塾にメールが届く → メールの内容を名簿テンプレートに1つずつコピペ → 完成!
実際このコピペ地獄はなかなか厳しいものがある。Google Forms と Google Spreadsheets 、そして Google Apps Script の力を借りてなんとかしたい。
今回はじめてGoogle Apps Script をいじってみて、コードを書く前にあらかじめ知っておきたかったなーと思ったことをまとめてみる。
Google Apps Script(以下 GAS)とは、Googleの各種サービス(Drive, Docs, Sheets, Slides, Calendar などなど)の操作や連携ができるクラウドプラットフォームのこと。ぜんぶJavaScriptで書ける。
対応していない。
ES6で書く場合、Babelを使ってトランスパイルしておく必要がある。やり方については以下の記事が詳しい。
【GoogleAppsScript】ES6を使ったGoogle Apps Scriptの開発
ログを出力するためには console.log()
ではなく、Logger.log()
を使う。
ログを確認するには、画面上部のメニューで 表示 → ログ
の順で選択する。ショートカットはMacの場合、Command + Enter
。
追記(2018/09/23)
console.log
で出力したログは Stackdriver Logging から確認できる。画面上部のメニューで 表示 → Stackdriver Logging
からアクセス可能。
GAS には Standalone Script と Container Bound Script という2種類のスクリプトがある。
Standalone Script とは、他のサービスと紐付けられていない全てのスクリプトのことを指す。作成したスクリプトは Google Drive または Apps Script Dashboard から管理できる。
Container Bound Script とは、Google Docs・Google Spreadsheets・Google Slides・Google Formsといった G Suiteサービスに紐付けられたスクリプトのことを指す。Google Docsなどのファイルを作成し、メニューから ツール → スクリプトエディタ
と選択すれば、そのファイルに紐付けられたスクリプトが作成される。
Standalone Script と異なり、Container Bound Script のスクリプトファイルはGoogle Driveには表示されないので、管理はダッシュボードから行う必要がある。
ファイルをコピーしたとき、そのファイルに紐付けられているスクリプトはどうなるのか?
以下のような例を考えてみる。
Google Spreadsheets のファイル「テスト」を作成
メニューから ツール → スクリプトエディタ と選択し、「テスト」に紐付けた Container Bound Script を作成
「テスト」のコピーを作成
一連の手順の結果、「テスト」「テスト のコピー」という2つのファイルと、1つのContainer Bound Script が作成される。ここで重要なのは、Countainer Bound Script が2つに増えていないということ。
上記の画像のように、「テスト」と「テスト のコピー」は1つのContainer Bound Scriptを共有する。つまり、スクリプトの実体はコピーされず、参照だけコピーされるようになっている。
Simple Trigger ではイベント発生時に onOpen()
、 onEdit()
、 onInstall()
など、既存の関数が呼び出される。
Installable Trigger はイベント発生時に独自の関数を呼び出すよう指定できる。また、時間主導のトリガーを設定できる点が特徴。
用意されているトリガーはサービスごとに異なっている。利用可能なトリガーまとめは以下のリンクから。
GAS の使用量の上限はかなり寛容に設定されているので、個人で使用する場合はあまり意識する必要がない。
ただ注意すべき項目としては、「1実行あたり6分まで」という実行時間。スプレッドシートの処理は特に時間がかかるので、うっかり6分をオーバーしてしまうかもしれない。
他にも色々と上限が設定されているので、念のため確認しておいたほうが良い。
Quotas for Google Services | Apps Script | Google Developers