Claris FileMaker Pro スクリプトデバッガを使ったデバッグ方法

前回、いろいろなスクリプトの実行方法を紹介しました。今回は一般的なスクリプト実行のデバッグ方法について見ていきます。

スクリプトデバッガの起動方法

Claris FileMaker には、デバッグをするために「スクリプトデバッガ」というものがあります。スクリプトデバッガは、 FileMaker Pro の環境設定の「高度なツールを使用する」の項目にチェックを入れることによって使えるようになります(チェックを付けた際には FileMaker Pro の再起動が必要)。

この設定ができたら、メニューのツールの中から「スクリプトデバッガ」を選択します。

スクリプトデバッガを起動する方法は他にもあります。
スクリプトワークスペースでスクリプトを選択した状態で、左上にあるテントウムシのようなアイコンのボタンを押すと、選択されたスクリプトがスクリプトデバッガが起動した状態で実行されます。

もう一つのスクリプトデバッガの起動方法は、上記の2つとは少し異なりますが、実行したスクリプトでエラーが発生した時に、スクリプトデバッガが起動される、というものです。

スクリプトデバッガを起動して、「エラー時に一時停止」にチェックを入れておくと、通常のスクリプト実行時にエラーが発生した時に、自動的にスクリプトデバッガが起動されます。

上記のいずれかの方法でスクリプトデバッガが起動できますので、具体的な使用方法を解説したいと思います。

スクリプトデバッガの使用方法

スクリプトデバッガの上部にはボタンがいくつかあります。それぞれのボタンを一つずつ詳しく見ていきましょう。それぞれの説明はClaris FileMaker のヘルプページのものを記載しています。
https://help.claris.com/ja/pro-help/content/debugging-scripts.html

それぞれのボタンの説明

スクリプトの編集
現在のスクリプトを [スクリプトを編集] ダイアログボックスで開きます。スクリプト実行中にスクリプトを変更することができますが、スクリプトへの変更を保存すると実行は停止します。

続行 一時停止
スクリプトが終了するまで、またはブレークポイントが現れるまで、すべてのスクリプトステップを実行する動作と、一時停止を切り替えます。スクリプトを一時停止しているときに、[コールスタック] 一覧のスクリプトをダブルクリックすると、編集できます。アクティブなスクリプトは、[スクリプトワークスペース] のタブに別々に表示されるため、複数のスクリプトを編集できます。スクリプトの実行は、変更を保存するまで停止しません。
スクリプトが一時停止されたときに スクリプトデバッガのステップインボタン を使用してスクリプトをステップスルーすることができます。

全スクリプト終了
スクリプトの実行を停止します。

ステップオーバー
サブスクリプトを表示せずに、スクリプトを一度に 1 ステップずつ実行します。
実行するスクリプトステップが [スクリプト実行] の場合、スクリプトデバッガは、サブスクリプトを実行してから、呼び出し元のスクリプトの次の行に進みます。ブレークポイントに到達するまで、すべてのサブスクリプトのステップが実行されます。

ステップイン
一度に 1 ステップを実行し、サブスクリプトのステップも表示します。
実行するスクリプトステップが [スクリプト実行] の場合、スクリプトデバッガは、サブスクリプトの最初の行のステップを実行し、次のサブスクリプトステップに進む前にユーザの入力を待機します。

ステップアウト
現在のスクリプト内のすべてのスクリプトステップを実行します。実行するスクリプトがサブスクリプトの場合は、呼び出し元のスクリプトの [スクリプト実行] スクリプトステップの直後の行に戻ります。
スクリプトがサブスクリプトでない場合、[ステップアウト] コマンドを使用すると、スクリプトデバッガはブレークポイントに到達するまで、残りのすべてのスクリプトおよびサブスクリプトステップを実行します。

次のステップを設定
ステップの実行ポインタを、強調表示されたスクリプトステップに設定します。
このコマンドは、強調表示されたステップに制御を渡しますが、ステップの実行は行いません。スクリプトの実行またはステップのデバッグを再開すると、強調表示されたステップが実行されます。最後に実行されたステップと指定された次のステップの間にあるステップは実行されません。強調表示するステップをクリックし、次に 次のステップを設定ボタン をクリックします。

スクリプトトリガを有効/無効にする
ファイルのすべてのスクリプトトリガを一時的に無効または有効にします。
スクリプトトリガを無効にるには、[完全アクセス] 権限が必要です。スクリプトトリガはデフォルトで有効です。スクリプトデバッガを閉じると、すべての無効のスクリプトトリガが有効になります。

データビューアを開く
データビューアウインドウを開閉し、指定したフィールド、変数、計算式を監視できます。データビューアの使用を参照してください。

スクリプトの認証/認証解除
変更の権限を許可しないスクリプトに対するスクリプトデバッガまたはデータビューアのロックを解除します。
スクリプトを認証するには、[完全アクセス] 権限が必要です。高レベルの権限はすべてのスクリプトに適用されますが、他のファイル要素 (レコードやレイアウトなど) には適用されません。編集権限は、スクリプトデバッガおよびデータビューア両方を閉じるまで持続します。

ブレークポイントの設定

スクリプトワークスペースまたはスクリプトデバッガで「ブレークポイント」が設定できます。スクリプトデバッガを使用している際、ブレークポイントが設定されたスクリプト行でスクリプトが一時停止します。デバッグをしたい行にブレークポイントを設定して、効率よくデバッグをすることができます。
ブレークポイントは、スクリプトワークスペース・スクリプトデバッガ、共に行番号の箇所をマウスでクリックすることによって設定できます。ブレークポイントが設定されると、行番号のところに青い矢印が表示されます。ブレークポイントが設定された行番号をクリックすると、ブレークポイントを外すことができます。
(下の図は4行目にブレークポイントが設定されています)

データビューアの使用方法

スクリプトをデバッグする時に、欠かせないのが「データビューア」です。
データビューアはスクリプトデバッガと同じく、メニューバーの「ツール」から開くことができます。また、上記でも説明がありますが、スクリプトデバッガの「データビューアを開く」のボタンでも開くことができます。

データビューアには「現在」タブと「監視」タブがあります。
「現在」タブでは、実行しているスクリプトに関連するフィールドや、変数が自動的に表示され、それらの現在の値を確認することができます。
「監視」タブは、開発者自身で計算式を設定して、その値を確認することができます。新たに計算式を追加するときは「+」ボタンを押してください。既存の計算式を編集する場合は、編集したい計算式をダブルクリックしてください。

スクリプトが予期しない結果で終わるような場合は、デバッグ時に、スクリプトのあやしい箇所にブレークポイントを設定し、その時の各フィールドや変数の値をデータビューアで確認する、というところが主な使用場面になると思います。
その他には、スクリプト内で計算式を記述するような時に、先にデータビューアの「監視」タブで計算式を構築してみる、などの使い方も便利です。
「監視」タブは、スクリプト実行時でなくても使用できます。
スクリプトが実行されていない場合でも「現在」タブにはグローバル変数は表示されます。

スクリプトデバッガを使用するときの注意点

ブレークポイントを設定しないで「▶」を押した時

ブレークポイントが無いのでスクリプトは一時停止すること無く、終了まで向かいます。あわてて一時停止をしても、デバッグしたい箇所はすでに実行済み、ということが少なくありません。デバッグする際は適切な位置にブレークポイントを設定しましょう。

データビューアで重い計算式が設定されている時

スクリプトデバッガが実行されているときに、データビューアが開いていると、場合によってはとても時間がかかる時があります。このようなときは次のような方法がおすすめです。

スクリプトデバッガを使用する前に、データビューアを起動し、監視タブに切り替えます。監視に設定されている計算式をひとつ選択し、編集します。式の編集画面で「自動的に評価する」のチェックボックスがありますので、こちらのチェックを外します。
この状態でスクリプトデバッガを使うと、データビューアで計算が発生することがないので、データビューアによって時間がかかることはありません。その上で、確認したい値があれば、監視に設定すればデバッグもできます。
この状態でも、「現在」タブを押した瞬間に時間がかかってしまうこともありますので、注意してください。

スクリプトデバッガが一時停止の状態で、スクリプトデバッガを閉じると、スクリプトが再開され、それ以降のスクリプトも実行される

私もよくやってしまうのですが、デバッグが終わった後、スクリプトデバッガが不要になったときに、スクリプトデバッガ自体を閉じてしまうことがあります。これをやってしまうと、スクリプトは停止せず続きから続行されます。これによってデータがおかしくなってしまう可能性がありますので、注意が必要です。
デバッグが終わったら、その後のスクリプトを続行するのか、停止するのかを適切に選択するようにしましょう。

スクリプトデバッガを開いている状態で動きに問題がなくても、通常の実行では問題がある場合もある

スクリプトデバッガを開いてスクリプトを実行したときと、通常のスクリプト実行では、結果が変わる場合もあります。
そのため、スクリプトデバッガを使ってスクリプトが成功しても、スクリプトデバッガなしで正しく動くかどうかも確認することをおすすめします。

<一時停止>ボタンを押せない場面

FileMakerが出すダイアログやカスタムダイアログなどが表示されていてスクリプトが一時している場合は、<一時停止>ボタンは押せません。例えば、ブレークポイントを設定し忘れた、と気付いたときに、カスタムダイアログが表示されているような場面で、<一時停止>ボタンを押したくなりますが、残念ながら押せません。

「OnFirstWindowOpen」のスクリプトトリガに設定されているスクリプトをデバッグしたい時

スクリプトデバッガはFileMakerが起動していれば開くことができます。カスタムAppを開く前にスクリプトデバッガを開いておくと、スクリプトデバッガが起動した状態でカスタムAppを開くことになるので、「OnFirstWindowOpen」のスクリプトトリガに設定されているスクリプトをデバッグすることができます。

まとめ

スクリプトを作成した時、スクリプトデバッガでデバッグすることはとても大事なプロセスです。そのためにスクリプトデバッガの使い方を理解し、使いこなすことによって開発の効率は必ず上がります。
また、デバッグの際はデータビューアもうまく使うことによって、問題解決のスピードが上がったり、さらなる開発効率アップも期待できます。

そして、スクリプトデバッガを使ってスクリプトが期待する結果になった場合でも、スクリプトをスクリプトデバッガ使わずに、実際に実行されるのと同じ環境で実行することを忘れないようにしましょう。

次回は「サーバー上のスクリプト実行」のように、スクリプトデバッガではデバッグできないような場合のデバッグ方法を紹介していきたいと思います。