GetFieldNameで式の堅牢性を高める
基礎知識

GetFieldNameで式の堅牢性を高める

2026年5月23日 admin 基礎知識

FileMakerでスクリプトや計算式を作っていると、「フィールド名を変えたら計算が壊れた」「コピーして使い回したら、どこかだけ古いフィールド名のままだった」といった経験はないでしょうか。小さなファイルならまだしも、運用年数が長くなり、レイアウトやフィールドが増えてくると、こうした「見落とし」が思わぬ不具合を生むことがあります。

この記事では、そうしたトラブルを減らし、式の「壊れにくさ(堅牢性)」を高めるために役立つ GetFieldName 関数の使い方を、できるだけやさしい言葉で解説します。

GetFieldNameが必要になる理由

FileMakerの計算式では、つい次のようにフィールド名を「文字」として直接書いてしまいがちです。

If ( Table::ステータス = "完了" ; 1 ; 0 )

この書き方自体は間違いではありませんが、次のような変更が入ると危険です。

  • 「ステータス」フィールドの名前を「進捗ステータス」に変更した
  • テーブル名を変更した
  • フィールドのコピー&ペーストで、名前だけ手修正した

計算の中に「Table::ステータス」と文字列で書いてある部分は、自動では書き換わりません。そのため、古いフィールド名のまま残ってしまい、エラーや意図しない動作を招くことがあります。

こうした「名前変更に弱い計算式」を、できるだけ自動で追従させるために便利なのが GetFieldName 関数です。

GetFieldNameの基本的な考え方

GetFieldName は、指定したフィールドの「完全修飾名(テーブルオカレンス名::フィールド名)」をテキストとして返す関数です。

GetFieldName ( Table::ステータス )
-- 結果例:「Table::ステータス」

ここでポイントになるのは、「フィールド名を直接文字で書く」のではなく、「フィールドそのものを指定して、その名前を取得させる」という考え方です。フィールドの名前やテーブル名を変えたとしても、GetFieldNameで参照しているオブジェクトと紐づいているため、式の中身も自動で追従してくれます。

文字列でフィールド名を扱うときの典型的な使い方

FileMakerでは、フィールド名を文字列として扱いたい場面がいくつかあります。代表的なのは次のようなケースです。

  • Evaluate関数で「文字列から式を評価」するとき
  • ExecuteSQL関数でフィールド名を指定するとき
  • JSONやログとして「フィールド名」を保存したいとき

こうした場面で、フィールド名を直接「Table::ステータス」と書くのではなく、必ず GetFieldName を通すことで、名前変更に強い式になります。

Evaluate (
    Quote ( GetFieldName ( Table::ステータス ) ) & " = "完了""
)

このように書いておけば、「ステータス」フィールドの名前を変えても、Evaluateの中身も自動的に更新されます。

実用例1:ExecuteSQLで堅牢性を上げる

ExecuteSQL 関数で集計や検索をしている方も多いと思います。ありがちな書き方は次のようなものです。

ExecuteSQL (
    "SELECT "ステータス" FROM "Table" WHERE "顧客ID" = ?" ;
    "" ; "" ;
    Table::顧客ID
)

この書き方では、「ステータス」や「顧客ID」の名前を変えたときに、SQLのテキストが自動で更新されません。そこで GetFieldName でフィールド名を組み立てます。

Let (
    [
        fieldStatus = Quote ( GetFieldName ( Table::ステータス ) ) ;
        fieldKey    = Quote ( GetFieldName ( Table::顧客ID ) )
    ] ;
    ExecuteSQL (
        "SELECT " & fieldStatus &
        " FROM \"Table\" WHERE " & fieldKey & " = ?" ;
        "" ; "" ;
        Table::顧客ID
    )
)

ポイントは、SQLの「カラム名」の部分をすべて GetFieldName で組み立てていることです。これにより、フィールド名を変更しても式が自動的に追従し、メンテナンス性が大きく向上します。

実用例2:Evaluateで柔軟な計算式を組み立てる

ユーザーが選んだフィールドをもとに並び替えたり、条件を変えたりするような柔軟な仕組みを作るとき、Evaluate を使って動的に計算式を組み立てることがあります。

よくあるパターンは、カスタム関数やスクリプトで「フィールド名のテキスト」を受け取り、それを Evaluate で評価する方法です。このとき、引数に直接文字列を書いてしまうと、名前変更に弱くなります。

そこで、引数として渡すのは必ず GetFieldName ( Table::フィールド ) の結果にします。

カスタム関数例:
Calc_SortValue ( fieldName ; value ) =
    Evaluate (
        Quote ( fieldName ) & " = "" & value & """
    )

-- 呼び出し側
Calc_SortValue (
    GetFieldName ( Table::ステータス ) ;
    "完了"
)

こうしておけば、カスタム関数内は「フィールドの名前」ではなく「フィールドを指すテキスト」として扱えるので、あとからフィールド名やテーブル名を変更しても安全です。

運用上のコツと注意点

GetFieldName を使い始めると、つい「どこでも全部使わなくては」と考えがちですが、ポイントを押さえて使うのがおすすめです。

  • 「文字列としてフィールド名を扱うとき」は必ずGetFieldNameを通す
    ExecuteSQL・Evaluate・JSON・ログ出力など、フィールド名をテキストとして書く場面は、できるだけすべてGetFieldNameで生成します。
  • 通常の計算式内の『Table::フィールド』は、そのままでも自動追従される
    計算式エディタで直接指定したフィールド参照(青いフィールド指定)は、フィールド名変更時に自動で更新されます。そのため、あえてGetFieldNameに置き換える必要はありません。
  • カスタム関数やスクリプト引数の「型」を決めておく
    「フィールド名を渡すときは、常にGetFieldNameで渡す」とチーム内ルールにしておくと、コードの読みやすさと堅牢性が一気に上がります。

慣れてくると、「テキストにフィールド名を書く=危険」「GetFieldName経由で扱う=安全」という感覚が自然と身についてきます。最初は一部のスクリプトからでも構わないので、段階的に導入してみてください。

まとめ:小さなひと手間で、壊れにくいファイルへ

GetFieldName は、見た目には地味な関数ですが、長く運用するFileMakerシステムの「壊れにくさ」を支える、非常に重要な役割を持っています。

  • フィールド名を「文字列で書く」と、名前変更に弱くなる
  • GetFieldNameでフィールド名を取得すれば、自動で名前変更に追従できる
  • ExecuteSQL・Evaluate・JSON・ログなど「文字列でフィールド名を扱う場面」では必須
  • チーム内で「フィールド名はGetFieldName経由で渡す」というルールを決めると効果的

一度書いたスクリプトや計算式は、数年後の自分や別の担当者が読むことになります。あとで困らないためにも、今日から少しずつ GetFieldName を取り入れてみてください。

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