Get(ScriptResult)で親子スクリプト連携
スクリプト

Get(ScriptResult)で親子スクリプト連携

2026年5月8日 admin スクリプト

親子スクリプトの「情報の受け渡し」で困っていませんか?

FileMakerでスクリプトを書いていると、「共通処理を別スクリプトに切り出したい」「サブスクリプトから、結果だけ親スクリプトに返したい」といった場面がよくあります。いわゆる「親子スクリプト」の連携です。

ところが、いざ分けてみると…

  • サブスクリプトで計算した結果を、どうやって親に返せばいい?
  • グローバル変数やグローバルフィールドを多用して、どこで値が変わったのか分からなくなる
  • 同じようなスクリプトが増えてしまい、メンテナンスが大変

といった問題が起きがちです。この記事では、Get ( ScriptResult ) 関数を使って、親子スクリプト間の情報をシンプルに受け渡しする方法を、できるだけ分かりやすく解説します。

Get ( ScriptResult ) って何をする関数?

Get ( ScriptResult ) は、簡単に言うと「直前に終了したスクリプトで返された結果」を取り出すための関数です。よく使う場面は、親スクリプトからサブスクリプトを「スクリプト実行」ステップで呼び出したあと、その結果を受け取りたいときです。

イメージとしては次のような流れです。

  1. 親スクリプトがサブスクリプトを呼び出す
  2. サブスクリプトの最後で「スクリプト結果を返す」
  3. 親スクリプトが Get ( ScriptResult ) でその値を受け取る

グローバル変数をわざわざ用意しなくても、サブスクリプト1回の実行につき1つの結果を、シンプルに返すことができるのがポイントです。

基本パターン:合計金額をサブスクリプトで計算して返す

実際のイメージをつかみやすいように、具体例で見てみましょう。ここでは「見積書」のようなレイアウトを想定して、

  • サブスクリプト:明細行を集計して合計金額を計算する
  • 親スクリプト:合計金額をフィールドにセットする

という構成にしてみます。

1. サブスクリプト側の作り方

サブスクリプト(例:「合計金額を計算」)では、最終的に数値(合計金額)を「スクリプト結果」として返します。大まかな流れは次のようになります。

  1. 対象の明細レコードに移動する
  2. 必要なら検索・ソートをする
  3. 合計を計算する(例:集計フィールドや集計関数を使用)
  4. スクリプトステップ「スクリプト終了」で、計算した値を結果として返す

最後のステップが重要です。例えば:

スクリプト終了 [ 結果: 明細テーブル::合計金額 ]

このように「スクリプト終了」ステップに計算式を指定しておくと、その値が親スクリプトから Get ( ScriptResult ) で取得できるようになります。

2. 親スクリプト側の作り方

親スクリプト(例:「見積書の合計を更新」)では、次のような流れになります。

  1. 「スクリプト実行」ステップで「合計金額を計算」スクリプトを呼び出す
  2. すぐ後で Get ( ScriptResult ) を使って結果を変数に代入する
  3. 受け取った合計金額を、見積書のヘッダテーブルのフィールドにセットする

ステップ例は次のようになります。

# 1. サブスクリプトを実行
スクリプト実行 [「合計金額を計算」]

# 2. 結果を変数に受け取る
変数を設定 [ $合計 ; 値: Get ( ScriptResult ) ]

# 3. 見積ヘッダに書き込む
フィールド設定 [ 見積ヘッダ::合計金額 ; $合計 ]

これで、サブスクリプトで計算した合計金額が、シンプルに親スクリプトへ渡されます。

Get ( ScriptResult ) を使うメリット

親子スクリプトで Get ( ScriptResult ) を使うと、次のようなメリットがあります。

  • グローバル変数に頼らずに済む
    返したい値だけを「スクリプト結果」として返せばよいので、どこからでも書き換え可能なグローバル変数を多用する必要が減ります。
  • スクリプトの役割がはっきりする
    サブスクリプトは「入力 → 処理 → 結果を返す」という1つの流れにまとめやすくなり、再利用性も高まります。
  • テストしやすい
    サブスクリプト単体で実行して「スクリプト結果」に何が返っているか確認することで、動作確認がしやすくなります。

複数の情報を返したいときの工夫

「合計金額だけでなく、税額や明細行数も一緒に返したい」というように、複数の値を返したい場合もあります。その場合は、以下のような工夫がよく使われます。

  • 改行で連結して 1 つのテキストにまとめる
  • 区切り文字(カンマなど)で連結して、親側で分解する
  • JSON 形式でまとめて返す(JSONSetElement / JSONGetElement を利用)

例として、JSON 形式で返すパターンを簡単に紹介します。

サブスクリプト側

変数を設定 [ $json ;
  値: JSONSetElement ( "" ;
    [ "total" ; 明細テーブル::合計金額 ; JSONNumber ] ;
    [ "tax"   ; 明細テーブル::税額      ; JSONNumber ] ;
    [ "count" ; 明細テーブル::行数      ; JSONNumber ]
  )
]

スクリプト終了 [ 結果: $json ]

親スクリプト側

変数を設定 [ $result ; 値: Get ( ScriptResult ) ]

変数を設定 [ $total ; 値: JSONGetElement ( $result ; "total" ) ]
変数を設定 [ $tax   ; 値: JSONGetElement ( $result ; "tax" ) ]
変数を設定 [ $count ; 値: JSONGetElement ( $result ; "count" ) ]

このようにしておくと、後から返したい情報を追加・変更しやすくなり、親子スクリプトの連携も分かりやすく保てます。

使うときに気を付けたいポイント

  • 必ず「スクリプト実行」の直後に呼び出す
    Get ( ScriptResult ) は「直前に終了したスクリプト」の結果だけを返します。間に別のサブスクリプトの実行やカスタムダイアログをはさむと、想定していない結果になることがあります。
  • 空の結果もあり得る
    サブスクリプトの中で「スクリプト終了」が実行されなかった場合、結果が空になります。意図的に「失敗時は空を返す」と決めておくなど、ルールを決めておくとよいでしょう。
  • 戻り値の型(数値・テキスト)を意識する
    文字列として返しているつもりが、数値として評価されてしまうなどのトラブルを防ぐため、特に計算で使う場合は型を意識して扱いましょう。

親子スクリプトを「会話」させるイメージで設計しよう

Get ( ScriptResult ) を使うと、親スクリプトとサブスクリプトが「質問と回答」をやり取りするような、分かりやすい関係を作ることができます。

  • 親スクリプト:サブスクリプトに「これを計算して」と依頼する
  • サブスクリプト:計算して「結果はこれです」と返す

この考え方でスクリプトを組み立てると、あとから見直したときにも「どこで何をしていて、どこからどこへ値が渡っているのか」が理解しやすくなります。

すでにグローバル変数やグローバルフィールドを多用しているスクリプトでも、一部ずつ Get ( ScriptResult ) 方式に置き換えていくことで、動作がシンプルになり、保守性も上がっていきます。まずは、よく使う共通処理のサブスクリプトから試してみてください。

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