ADVERTISEMENT

【Googleスプレッドシート】Apps Scriptでスクリプト実行時間を計測する!ベンチマーク手法

【Googleスプレッドシート】Apps Scriptでスクリプト実行時間を計測する!ベンチマーク手法
🛡️ 超解決

Googleスプレッドシートで使うApps Scriptの処理速度が気になったことはありませんか。スクリプトの実行時間が長いと、業務効率に影響を与えることがあります。この記事では、Apps Scriptでスクリプトの実行時間を正確に計測するためのベンチマーク手法を解説します。ここで紹介する方法を使えば、スクリプトのパフォーマンスを数値化して改善箇所を見つけられるようになります。

【要点】Apps Scriptの実行時間を計測して最適化する方法

  • console.time / console.timeEnd: 最も簡単な計測方法で、コードの任意の区間の経過時間をミリ秒単位で表示します。
  • new Date().getTime(): 手動で開始・終了時刻を取得し、差分を計算することで柔軟な計測を行います。
  • Utilities.sleep() の待機時間を考慮: スリープを含むスクリプトでは、実際の処理時間のみを計測する工夫が必要です。

ADVERTISEMENT

ベンチマーク計測の仕組みとメリット

Apps Scriptにおけるベンチマークとは、スクリプトの特定の処理が完了するまでにかかる時間を計測することです。スクリプトの実行時間は、Googleのサーバー負荷や他の処理の影響で変動するため、複数回計測して平均を取るのが一般的です。計測結果を数値で把握することで、どの部分がボトルネックになっているかを特定できます。たとえば、スプレッドシートの大量セルをループで書き換える処理と、API呼び出しの待ち時間を比べて、改善の優先順位を決められるようになります。

スクリプト実行時間を計測する手順

ここでは、2つの代表的な計測方法を紹介します。どちらもApps Scriptのエディタで直接記述して使えます。

1. console.time / console.timeEnd を使う方法

  1. 計測したいコードを用意する
    例として、スプレッドシートのセルに連続して値を書き込む関数を準備します。
  2. console.time(‘ラベル’) で計測開始
    計測開始地点に console.time('myTimer'); と記述します。ラベルは任意の文字列です。
  3. console.timeEnd(‘ラベル’) で計測終了
    計測終了地点に console.timeEnd('myTimer'); と記述します。実行ログに経過時間が「myTimer: 123.456ms」のように表示されます。
  4. 実行してログを確認する
    スクリプトを実行し、表示メニューからログを開いて経過時間を確認します。

この方法はコードを最小限の変更で計測できるため、簡易的なベンチマークに適しています。ただし、console.timeは1つのスクリプト内で同時に複数のタイマーを使えますが、ラベルが重複すると正しく計測できません。

2. new Date().getTime() を使う方法

  1. 開始時刻を変数に保存する
    計測開始地点に var startTime = new Date().getTime(); と記述します。
  2. 計測したい処理を実行する
    ループやスプレッドシート操作など、計測したいコードを記述します。
  3. 終了時刻を取得して差分を計算する
    計測終了地点に var endTime = new Date().getTime(); var elapsed = endTime - startTime; と記述します。elapsedには経過時間(ミリ秒)が入ります。
  4. 結果をログやセルに出力する
    Logger.log('経過時間: ' + elapsed + ' ms'); などで確認します。またはスプレッドシートのセルに書き込んで履歴を残すこともできます。

この方法は、計測結果を数値として取得できるため、複数回の平均やグラフ化に利用できます。また、特定の条件下でのみ計測するなどの条件分岐にも対応しやすいです。

計測時の注意点とトラブル対策

実行時間が毎回大きく異なる場合

Googleサーバーの負荷や他のスクリプトの影響で、実行時間は変動します。正確なベンチマークを行うには、同じ処理を5〜10回程度実行し、平均値や中央値を取ると良いでしょう。最大値と最小値を除外して平均を計算する方法も有効です。

Utilities.sleep() を含む処理の計測

APIのレート制限対策としてsleepを入れることがあります。この待機時間を含めて計測すると、実際の処理時間が正しく評価できません。sleep前後の時刻を個別に記録して、sleep時間を差し引いた実処理時間を算出します。

スクリプトの実行制限に注意

Apps Scriptには1回の実行あたり6分(360秒)という制限があります。計測対象の処理が長すぎるとタイムアウトで中断されるため、事前に分割するなどの対策が必要です。また、大量のログ出力も制限に引っかかる可能性があるので、必要最小限のログに抑えましょう。

console.timeがログに表示されない

console.timeEndの結果は実行ログに出力されます。ログが表示されない場合は、スクリプトエディタの表示メニューから「ログ」を開いて確認してください。また、タイマーのラベルが一致しているかも確認します。

ADVERTISEMENT

計測手法の比較

手法 簡便さ 精度 応用のしやすさ おすすめシーン
console.time 非常に簡単 ミリ秒単位で十分 低い ざっくりした計測、デバッグ時
new Date().getTime() やや手間 ミリ秒単位で正確 高い(結果を変数に代入可能) 複数回計測の平均取得、グラフ化

どちらの方法も基本的な計測には十分な精度を持っています。より精密なマイクロ秒単位の計測はApps Scriptではできませんが、通常のパフォーマンス改善では問題になりません。

まとめ

この記事では、Apps Scriptでスクリプトの実行時間を計測する2つの主要な方法を解説しました。console.timeを使えば手軽に、new Date().getTime()を使えば柔軟に計測できます。まずは簡単なconsole.timeで処理のボトルネックを探し、必要に応じてnew Date().getTime()で詳細なデータを収集しましょう。次に、計測結果を元にループ処理の最適化やAPI呼び出しの削減など、パフォーマンス改善に取り組んでみてください。さらに、スプレッドシートのセルに計測結果を蓄積することで、スクリプトの経時変化も追跡できます。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。