Googleスプレッドシート:編集履歴を自動記録 2
- egachira0250
- 31 分前
- 読了時間: 3分
チーム運用のスプレッドシートで「いつ誰が編集したか」を自動記録するには、GASのトリガー選定が最重要です。実際には複数のトリガーがあり、それぞれ取得できる情報や動作タイミング、権限の要件が異なります。
本稿では、代表的なトリガー手法を比較し、要件に合う最適な選び方と基本実装パターンを解説します。
■ 動作環境
OS:Windows 10 Home(64ビット)
Chrome:140.0.7339.128(Official Build) (64 ビット)
■ 編集ログ記録に使える主なトリガー比較
Google Apps Scriptには大きく分けて次の4種類のトリガーがあります。
それぞれの特徴とログ記録への適性を見ていきましょう。
トリガー形式 | 主な用途 | メリット | デメリット |
onEdit (単純トリガー) | ユーザー手動編集の即時検知 | 設定不要で即時発火;基本的な編集ログに対応 | インストール不要の代わりに権限制限;フォーム編集を拾わない |
onChange (単純トリガー) | シート構造変更全般の検知 | シート追加・コピー・削除など幅広いイベントを検知 | セル単位の旧値・新値を取得しにくい |
onFormSubmit (単純トリガー) | フォーム送信時のログ | フォーム経由の入力を正確にキャッチ | フォーム以外の編集を拾わない |
インストール型トリガー | onEdit/onChange の拡張版 | 高権限で実行可能;複数ユーザー環境でも安定動作 | 手動設定が必要;スコープ承認を都度クリア |
このように、編集ログの要件(セル単位か構造変更もか、フォーム編集もか、利用権限環境など)によってベストなトリガーが変わります。 まずは要件を整理し、次の手順で選定フローを進めましょう。
■ 要件に合わせたトリガー選定フロー
編集ログでよくある要件を例に、最適なトリガーを選ぶ手順は以下のとおりです。
セル単位の旧値・新値が必要か?
必要 → onEdit/インストール型 onEdit
不要 → onChange もしくは 時間駆動トリガー
フォーム入力も含めたいか?
含めたい → onFormSubmit + onEdit
含めない → onEdit のみ
組織全員の編集者を正確に取得できる環境か?
Workspace 環境 → インストール型トリガー推奨
個人アカウント共有 → 単純トリガーでも可
クォータ制限・実行回数上限を回避したいか?
回避したい → バッチ処理用の時間駆動トリガーを併用
これで「誰が」「いつ」「何を」取得すべきかに合わせたトリガー選定がスムーズになります。
■ 代表パターン:インストール型トリガー
ここではもっとも汎用的に使われる「インストール型トリガー」の設定手順とサンプルコードを示します。セル単位で旧値・新値をログ用シートに記録する最小構成です。
主なクラス・メソッド仕様
onEditTrigger(e):インストール型トリガーで編集イベントを受け取る
e.range.getA1Notation():編集セルの位置を文字列(例:"B4")で取得
e.oldValue / e.value:編集前/編集後の値(複数セル編集時は未定義になる場合あり)
Session.getActiveUser().getEmail():編集者メールを取得(Workspace環境前提)
Sheet.appendRow(row):配列を1行ずつシートに追記
■ さいごに
今回は編集ログ記録の“肝”となるトリガー選定フローと、代表パターンであるインストール型トリガーの基本実装を紹介しました。 次回は「編集者情報の取得と制限」にフォーカスし、Workspace環境や匿名編集時のフォールバック設計を詳しく解説します。お楽しみに!
コメント