【GAS】スプレッドシートを開いた人の記録を取る方法

「スプレッドシートを開いた人のリストが欲しい」

そんなことを思ったことはありませんか?

変更の履歴は記録されていますが、閲覧の履歴はありません。

今回は、そんなときに便利なスプレッドシートを開いた人の記録を取る方法をご紹介します。

スプレッドシートを開いたときに実行される関数

スプレッドシートを開いたときに関数を起動し、ユーザのアカウントとアクセス時点での日時の記録を取ります。

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を使った場合を意味する。
sourceSpreadsheetが必ず格納されます。
イベントの発行元を表します。
triggerUidこのイベントを一意に特定するID。
userスプレッドシートを開いたユーザ情報。
メールアドレスだけが格納される。

今回はonOpen関数のeventを説明しましたが、ほかのイベントに対応したeventオブジェクトは公式ドキュメントを参照してください。

https://developers.google.com/apps-script/guides/triggers/events

注意:監査ログとしては使えません

この閲覧ログですが、いわゆる監査ログとしては利用は推奨されません。

あくまで参考程度の記録として利用してください。

編集権限を持つユーザしか記録されない

onOpen関数が実行されるのは、スプレッドシートを開いたユーザが編集権限をもつ場合のみです。

閲覧権限を持つ場合はonOpen関数が実行されず、閲覧ログが書き込まれません。

スプレッドシートを開かない方法には対応できない

閲覧ログを記録する目的は、スプレッドシートの中のデータを見た人を記録するということだと思います。

スプレッドシートを開かずにデータを取得する方法、例えばGASでデータを読み出す、別のツールを使ってデータにアクセスするなどの場合もonOpen関数は実行されず、閲覧ログが書き込まれません。

まとめ

今回はスプレッドシートを開いた人の記録を取る方法をご紹介しました。

気軽に使える方法ですが、監査ログなどの本格的な用途としては向きません。

事前に用途を確認してから、適材適所でご利用いただければと思います。