Googleスプレッドシート:編集履歴を自動記録 5
- egachira0250
- 2 日前
- 読了時間: 3分
更新日:1 日前
チーム運用や大量セル変更ログを蓄積すると、シートの応答遅延やスクリプトの実行時間切れに悩まされがちです。 第5回では、Google Apps Script(GAS)で生成される膨大な編集ログを安定して処理するための「ストレージ戦略」と「パフォーマンス最適化」手法を整理します。
■ 動作環境
OS:Windows 10 Home(64ビット)
Chrome:140.0.7339.208(Official Build) (64 ビット)
■ 膨大なログ対応の3つのアプローチ比較
ログ量の増加に伴うパフォーマンス低下を抑えるには、大きく以下の3つの手法があります。
手法 | メリット | デメリット |
シート内分割&アーカイブ | スプレッドシートだけで完結 ログ検索もしやすい | 月次/年次シートの管理コスト シート数が増えるとUIが煩雑 |
バッチ書き込み&集約 | setValues 一括処理で高速 APIコール回数を低減 | ログのリアルタイム性低下 実装がやや複雑 |
外部ストレージ連携 | BigQuery や Cloud SQL で大規模データ処理が可能 | 導入コストと学習コスト アクセス権限・セキュリティ設計が必要 |
今回は最も導入しやすい「シート内分割&アーカイブ」を代表例として、 月次ログシートの自動生成から古いログの移動・削除までをコード付きで詳解します。
■ シート内分割&自動アーカイブの実装例
1. 全体フロー
メインのログシート(例:EditLog)に新規ログを追記
月初めに「Log_YYYY_MM」シートを自動生成
前月分のログを一括で月次シートに移動
メインシートから該当行を削除して肥大化を防止
このサイクルをGASの時間駆動トリガーで毎月1回実行します。
2. コード例
主なクラス・メソッド仕様
SpreadsheetApp.getActiveSpreadsheet():現在のスプレッドシートを取得。
Sheet.getLastRow() シート内の最終使用行番号を返す。
Utilities.formatDate(date, timeZone, format):日付を指定フォーマット文字列で整形(例:yyyy_MM)。
Sheet.insertSheet(name):名前付きシートを新規作成。
Range.getValues() / Range.setValues(values):二次元配列の取得・一括設定で高速書き込みを実現。
Sheet.deleteRows(startRow, howMany):指定行をまとめて削除し、シートの肥大化を防止。
Session.getScriptTimeZone():スクリプトのタイムゾーン設定を取得し、日付整形に利用。
■ さいごに
今回は、スプレッドシート内で「月次分割&アーカイブ」する手法を解説し、大量ログでも安定して処理する方法を示しました。 次回は、編集ログを即時に通知&可視化する「リアルタイム通知とダッシュボード化」の実装パターンをお届けします。お楽しみに!
コメント