ADVERTISEMENT

【Googleスプレッドシート】Apps Scriptのデバッグ手法!ログ出力とエラー追跡

【Googleスプレッドシート】Apps Scriptのデバッグ手法!ログ出力とエラー追跡
🛡️ 超解決

GoogleスプレッドシートでApps Scriptを使うとき、期待通りに動かないことはよくあります。特にスクリプトエディタ上では目に見えないため、どこで問題が起きているのか把握しにくいものです。この記事では、ログ出力とエラー追跡という2つのデバッグ手法を詳しく解説します。これらの方法を身につければ、スクリプトの不具合を効率的に見つけて修正できるようになります。

【要点】Apps Scriptのデバッグで使うログ出力とエラー追跡の基本

  • Logger.log: スクリプトエディタのログビューアにメッセージを出力します。開発中の変数確認に最適です。
  • Console.log: 新しい標準ログ出力で、スタックトレース付きの詳細情報を表示します。構造化データも扱えます。
  • try-catch文とスタックトレース: エラー発生時に原因を特定するための構文です。catchブロックでエラー内容をログ出力します。

ADVERTISEMENT

Apps Scriptのデバッグで使う2つの基本機能

Apps Scriptには、スクリプトの動作確認やエラー原因の特定に役立つデバッグ機能が用意されています。その中でも特に重要なのが「ログ出力」と「エラー追跡」です。ログ出力は、スクリプトの途中経過をテキストとして記録する機能です。エラー追跡は、スクリプトが異常終了したときに、どの行でどんなエラーが発生したかを示すスタックトレースを取得する方法です。これらを組み合わせることで、複雑なスクリプトでも問題箇所を素早く特定できます。

ログ出力を使ったデバッグ手順

ログ出力には大きく分けて「Logger.log」と「Console.log」の2つの方法があります。どちらもスクリプトエディタのログビューアで結果を確認できます。ここではそれぞれの使い方を説明します。

Logger.logの基本的な使い方

  1. スクリプトエディタを開きます
    Googleスプレッドシートのメニューから「拡張機能」→「Apps Script」を選択します。
  2. コードにLogger.logを追加します
    変数の値や処理の経過を確認したい箇所に「Logger.log(メッセージ)」を記述します。メッセージには文字列や数値、配列などを渡せます。
  3. スクリプトを実行します
    エディタの上部にある「▶実行」ボタンをクリックしてスクリプトを実行します。
  4. ログを確認します
    「表示」→「ログ」をクリックしてログビューアを開きます。Logger.logで出力したメッセージが表示されます。

例えば以下のコードを実行すると、ループ内のiの値を確認できます。

function sampleLogger() {
  for (var i = 0; i < 5; i++) {
    Logger.log('現在のiの値は ' + i);
  }
}

Console.logの基本的な使い方

Console.logはLogger.logよりも新しいログ出力方法で、より詳細な情報を出力できます。特にオブジェクトや配列をそのまま渡せるため、デバッグに便利です。

  1. コードにConsole.logを追加します
    Logger.logと同様に「console.log(メッセージ)」と記述します。
  2. スクリプトを実行します
    実行後、「表示」→「ログ」からログビューアを開きます。Console.logの出力は「実行トランスクリプト」タブに表示されます。
  3. 出力結果を確認します
    Console.logはスタックトレースも表示されるため、どの関数から呼ばれたかも分かります。

例えば以下のコードで、オブジェクトの内容をそのまま出力できます。

function sampleConsole() {
  var data = {name: '太郎', age: 30};
  console.log(data);
}

エラー追跡とスタックトレースの確認方法

スクリプトでエラーが発生した場合、エラーメッセージとスタックトレースを取得して原因を特定できます。ここではtry-catch文を使ったエラー追跡の手順を紹介します。

  1. try-catch文でコードを囲みます
    エラーが発生しそうな処理をtryブロック内に書き、catchブロックでエラー情報を受け取ります。
  2. catchブロックでエラーをログ出力します
    catch(e) のeにはエラーオブジェクトが入ります。e.messageでエラーメッセージ、e.stackでスタックトレースを取得できます。
  3. Logger.logまたはConsole.logで出力します
    取得した情報をログに出力して確認します。

以下はtry-catchを使った例です。

function sampleTryCatch() {
  try {
    var sheet = SpreadsheetApp.getActiveSheet();
    var value = sheet.getRange('A1').getValue();
    Logger.log(value);
  } catch (e) {
    console.log('エラーが発生しました: ' + e.message);
    console.log('スタックトレース: ' + e.stack);
  }
}

また、スクリプトエディタの「▶実行」で直接実行した場合、エラーが発生すると自動的にスタックトレースがログに表示されます。そのため、最初からコードをtry-catchで囲まなくても、実行ログを確認することでエラー箇所を特定できます。

ADVERTISEMENT

デバッグの注意点とよくある失敗

ログが表示されない場合

ログ出力をしてもログビューアに何も表示されないことがあります。原因は主に2つです。1つ目は、スクリプトが実行されていない場合です。関数を定義しただけでは実行されません。スクリプトエディタの「▶実行」ボタンか、トリガー設定で実際に実行する必要があります。2つ目は、Logger.logとConsole.logで出力タブが異なることです。Logger.logは「ログ」タブ、Console.logは「実行トランスクリプト」タブに出力されます。間違ったタブを開いていないか確認してください。

エラーが発生したが原因がわからない場合

エラーメッセージだけでは原因が特定できないことがあります。その場合は、スタックトレースを活用しましょう。スタックトレースにはエラーが発生した関数名と行番号が含まれています。例えば「at sampleFunction(test:3:20)」と表示されれば、test.gsファイルの3行目20文字目でエラーが起きたことが分かります。また、Console.logでスタックトレースを出力しておくと、後から解析しやすくなります。

スクリプトが途中で止まってしまう場合

長時間実行されるスクリプトや大量のデータを処理するスクリプトは、実行時間制限に達して止まることがあります。Apps Scriptには6分の実行制限があります。このような場合は、処理を分割して複数回実行するか、トリガーを使って短い時間ごとに実行する方法を検討してください。また、Logger.logを出力しすぎるとログ容量の制限に引っかかる可能性もあります。必要な箇所だけ出力するようにしましょう。

ログ出力とエラー追跡の比較表

機能 Logger.log Console.log try-catch
出力場所 「ログ」タブ 「実行トランスクリプト」タブ 任意のログ出力と併用
スタックトレース 表示されない 自動表示 e.stackで取得可能
オブジェクト出力 文字列変換が必要 そのまま出力可能 関係なし
主な用途 シンプルな変数確認 詳細なデバッグ情報 エラー時の処理分岐

この表を見ると、Logger.logは軽量で簡単なデバッグに向いていることが分かります。Console.logはより多くの情報を提供し、特にスタックトレースが自動で付く点が便利です。try-catchはエラーが発生してもスクリプトを停止させずに処理を続けたい場合に有効です。

まとめ

この記事では、Apps Scriptのデバッグに欠かせないログ出力とエラー追跡の手法を解説しました。Logger.logとConsole.logを使い分けることで、スクリプトの動作を可視化できます。また、try-catch文でエラーを捕捉し、スタックトレースを確認すれば、問題の原因を素早く特定できるでしょう。ぜひ実際のスクリプトでこれらのテクニックを試してみてください。最初は簡単な関数から始めて、徐々に複雑なスクリプトに応用していくと効果的です。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

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