「スプレッドシートを開いた人のリストが欲しい」
そんなことを思ったことはありませんか?
変更の履歴は記録されていますが、閲覧の履歴はありません。
今回は、そんなときに便利なスプレッドシートを開いた人の記録を取る方法をご紹介します。
スプレッドシートを開いたときに実行される関数
スプレッドシートを開いたときに関数を起動し、ユーザのアカウントとアクセス時点での日時の記録を取ります。
onOpen関数(Simple Triggers)を使う
onOpen関数を使って関数を実行する方法です。
関数onOpenという名前にすると、スプレッドシートが開いたときに関数が実行されます。
function onOpen(event) {
const spreadSheet = SpreadsheetApp.getActiveSpreadsheet()
const sheet = spreadSheet.getSheetByName("閲覧ログ")
sheet.appendRow([new Date(), event.user])
}
プログラム自体は開いているスプレッドシートを取得して、日付とユーザアカウント(メールアドレス)をログ用のシートに書き込んでいます。
onOpen以外にもイベント時に実行される特別な関数名が存在します。
詳しくは公式ドキュメントを参照してください。
https://developers.google.com/apps-script/guides/triggers
イベントオブジェクト
onOpen関数の引数にeventが渡されています。
このeventには以下のような情報が格納されています。
今回はその中からuserオブジェクト(メールアドレス)の情報を使っています。
変数名 | 説明 |
---|---|
authMode | 今回は LIMITED が必ず格納されます。 onOpenなどSimple Triggersを使った場合を意味する。 |
source | Spreadsheetが必ず格納されます。 イベントの発行元を表します。 |
triggerUid | このイベントを一意に特定するID。 |
user | スプレッドシートを開いたユーザ情報。 メールアドレスだけが格納される。 |
今回はonOpen関数のeventを説明しましたが、ほかのイベントに対応したeventオブジェクトは公式ドキュメントを参照してください。
https://developers.google.com/apps-script/guides/triggers/events
注意:監査ログとしては使えません
この閲覧ログですが、いわゆる監査ログとしては利用は推奨されません。
あくまで参考程度の記録として利用してください。
編集権限を持つユーザしか記録されない
onOpen関数が実行されるのは、スプレッドシートを開いたユーザが編集権限をもつ場合のみです。
閲覧権限を持つ場合はonOpen関数が実行されず、閲覧ログが書き込まれません。
スプレッドシートを開かない方法には対応できない
閲覧ログを記録する目的は、スプレッドシートの中のデータを見た人を記録するということだと思います。
スプレッドシートを開かずにデータを取得する方法、例えばGASでデータを読み出す、別のツールを使ってデータにアクセスするなどの場合もonOpen関数は実行されず、閲覧ログが書き込まれません。
まとめ
今回はスプレッドシートを開いた人の記録を取る方法をご紹介しました。
気軽に使える方法ですが、監査ログなどの本格的な用途としては向きません。
事前に用途を確認してから、適材適所でご利用いただければと思います。