Googleを追いかけろ!

.
価格.com ブロードバンド

WWW を検索 Googleを追いかけろ! を検索



エラーメッセージの解釈

通常Google Apps Script が実行不能の時にはエラーメッセージが表示されます。エラーの発生しているコードの行表示と特定のエラーについては簡単な説明が付きます。 エラーメッセージは簡単に理解できるもので、スクリプト内の特定のエラーを指します。

カスタムメニューとメニューアイテムをスプレッドシートに挿入するスクリプトを例にとってみます。

function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [ {name: "Surprise 1", functionName: "menuItem1"},
                      {name: "Surprise 2", functionName: "menuItem2"} ];
  ss.addMenu("Surprises", menuEntries);
}

function menuItem1() {
  Browser.msgBox("You clicked Surprise 1 on the menu!");
}

function menuItem2() {
  Browser.msgBox("Surprise! Surprise!")

}
下の例のように、メニューに表示されるべきメニューアイテムの定義をする前にメニューの定義をしてしまったらどうなるでしょうか。
function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  ss.addMenu("Surprises", menuEntries);
  var menuEntries = [ {name: "Surprise 1", functionName: "menuItem1"},
                      {name: "Surprise 2", functionName: "menuItem2"} ];
 
}
新たにスプレッドシートを開いても Surprises のメニューは決して表示されません。Script Editor を開いて Run > onOpen を選択するとエラーメッセージが確かめられます。
Cannot find method addMenu(string,Undefined). (#3)
最後の数字の部分は誤りのある行番号です。実行不能なaddMenu メソッドは2つの引数を要求していますが、4行目までの間に menuEntries が定義されていないのです。 スクリプトの ss.addMenu("Surprises", menuEntries); の部分は menuEntries の後に来るべきコードだからです。

エラーメッセージは分かりやすいことが普通です。もっと一般的なもとして

Server not available.
とか
Server error occurred, please try again.
といったものがあります。

といっても Gooogle のサーバーが利用できないことはかなり稀なことです。もしこのメッセージが出てしまったら、暫くしてからスクリプトを再実行してみてください。 似たようなエラーメッセージの場合、応答しないとか固有のメッセージではないときはスクリプト側のエラーをを意味しています。 ですから関連のメッセージをすべて確認するようにしてください。 この点についてはデバックを参考にするか、エラーレポートの載っている Google Apps Script Help Forum を利用してください。

デバッグ戦略

Google Apps Script に由来するプログラム中のエラーがすべて表示されるわけではありません。 技術的に正しくて実行可能なコードでも微妙なエラーが存在するので、不正確な値や間違ったデータを読み取ってしまう事もあります。 こういうときは、スクリプトの実行から期待通りの結果は得られません。このような状況を操作したり、もっと詳しく検証できる戦略があります。

Execution Transcriptを表示する

スクリプト実行の都度 Google Apps Scriptexecution transcript というものを記録しています。これはスクリプト実行時の各メソッドの 実現の様子を記録したものです。

Execution Transcriptを表示するために

  • スクリプトは Script Editor から実行する
  • スクリプト実行終了後に Script Editor から View > Execution Transcript を選択すると Execution transcript for script script_name. という名のウィンドが確認できます。

    Script Editor から実行したカスタム関数が正常に完了したあとに View > Execution Transcript を見ると、下のようになっています。

    SpreadsheetApp.getActiveSpreadsheet() 
    Spreadsheet.addMenu([Surprises, [])
    
    もしスクリプトにエラーが混入して、Interpreting Error Messages に表示が出たら、 transcript(転写)は下のようになります。
    SpreadsheetApp.getActiveSpreadsheet() 
    
    これは最後に実行されたメソッドが getActiveSpreadsheet を表しています。そこで、エラーはこのメソッド以後のところにあることが分かります。
ログメッセージの作成とログの閲覧 Google Apps Script はログメッセージの作成と閲覧ができます。ログメッセージは、スクリプトがどのような動きをするか考える上で有用な手がかりとなる情報を記録した ログファイルへのエントリー記録です。たとえばプログラムを実行させるために行った変数の値の変更の記録を見るためにログを利用します。 ログメッセージを残すためにはLogger クラスの log メソッドを利用してください。

stock price のスクリプトでは下のログコードを利用しています

Logger.log("Updating symbol: " + symbol);
Script Editor > View > Logs と選択すれば下のようなログが確認できます。
Updating symbol: goog 
Updating symbol: emc 
Updating symbol: aapl 
Updating symbol: ibm 
Updating symbol: siri 
Updating symbol: msft
下のように ContactsAppクラスgetContactGroupsメソッド を利用すればもっと複雑なログを作成できます。
var groups = ContactsApp.getContactGroups();
for (var i in groups) 
  Logger.log (groups[i].getGroupName());
ここでは i というカウンターを利用して groups の配列内をループして、それぞれの groups名 をログメッセージとして記録しています。

その他のトラブルシュート戦略

スクリプトの問題発生箇所はどこかを決定するための上記以外のアプローチ方法です。 行のコメントアウトによっても可能です。あるコードが検討されるべき指示なのかどうかを知る手順として調べる方法です。 表示は消さずに計算を実行させないように安全なコメントアウトをしましょう。

プログラムを実行するには、スクリプトの正しい結果を予測できるようなデータを使用します。 計算を実行しようとする場合、事前にどのような計算結果になるかを予測して、その数式、またはスクリプトで正しいことを確認できるデータを使うことです。 もしスクリプトが正しい計算結果を返さないならば、論理的なエラーの有無を検討してみます。実行スクリプトの変数値の変更記録をとるためにログメッセージを利用しましょう。

既知の問題表示と新たな課題レポート

Google Apps Script の既知の問題と現在の状態は Google Apps Script Issues wiki で閲覧できます。

既知の問題を閲覧するために

  1. URL http://code.google.com/p/google-apps-script-issues/ へアクセス
  2. Issuesタブをクリック
  3. 固有の問題を見るために問題箇所の行をクリック

新たな問題に関するレポートや拡張要求をする

  1. URL http://code.google.com/p/google-apps-script-issues/ へアクセス
  2. Issuesタブをクリック
  3. 左サイド上部 New Issue をクリック
  4. 要旨と詳しい説明(問題を再現するための必要な手順、期待された結果が出るように、ブラウザーやOS環境などの有効となる情報)をすべてを入力
  5. Submit Issueで投稿

更なるヘルプ

固有の問題についてのヘルプや Google Apps Script ユーザーが回答しているし質問例を参考にするときは Google Apps Script Help Forum へ相談して下さい。 フォーラムを捜しても必要な情報が手に入らない場合は、投稿して他のユーザーや Google Apps Script チームからの回答を待ちましょう。



    * ユーザーガイド/目次
    1. ユーザーガイド/Google Apps Script の概要
    2. Getting Started/Google Apps Scriptをはじめよう
    3. Writing Scripts/スクリプトを書く
    4. Common Tasks/一般的なタスクのプログラミング
    5. Events/イベントへの応答スクリプト
    6. User Interfaces/ユーザーインターフェースの組み込み
    7. Using GUI Builder/GUI ビルダー の使用
    8. Security/セキュリティ
    9. Troubleshooting/トラブルシュートとデバッグ
    -- ユーザーガイド 9. トラブルシュートとデバッグ : end -- 2011/10/30