FileMaker 2025 新機能:「レコード一覧へ移動」徹底解説 (第4回) 〜表示の可能性を広げる!FileMaker Data API と ExecuteSQL〜

このシリーズでは、Claris FileMaker 2025 で導入された待望の新機能、「レコード一覧へ移動」スクリプトステップについて深掘りしています。

第4回となる今回は、これまでとは少し角度を変えて、FileMaker Data APIExecuteSQL を利用して動的に対象レコードの ID リストを生成し、「レコード一覧へ移動」に渡すという、より高度で柔軟なテクニックについて徹底解説します。

このテクニックをマスターすれば、静的なリストや関連レコードだけでなく、複雑な条件に基づいたレコード表示が驚くほどシンプルに実装できるようになります。ぜひ最後までお付き合いください。

背景: なぜ Data API や ExecuteSQL が必要なのか?

「レコード一覧へ移動」は、レコード ID のリストを渡すことで指定したレコード群を瞬時に表示できる非常に強力な機能です。そして、この機能の能力を最大限に引き出すには、「いかにして動的にレコード ID のリストを取得するか」が鍵となります。

従来の FileMaker 開発 では、特定のレコード群を表示するために、以下のような工程が必要でした。

  • レイアウトに切り替える
  • 検索を実行して対象レコードを絞り込む
  • 関連レコードの処理に利用するためにリレーションシップを組む

これらは確実な方法ですが、開発規模が大きくなるにつれてレイアウトやリレーションシップグラフが複雑化したり、スクリプトが特定のコンテキスト (現在のレイアウトや対象レコード) に強く依存してしまうという課題がありました。

今回ご紹介する FileMaker Data APIExecuteSQL は、この「コンテキストの呪縛」から開発者を解放し、よりシンプルで高速なデータ取得を実現する強力な武器となります。

FileMaker Data API 検索で取得したレコード ID を活用する

まずは、「FileMaker Data API を実行」スクリプトステップを活用する方法です。このステップは、Claris FileMaker 2023 で導入され、FileMaker 内部のデータ操作に革命をもたらしました。

FileMaker Data API 活用のメリット

・コンテキストからの解放:
現在のレイアウトのテーブルオカレンス、対象レコード、ソート順に一切影響されません。スクリプトがどこで実行されても、安定してデータを取得できます。

・開発スピードの向上:
これまでレイアウト切り替えや関連レコード移動で行っていた処理を、JSON 形式のクエリを記述するだけで実行できます。これにより、レイアウトやリレーションシップの設計・管理の手間が大幅に削減されます。

「FileMaker Data API を実行」 検索結果の JSON をそのまま利用する

驚くべきことに、Data API の検索処理で返ってくる JSON は、ほとんど加工することなく「レコード一覧へ移動」で利用できます。

  1. Data API でレコード検索を実行:
    外部のアプリケーションや FileMaker 内部から FileMaker Data API のリクエストを送り、レコードを検索します。
  2. 結果から response.data を抽出:
    返ってきた JSON 結果 (変数 $result とします) から、JSONGetElement ( $result ; "response.data" ) を使って、レコードデータの配列部分を抽出します。
  3. 「レコード一覧へ移動」に設定:
    抽出した JSON を、そのまま「レコード一覧へ移動」スクリプトステップの「レコード ID の一覧」に設定します。

これだけで、Data API の検索結果と同じレコード群をクライアントに表示できます。

JSON
// Data API から返る JSON の例 ($result)
{
  "response": {
    "dataInfo": {
      //...省略
    },
    "data": [
      {
        "fieldData": {},
        "portalData": {},
        "recordId": "101",
        "modId": "3"
      },
      {
        "fieldData": {},
        "portalData": {},
        "recordId": "105",
        "modId": "1"
      }
    ]
  },
  "messages": [
    {
      "code": "0",
      "message": "OK"
    }
  ]
}

上記の JSON から JSONGetElement ( $result ; "response.data" ) で抽出した以下の部分を、そのままスクリプトステップに渡すことができます。

JSON
[
  {
    "fieldData": {},
    "portalData": {},
    "recordId": "101",
    "modId": "3"
  },
  {
    "fieldData": {},
    "portalData": {},
    "recordId": "105",
    "modId": "1"
  }
]

recordId 以外のキー (fieldData など) が含まれていても、JSON 形式では recordId だけを認識してくれるため、余計な処理は必要ありません。

実装のポイントと注意点

・取得件数の上限:
Data API の検索には、デフォルトで 100 件という取得上限があります。これを回避するには、リクエストに limit パラメータを追加しましょう。例えば _limit=1000000 のように大きな値を設定しておくことで、取りこぼしを防げます。

・専用レイアウトの活用:
レスポンスとして必要なのは recordId だけです。パフォーマンスを最適化するために、フィールドを何も配置しない Data API 専用のレイアウトを作成し、クエリのコンテキストとして指定するのがベストプラクティスです。これにより、不要なデータを転送せずに済み、処理が高速になります。

ちなみに、recordId のフィールドや検索条件やソート条件に指定するフィールドは、 Data API の実行コンテキストとなるレイアウト上に配置されている必要はありません。

ExecuteSQL で取得したレコード ID を活用する

次に、FileMaker 内部で完結する ExecuteSQL 関数を使った方法です。この手法の最大の特長は、リレーションを組んだり、専用のレイアウトを用意したりする必要がないというシンプルさです。ExecuteSQL 関数を一つ記述するだけで、必要なレコード ID のリストを手軽に取得できます。

ただし、ExecuteSQL はクエリが複雑になるとパフォーマンスに影響が出る場合があります。そのため、比較的シンプルな処理に用いるのがおすすめです。

ExecuteSQL 活用のメリット

・開発のシンプル化と高速化:
Data API と同様にコンテキストに依存しません。これまでリレーションシップやスクリプトで行っていたデータ取得を、計算式一行に置き換えることができ、開発工数を大幅に削減できます。

ROWID を使ってレコード ID を取得する

ExecuteSQL 関数内で FileMaker の内部的なレコード ID を取得するには、ROWID というキーを使用します。

例えば、”顧客” テーブルから “年齢” が 24歳のすべての顧客のレコード ID を取得するには、以下のように記述します。

ExecuteSQL (
  "SELECT ROWID FROM \"顧客\" WHERE \"年齢\" = ?" ;
  "" ;
  "" ;
  24
)

この計算式は、改行区切りのレコード ID のリストを返します。

101
105
123
...

そして、この結果もまた、「レコード一覧へ移動」スクリプトステップの「レコード ID の一覧」にそのまま設定することができます。

実装のポイントと注意点

・テーブル名の指定:
ExecuteSQL で指定するのはソーステーブル名ではなく、リレーションシップグラフ上のテーブルオカレンス (TO) 名です。

・パフォーマンス:
ExecuteSQL は FileMaker の検索エンジンとは独立して動作するため、適切に記述すれば非常に高速です。特に、リレーションを介さない単純なクエリは高速に結果を返します。JSON 関数や WHERE IN 句なども利用可能ですが、クエリが複雑になると速度に影響する場合があるため、実際の環境でパフォーマンスを確認しながら利用することをおすすめします。

・非保存計算フィールド:
非保存計算フィールドは通常の処理と同様に処理に時間がかかるので扱いには注意が必要です。

・レコードのキャッシュが有効:
一度取得したレコードは FileMaker Pro や FileMaker Go がローカル環境のキャッシュに保存するので、2回目からは高速な回答になる場合があります。

まとめ

今回は、「レコード一覧へ移動」スクリプトステップを、FileMaker Data API と ExecuteSQL と組み合わせることで、その可能性を大きく広げる方法について解説しました。

・FileMaker Data API は、現在のレイアウトや対象レコードを気にすることなく (コンテキストからの解放)、JSON を使って高速に開発できる点に長けています。

・ExecuteSQL は、リレーションシップや専用レイアウトが不要で、ファイル内でシンプルに完結し、SQL のクエリ能力を活かして効率的にレコード ID リストを生成する場合に最適です。

これらのテクニックは、これまでリレーションシップの追加や複雑なスクリプトのループ処理で実現していた課題を、よりシンプルで高速、かつメンテナンス性の高いアプローチで解決してくれます。

Claris FileMaker 2025 の新機能を最大限に活用し、よりスマートでパワフルなカスタム App を開発していきましょう!