top of page

Googleスプレッドシート:編集履歴を自動記録 5

  • 執筆者の写真: egachira0250
    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. 全体フロー


  1. メインのログシート(例:EditLog)に新規ログを追記

  2. 月初めに「Log_YYYY_MM」シートを自動生成

  3. 前月分のログを一括で月次シートに移動

  4. メインシートから該当行を削除して肥大化を防止


このサイクルを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():スクリプトのタイムゾーン設定を取得し、日付整形に利用。



■ さいごに

今回は、スプレッドシート内で「月次分割&アーカイブ」する手法を解説し、大量ログでも安定して処理する方法を示しました。 次回は、編集ログを即時に通知&可視化する「リアルタイム通知とダッシュボード化」の実装パターンをお届けします。お楽しみに!



コメント


©2020 by Excelノウハウの備忘録♪。Wix.com で作成されました。

bottom of page