Claris FileMakerで大規模データの集計を高速化する方法

2026年01月28日 12:00 PM

ファイルメーカーのTips


〜JSONを使って処理を劇的に軽くする実例〜

Claris FileMaker(ファイルメーカー)で業務システムを運用していると、「集計画面の表示が遅い…」「ソートに時間がかかる…」と感じることはありませんか?
特にレコード数が増えると、従来型の集計方式ではパフォーマンス低下が起きやすくなります。これは販売管理・工事管理・受注管理など、日々レコードが大量に増える業務では特に顕著で、業務効率に直接影響する大きな課題です。

今回は、実際の開発現場で効果絶大だった「JSONを使った高速集計」の手法を、初心者の方にもわかりやすく解説します!


1. なぜ「普通の集計」は遅くなるのか?

まず、これまでの一般的な集計方法(集計フィールドやポータルでの合計)を振り返ってみましょう。

例えば毎月数万点の商品が販売され、月ごとの「販売金額」を集計するとします。

【図解イメージ1:従来の方法】
従来の方法では、FileMaker は集計のたびに「全レコードを読み込み → 条件で絞り込み → 合計値の計算」を実行します。そのためレコード数が増えるほど計算にかかる時間が指数的に増えていきます。

またネットワーク越しの場合、サーバーから大量のデータをダウンロードするため、表示が極端に遅くなる原因となります。


2. JSONを使った「持たせない」集計の仕組み

今回の解決策は、「あらかじめ月ごとの合計値を一つのテキストフィールドにまとめて持っておく」という方法です。ここで活躍するのがJSONです。JSONとは「名前」と「値」をセットで管理できるデータ形式で、複数の金額をひとつのフィールドにまとめて保存できる“柔軟な入れ物”のようなものです。

新しいテーブル構成

新しく「月次実績」というテーブルを作ります。

  • レコードの単位 = 年月で1レコード
  • 販売金額json(テキストフィールド): ここに、複数の取引ごとの販売金額をJSON形式で保存します。

例えば、4月に販売された取引ごとの金額をまとめると、次のようなJSONになります。

【JSON中身】
{
  “商品A” : 25600580,
  “商品B” : 25589080,
  “商品C” : 15269870
}

このように、「どの取引がいくらか」を一つの箱(フィールド)に詰め込みます。


3.実装のキモ:JSONを計算式で合計する

「箱に詰めたのはいいけど、どうやって合計するの?」と思いますよね。ここでこんな計算式を使います。この計算式は「JSONに入っている複数の金額を取り出し、足し算できる形に変換して合計する」ためのものです。

合計値を出す計算式

集計用の「月次実績」テーブルに、以下のようなオプションを設定した計算フィールド(結果は数字)を作成します。

Let (
[
~json = 販売金額json;
~jsonListValue = JSONListValues ( ~json ; “” ); // JSONから値だけを一覧(改行区切り)で出す
~calc = Substitute ( ~jsonListValue ; “¶” ; “+” ) // 改行を “+” に置き換える
] ;
Case (
IsEmpty ( ~json ) or IsEmpty ( ~jsonListValue ); 0;
Evaluate ( ~calc ) // 「25600580+25589080+15269870」という文字列を計算式として実行!
)
)

【計算の流れ】

  1. JSONの値を取り出す → 25600580¶25589080¶15269870
  2. 改行をプラスに変える → 25600580+25589080+15269870
  3. Evaluate関数が「これ計算して!」と命令 → 66459530

この方法なら、数千件のレコードを読み込む必要はありません。自分のレコードにある1つのフィールドを見るだけなので、一瞬で表示が終わります。

また計算結果も非保存ではない計算フィールドにできますので、販売金額json(テキストフィールド)が変更されない限り、再計算されません。
過去の月の金額は基本的に変わらないため、計算結果を保持しておくことで表示が非常に速くなり、毎回再計算する必要もありません。

4. データを最新に保つ方法

JSONの中身は、ある商品の販売の金額が変わったタイミングで更新します。

スクリプトの処理手順:

1. 対象商品の金額が変更されたタイミングをトリガーとする
2. 「月次実績」テーブルから該当する年月のレコードを検索
3. JSONSetElement 関数を使って、その取引の金額をJSON内で上書きし、レコードを保存する

これだけで、常に最新の合計値が保たれます。

まとめ:この手法のメリット・注意点

この方法は特に以下のようなシステムで効果を発揮します

・販売管理や受注管理など、毎日大量のレコードが追加される業務

・リスト表示やソートを頻繁に行う画面があるシステム

・ネットワーク越しに Claris FileMaker を利用する環境

◎ メリット

  • 圧倒的な速さ: リスト表示やソートが、レコード数に関わらず一瞬で完了します。
  • サーバー負荷の軽減: 大量のレコードを読み込まないため、ネットワークが重い環境でも快適です。

△ 注意点

  • スクリプトの実装が必要: 金額が変わった時にJSONを更新する処理を作る必要があります。
  • データの整合性: 万が一のために、夜間にJSONを再計算して整合性を合わせるバッチ処理などがあると安心です。

最後に

「集計が遅い」はユーザーのストレスに直結します。
JSONを「データの貯金箱」のように使うこのテクニック、ぜひ皆さんのシステムでも試してみてください!