×

[PR]この広告は3ヶ月以上更新がないため表示されています。
ホームページを更新後24時間以内に表示されなくなります。



>> ユーザーガイド >> トラブルシューティング


トラブルシューティング

残念ながら経験豊富な開発者でさえも、開発プロセスの重要な部分にトラブルシューティングのある適切なコードを書きません。
このセクションでは、スクリプト内のエラーを見つけやすくて分かりやすいものにして、デバッグもできるいくつかのテクニックをカバーします。


WWW GoogleStyle


エラーメッセージ

スクリプトエディタ内で作業している場合、スクリプトで問題が発生すればすぐににエラーメッセージが表示されます。メッセージは画面の上部に赤いバーで表示され、エラーが含まれている行が強調表示されます。 この方法で表示されるエラーには2つの基本タイプがあります。それは。構文エラーと実行時エラーです。

シンタックスエラー(構文エラー)

構文エラーは、JavaScriptの文法に従わないコードによって発生するエラーで、スクリプトを保存する時点でエラーが検出されます。次のコードを見てみましょう。


function
emailStockPrice() {
var
info =
FinanceApp.
getStockInfo(
'.DJI'
);
var
price = info[
'price'
;
MailApp.
sendEmail(
'john@example.com'
, '
Dow Jones Industrial Average
', price); }

問題点はどこだか分かりますか?3行目の最後で]の欠落文字があります。このスクリプトを保存するとすぐに次のエラーメッセージが表示されます。


		Missing ] in index expression. (line 3) ( インデックス式に ] がありません。 (3行目))

普通これらのエラーは、単純な原因なので直ぐに発見されますし、トラブルシュートも簡単です。構文エラーが含まれているファイルを保存することはできず、有効なコードだけがプロジェクトに保存できます。

ランタイムエラー(実行時エラー)

次の例では、間違った関数やクラスを使用したことにより引き起こされたエラーで、これは実行された後だけに検出されます。


function
emailStockPrice() {
var
info =
FinanceApp.
getStockInfo(
'.DJI'
);
var
price = info[
'price'
];
MailApp.
sendEmail(
'john'
,
'Dow Jones Industrial Average'
, price); }

コードが正しくフォーマットされていますが、MailApp.sendEmailを呼び出すときに、電子メールアドレスの値に"John"を渡しています。これは有効な電子メールアドレスではないので、スクリプトの実行時に次のエラーがスローされます。


		Invalid email: john (line 4) ( 無効なメール:john(4行目) )

シンタックスエラー(構文エラー)とは違って、これらのエラーは問題解決が困難になりがちです。関数に渡しているデータは多くの場合コード内には書かれませんし、代わりに他の外部データソース(スプレッドシート、フォームなど)から引き出されているからです 以下のようにデバッグ技法を使用すると、これらのエラーの原因を識別するのに役立ちます。



デバッグ

エラーメッセージは、すべて表示されるわけではありません。技術的にコードが正しく、実行可能だけれど期待通りには動作しないという微妙なエラーというものもあります。 ここでは、このような状況に対処し、期待通りに実行されていないスクリプトをもっと調査するための戦略を説明します。

実行トランスクリプト

スクリプトを実行するたびに、Google.Apps.Scriptは、実行トランスクリプトを記録します。これは、スクリプトが実行されている間にGoogle.Apps.Scriptサービスへの呼び出しを記録したものです。 これらのトランスクリプトは、スクリプトが実行するアクションを理解するのに役立ちます。トランスクリプトは、スクリプトの実行終了後にメニューバーのView > Execution transcriptをクリックすれば見ることができます。

たとえば、上記のemailStockPriceスクリプトをアドレス"john@example.comを利用して"実行した後には、次のような出力が確認できます。


FinanceApp.getStockInfo([.DJI])
MailApp.sendEmail([john@example.com, Dow Jones Industrial Average, 12369.3798828125])


ここで、"john"のような無効なアドレスでスクリプトを実行すると、トランスクリプト(実行証明書)は下のようになります。


FinanceApp.getStockInfo([.DJI])

これは、正しく実行された最終メソッドが、FinanceApp.getStockInfoであったことを示しています。そして、エラーはその後に発生したに違いないということです。 実行トランスクリプトは、スクリプトが実行されるたびにリセットされます。

カスタムメッセージのロギング

実行トランスクリプトは、Google.Apps.Scriptサービスへの呼び出しだけを記録しますが、他のデータを記録するようなときのトラブルシューティングを行うときにも役立つことがあります。
ところで、Google.Apps.Scriptは、スクリプトが完了した後に閲覧することができるログファイルにカスタムメッセージを書き込むことができます。これらのメッセージを書くには、記録したいデータ内のログメソッドであるLoggerクラスの受け渡しを呼び出します。
スクリプトが実行された後、メニューバーのView > Logsをクリックすることで、記録されたすべてのメッセージを表示することができます。

emailStockPriceスクリプトでより高度なバージョンを考えてみましょう。


function
emailStockPrice(symbol, email) {
Logger.
log(
'Emailing stock price of '
+ symbol +
' to '
+ email);
var
info =
FinanceApp.
getStockInfo(symbol);
Logger.
log(info);
var
price = info[
'price'
];
MailApp.
sendEmail(email,
'Price for: '
+ symbol, price); }

このスクリプトは"DJI"、"john@example.com"の入力で実行されて以下のログが記録されます。


Emailing stock price of .DJI to john@example.com
{priceopen=12369.15, symbol=.DJI, change=110.16016, ...}


Logger.logメソッドは文字列の値を期待していますが、オブジェクトまたはオブジェクトの配列を渡した場合は、できるだけ文字列に変換します。 ログは限られた量のデータのみを保持するので、大量のテキストをログに記録することは避けます。ログはスクリプトの実行のたびにリセットされるので、出力を保存したいときはLogger.getLogメソッドを利用できます。
Logger.getLogメソッドは、送信されたメールやスプレッドシートに格納されたものなどの現在のログファイルを取得してくれます。

デバッガとブレークポイントの使用

スクリプトエディタはデバッグモードでの実行が可能です。これは位置判定のために特別に設計されています。デバッグモードで実行した場合、スクリプトはブレイクポイントで一時停止します。スクリプト内でおそらく問題があるだろうと思われる行を強調したところがブレイクポイントです。 その時点での各変数の値が表示されて停止したとき、ロギング・ステートメントを追加することなく、スクリプトの内部の仕組みを詳しく調べることができるようになっています。

一時停止したラインの行番号にブレークポイントをクリックして追加します。

ツールバーの虫のアイコン()をクリックしてデバッグモードでスクリプトを実行します。 スクリプトがブレイクポイントのある行を実行する前に一時停止してデバッグ情報の表を表示します。

シンボルやメールのパラメーターの値だけでなく、情報オブジェクトに格納されているストック情報の結果を調べることができます。価格変数はその行が実行される前にスクリプトが一時停止したため、値がまだ割り当てられていないことに注意してください。

スクリプトが一時停止されたとき、ツールバーに予備のボタンセットが表示されます。このボタンでスクリプトの実行方法を制御します。 "step.in","step.over","step.out"のボタンを使い分ければ、時間の経過とともにどのように値が変化するかを調べることができます。

一般的なエラー

Service invoked too many times:(サービスが何回も呼び出される;<actionの名前>)
このエラーは与えられたアクションに対して、毎日の割当量を超えていることを示します。一日に多くの電子メールを送信したような場合にこのエラーが発生する場合があります。 割当量はconsumer,domain,premierそれぞれのアカウントで設定が異なりますが、Googleによって予告なく変更される場合があります。Google Apps Script Dashboardで様々なアクションについての割当量が確かめられます。

Server not available./Server error occurred, please try again.:(サーバーが利用できない)
このエラーに関しては次のいくつかの可能性が考えられます。

Authorization is required to perform that action.:(アクションを実行するために承認が必要)
このエラーは、スクリプトを実行するために必要な権限を欠いていることを示します。スクリプトがスクリプトエディタか、またはカスタムメニュー項目から実行されたとき、認証ダイアログがユーザーに提示されます。 Google.Sitesページに埋め込まれたサービスとして実行されたとき、またはトリガーから実行されたときにはダイアログは表示されずにエラーが表示されます。 スクリプトを許可するには、スクリプトエディタを開いて任意の関数を実行します。このエラーを回避するには、スクリプトに新しいサービスや機能を追加した後、スクリプトエディタでスクリプトを1回実行することを忘れないでください。



ヘルプの取得

上記のツールやテクニックを使用して問題をデバッグすれば、さまざまな問題を解決することができます。しかし、問題を解決するためにはさらにヘルプが必要になることがあります。 このような場合、質問やファイルのバグ情報などはサポートページを参照してください。



2012-11-12


pageTOP