スクリプトトリガで必須項目チェック実装術
スクリプト

スクリプトトリガで必須項目チェック実装術

2026年3月11日 admin スクリプト

FileMakerで入力画面を作っていると、「必須項目が空なのにレコードが保存されてしまう」「入力漏れに気づかず後から集計でおかしくなる」といった悩みがよく出てきます。
こうした入力ミスを減らすために便利なのが「スクリプトトリガ」を使った必須項目チェックです。
この記事では、専門用語をできるだけ避けながら、スクリプトトリガで必須チェックを実装する基本的な考え方と手順を紹介します。

スクリプトトリガで必須チェックをするメリット

まずは、なぜスクリプトトリガを使って必須チェックをすると良いのかを整理しておきます。

  • 入力のタイミングでチェックできる
    レコードを保存するときやフィールドからカーソルが外れたタイミングでチェックできるので、ユーザーがその場で気づけます。
  • 画面ごと・フィールドごとに柔軟に設定できる
    「このレイアウトでは必須」「このフィールドだけ必須」のように、状況に応じたチェックが可能です。
  • メッセージ表示やフォーカス移動などの動きを自由に作れる
    単にエラーを出すだけでなく、「メッセージを出して該当フィールドへ戻す」といった、わかりやすい動作にできます。

どのタイミングで必須チェックを行うか決める

必須チェックを行うタイミングは主に次の2つから選びます。

  • レイアウトから離れるとき(OnLayoutExit)
    画面を閉じたり、別のレイアウトに移動したりする直前にまとめてチェックします。
  • レコードをコミットするとき(OnRecordCommit)
    レコードが保存される直前にチェックします。
    実務では「保存時に必ずチェックしたい」ことが多いので、OnRecordCommitトリガを使うケースがよくあります。

ここでは、汎用的に使いやすい「OnRecordCommit」を使う前提で話を進めます。

必須チェック用のスクリプトの作り方

まずは「このレイアウトで入力すべき必須項目がすべて埋まっているか」を確認するためのスクリプトを作成します。

  1. 新規スクリプトを作成
    メニューから「スクリプトワークスペース」を開き、新しいスクリプトを作成します。
    スクリプト名の例:
    必須項目チェック_受注入力
  2. 必須にしたいフィールドを決める
    例として、次のようなフィールドを必須とします。
    ・顧客名
    ・受注日
    ・担当者
    ・合計金額
  3. 簡単な条件分岐でチェックする
    中身が空かどうかを If ステップで判定し、空ならメッセージを出してキャンセルします。
    イメージとしては次のような流れです。

    • 顧客名が空なら
      → カスタムダイアログで「顧客名は必須です」と表示
    • レコードのコミットをキャンセル(スクリプトの戻り値で制御)
    • 顧客名フィールドに戻す(Go to Field ステップ)

スクリプトの例(疑似コード)

If [ IsEmpty ( 顧客::顧客名 ) ]
  Show Custom Dialog [ "顧客名は必須です。" ]
  Go to Field [ 顧客::顧客名 ]
  Exit Script [ Result: False ]
End If

If [ IsEmpty ( 受注::受注日 ) ]
  Show Custom Dialog [ "受注日は必須です。" ]
  Go to Field [ 受注::受注日 ]
  Exit Script [ Result: False ]
End If

# すべて問題なければ
Exit Script [ Result: True ]

ポイントは、必須項目が空だったときに「False」などの値を返し、問題なければ「True」を返すことです。あとでトリガ側でこの結果を使います。

トリガ(OnRecordCommit)への紐づけ方

スクリプトが用意できたら、次はレイアウトにスクリプトトリガを設定します。

  1. 必須チェックを行いたいレイアウトを開き、「レイアウトモード」に切り替えます。
  2. メニューから「レイアウト設定」を開きます。
  3. 「スクリプトトリガ」タブを選択します。
  4. 「レコードがコミットされる前(OnRecordCommit)」にチェックを入れ、「指定」ボタンから先ほど作成したスクリプト(例:必須項目チェック_受注入力)を選択します。

ここで重要なのが、スクリプトの戻り値と「コミットをキャンセルするかどうか」の関係です。
FileMakerでは、OnRecordCommit で実行したスクリプトが False(0)を返すと「キャンセルした」とみなされ、レコードのコミットが中止されます。
そのため、エラー時には Exit Script [結果: False]、正常時は Exit Script [結果: True]とすることで、コミットの可否を制御できます。

よくあるつまずきポイントと対策

実際に設定してみると、次のようなつまずきが起こりがちです。

  • ずっとエラーが出続けてレコードから抜けられない
    必須チェックの条件が厳しすぎたり、スクリプト内部で無限ループ的な動きになっている場合があります。
    まずは必須項目を最小限に絞ってテストしましょう。
  • ポータル行の必須チェックがうまくいかない
    ポータル内のレコードをチェックする場合は、「ポータル行をループしながら空の行を探す」といった一工夫が必要です。
    はじめは親レコード側だけで運用し、慣れてきたらポータルのチェックに広げるのがおすすめです。
  • 戻り値の設定を忘れてコミットが止まらない
    Exit Script の結果が空だと、意図通りに動かないことがあります。
    必ず「True / False どちらかを返す」ルールを決めておくと混乱を防げます。

運用しながら少しずつブラッシュアップする

必須項目チェックは、一度作って終わりではなく、運用しながら改善していく機能です。

  • 最初は本当に必要な数項目だけを必須にする
  • ユーザーから「ここも抜けると困る」といった声を聞いて徐々に追加する
  • メッセージの文言をわかりやすく修正する

といったサイクルを回すことで、「使いやすくてミスが少ない」入力画面を育てていけます。
スクリプトトリガをうまく活用すると、ユーザーにとっても開発者にとっても負担が少ない形で品質を高められるので、ぜひ試してみてください。

※ 本稿は、生成AIを使用して執筆しています。重要な内容については、必ずご自身でマニュアル等をご確認ください。