FileMakerスクリプトを「途中でやめる」発想が大事
FileMakerでスクリプトを書いていると、
「条件に合わないときは、ここで処理をやめたい」
「エラーが出たら、それ以上進めずに安全に止めたい」
と感じる場面がよくあります。
ところが、スクリプトの最後まで処理が流れてしまい、
意図しないレコード更新やメール送信が走ってしまうことも…。
これを防ぐための基本テクニックが「スクリプト終了で処理を早期中断する設計」です。
この記事では、難しい専門用語をできるだけ避けて、
FileMakerスクリプトを安全かつスッキリ書くための
「途中で処理をやめる」設計の考え方と、具体的な操作方法を解説します。
なぜ「早期中断」が大事なのか
長く複雑なスクリプトほど、途中で条件を満たさないケースが出てきます。
たとえば、次のような場面です。
- 対象レコードが見つからなかった
- 必須項目が空欄だった
- 権限のないユーザーが実行した
- 外部ファイルが開けなかった
こうした場合、本来は「そこで処理を終わらせたい」はずなのに、
スクリプトがそのまま続いてしまうと、
結果的に不正なデータ更新や、エラーの連鎖につながります。
逆に言うと、「条件を満たさないときはすぐ止める」
というルールを先に決めておくと、スクリプトはぐっとシンプルになり、
動作確認も楽になります。
基本は「スクリプト終了」ステップを迷わず使う
早期中断の中心になるのが、スクリプトステップ「スクリプト終了」です。
これは、その時点でスクリプトの処理を終了するための命令です。
使い方のイメージは次のような流れです。
- 最初に前提条件をチェックする
- 条件に合わなければ「スクリプト終了」
- 条件を満たした場合だけ、後続処理を実行
たとえば、「顧客IDが空なら処理をやめる」という場合は、
次のような構成になります。
If [ IsEmpty ( 顧客::顧客ID ) ]
Show Custom Dialog [ "顧客IDが未入力です。" ]
Exit Script [ Result: "ERROR: 顧客ID未入力" ]
End If
# ここから下は、顧客IDがある場合だけ実行
…メインの処理…
ポイントは、「おかしな状態なら先に出ていく」考え方で、
正常なケースの処理を、下にスッキリと並べることです。
条件チェックはできるだけ「最初にまとめて」
スクリプトの途中で「If が何度も出てきて、何をしているのか分かりづらい」
という悩みもよくあります。これを避けるには、
重要な前提条件のチェックはスクリプトの冒頭でまとめて行う
のがおすすめです。
例として、次のような前提条件を、最初にまとめて確認します。
- 対象レコードが1件以上存在するか
- 必須フィールドがすべて入力されているか
- 実行ユーザーのアカウント名や権限セット
これを個別にチェックし、それぞれの条件で
「スクリプト終了」を呼び出します。
そうすることで、メインの処理部分には、
「前提条件はすでに満たしている」という前提で
素直な流れだけを書けるようになります。
戻り値で「終わり方」をわかりやすくする
スクリプトの中断をより分かりやすくするには、
「スクリプト終了」のオプションで戻り値を返す設計が有効です。
たとえば、サブスクリプトからは次のように返します。
If [ 条件NG ]
Exit Script [ Result: "ERROR: 条件不一致" ]
End If
Exit Script [ Result: "OK" ]
メインのスクリプト側では「スクリプトを実行」ステップの
結果を変数に受け取り、その値を見て判断します。
Perform Script [ "サブスクリプトA" ]
Set Variable [ $result ; Value: Get ( ScriptResult ) ]
If [ $result ≠ "OK" ]
Show Custom Dialog [ "処理に失敗しました:" & ¶ & $result ]
Exit Script [ Result: $result ]
End If
# ここから先は、サブスクリプトAがOKの場合のみ実行
このように「OK / NG」といった簡単な戻り値を決めておくだけでも、
どこで中断されたかが追いやすくなり、デバッグも楽になります。
エラー発生時の「安全な抜け方」を決めておく
ファイルのインポートや、外部サービスとの連携など、
失敗する可能性がある処理では、
エラーが出たときの抜け方をあらかじめ決めておくことが重要です。
基本的な考え方は次の通りです。
- エラーが起こりうるステップの直後に「Get ( LastError )」で確認
- エラーがあれば、必要に応じてメッセージ表示
- その時点で「スクリプト終了」して、これ以上進ませない
簡単な例は次のようになります。
Import Records [ … ]
Set Variable [ $error ; Value: Get ( LastError ) ]
If [ $error ≠ 0 ]
Show Custom Dialog [ "インポート中にエラーが発生しました(エラーコード:" & $error & ")" ]
Exit Script [ Result: "ERROR: インポート失敗 (" & $error & ")" ]
End If
# エラーがなければ、後続の処理へ
このように「エラー検出 → メッセージ → スクリプト終了」という
パターンをテンプレート化しておくと、同じ考え方で
スクリプト全体を統一でき、保守性が高まります。
「早期中断」を前提にしたスクリプト設計のコツ
最後に、日常的に取り入れやすい設計のコツをまとめます。
- 前提条件はスクリプトの冒頭でまとめてチェック
- 条件NGなら迷わず「スクリプト終了」で抜ける
- サブスクリプトは「OK / ERROR」などの戻り値を返す
- エラーを想定できる処理の直後には、必ずエラー確認を挟む
- メイン処理は「前提条件を満たした世界」だけを書く
こうしたルールをチームで共有しておくと、
誰が書いたスクリプトでも読みやすくなり、
「どこで処理が止まるのか」がイメージしやすくなります。
FileMakerのスクリプトは、つい「最後まで流す」ことを前提に
書いてしまいがちですが、むしろ「途中でやめる設計」を意識することで、
安全でシンプルなシステムに近づけることができます。
ぜひ、日々のスクリプト作成で試してみてください。