| Googleを追いかけろ! |
| |
| . | ||
| home >> ユーザーガイド 9. トラブルシュートとデバッグ | ||
|
![]() |
エラーメッセージの解釈
通常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 Script は execution transcript というものを記録しています。これはスクリプト実行時の各メソッドの
実現の様子を記録したものです。
Execution Transcriptを表示するために
ログメッセージの作成とログの閲覧
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 で閲覧できます。
既知の問題を閲覧するために
更なるヘルプ
固有の問題についてのヘルプや Google Apps Script ユーザーが回答しているし質問例を参考にするときは Google Apps Script Help Forum へ相談して下さい。
フォーラムを捜しても必要な情報が手に入らない場合は、投稿して他のユーザーや Google Apps Script チームからの回答を待ちましょう。
-- ユーザーガイド 9. トラブルシュートとデバッグ : end -- 2011/10/30
|