API:デバッグ

プログラムを書いていると(最も単純なものから最も高度なものまで)、必然的にプログラムを誤動作させるバグに遭遇する。 Roll20のAPIはサンドボックス化されているため、何が起こっているのかを正確に伝えるのは少し難しいかもしれません。 そこで、スクリプトの問題を診断するのに役立つヒントをいくつか紹介しよう。


on("change:graphic:left", function(obj) {
   //このオブジェクトの左の値は何だろう?
   log(obj.get("left"));
   obj.set("left", obj.get("left") + 70);
   //今度は何?
   log(obj.get("left"));
   //オブジェクト全体をデバッグして、現在の属性のリストを見ることもできます
   log(obj);
});

ログコマンドの出力は、キャンペーンのスクリプトエディターページにあるMOD(API)コンソールで見ることができます。


エラーロック

Roll20 API は、必要に応じてスクリプトを再起動することで、スクリプトの小さなエラーから自動的に回復します。 しかし、APIが回復不可能な深刻なエラーを検出した場合、スクリプトを何度も何度も再起動してエラーになるよりは、キャンペーンに「エラーロック」をかけ、エラーが解決するまでMOD(API)スクリプトを実行しないようにします。 スクリプトがエラーロックされている場合、スクリプト エディター ページにこのようなメッセージが表示されます:

エラーロック.png

心配しないで! 問題を解決するためにスクリプトに変更を加え、「スクリプトを保存」ボタンをクリックするだけです。 そうすると、エラー・ロックは「クリア」され、APIはスクリプトの再実行を試みる。 別のエラーが発生した場合は、エラーロックが再適用される。 エラーが修正されるまで、このプロセスを何度でも繰り返すことができる。何度も失敗したからといって、APIがエラーロックのクリアを妨げたりすることはない。


よくあるエラー

以下は、よく遭遇するエラーです:


myvar が定義されていない

on("ready", function() {
    var myVar;
    log(myvar);
});

エラーメッセージには「定義されていません」と書かれているが、実際に起きているのは変数が宣言されていないということだ。 最も一般的な原因のひとつは、大文字が抜けているなど、変数名にタイプミスがあることです。


プロパティ 'myProperty' を読み取ることができないか、メソッド 'myMethod' を呼び出すことができない。

on("ready", function() {
    var myVar;
    log(myVar.myProperty);
    log(myVar.myMethod());
});

myVarが定義されていないため、スクリプトはmyVarのプロパティにアクセスしようとした場合にどのように対処すればよいかを把握できません。 これはおそらく、いずれかの原因によるものだろう:

  • オブジェクトを見つけようとしたが、結果は未定義だった。 変数のプロパティにアクセスする前に、変数が定義されていることを確認するためのエラーチェックを行ってください。
  • 変数は(一連のif文などで)条件付きで定義されており、どの条件も一致しなかったため、変数は宣言されたまま定義されなかった。 すべての可能性に対して条件を設定するか、デフォルトのオプションを作成するか、変数にアクセスする前にその変数が定義されていることを確認するエラーチェックを行う。

予期せぬトークン

文字が足りないか、文字数が多すぎる。 これは、オブジェクトのプロパティのリストや配列の要素の間にカンマを入れ忘れたり、複雑なネストしたメソッド呼び出しの最後に閉じ括弧が多すぎたり少なすぎたりすることが原因です。


Roll20 オブジェクトのプロパティのほとんどは、get()メソッドとset()メソッドでアクセスする必要があります。 get()を使用する場合、読み取り専用プロパティでは先頭のアンダースコアを省略する必要があります。

この記事は役に立ちましたか?
109人中15人がこの記事が役に立ったと言っています