API: デバッグ

プログラムを書くときは(最も単純なものから高度なものまで)、必ずプログラムの誤動作を引き起こすバグに遭遇します。 Roll20 APIがサンドボックス環境であるため、何が起きているのかを正確に把握するのは少し難しい場合があります。 では、スクリプトの問題を診断するのに役立つヒントをいくつかご紹介します。


on("change:graphic:left", function(obj) {
   //このオブジェクトに渡されるleftの値は何か?
   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()を使用する際は、読み取り専用プロパティの先頭にあるアンダースコアを省略する必要があります。

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