
FileMakerで便利!私のおすすめハウスキーピングフィールド
はじめに
田中由利子@リバタスです。
このnoteは、FileMaker Advent Calendar 2023 の初日を飾る記事として、FileMakerでのデータ管理をより効率的かつ整理されたものにするための「ハウスキーピングフィールド」についてお話ししたいと思います。このカレンダーが10周年を迎えると聞いて、私も大変嬉しく思っています。tyumaさん、毎年の企画と情報発信に感謝します!
さて、個人的な話になりますが、私は1年前につくば市に移住し、新しい生活を始めました。移住してからの驚きの一つは、キジが身近に生息していることです。これまで福岡、奈良、東京など、さまざまな場所に住んできましたが、キジが隣人のように存在するのはつくばが初めてです。こんなに身近に野生の鳥がいることに、まあまあ都会育ちの私は驚かされました。
しかし、今日の記事の主役はキジではありません。FileMakerの開発において、私が重宝しているハウスキーピングフィールドについて、その有用性と使い方を共有してみたいと思います。
ハウスキーピングフィールドとは?
これは完全に私の好みですが、FileMakerでの開発において、最適なハウスキーピングフィールドについて考えることが大好きです。これらは、データベースの各テーブルに共通して設置されるフィールドを指します。
「ハウスキーピング」という言葉は、文字通りには「家事」を意味しますが、ここではデータベースの「掃除や整頓」を助ける役割を持つことを示しています。
実は、この用語はFileMakerの世界に特有のものであるようです。他のデータベース言語やシステムでは「システムフィールド」や「共通フィールド」といった名前で知られていることがあります。例えばSQLでは「システムフィールド」と呼ばれることが多いそうです。
ハウスキーピングフィールドには、レコードの作成者や更新日時、一意の識別子(ID)など、データベースの保守や追跡に役立つ情報が含まれます。これらのフィールドを適切に設定しておくことで、スクリプトが書きやすくなったり、ウインドウ名が付けやすくなったりして開発が楽になります。
これから、私がFileMakerで使用しているおすすめのハウスキーピングフィールドをいくつか紹介し、それぞれのフィールドがどのように役立つのかを解説していきます。
ハウスキーピングフィールド
それでは、実際に私がFileMakerで使用しているハウスキーピングフィールドの中から、特に重要と思われるものをピックアップして、その機能や使い方についてお話しします。
この16個です。

この16フィールドは基本的にどのテーブルにも設置しています。また、ハウスキーピングフィールドであることがわかりやすいよう、フィールド名の冒頭にzを使うように統一しています。
ちなみにハウスキーピングフィールドだけのテーブルを、Copyless2というMacのスニペットアプリに登録して、いつでも呼び出せるようにしてあります。

これから、私がなぜこれらのハウスキーピングフィールドを使っているのか、その理由を説明していきます。もし説明が少し難しく感じられる場合もあるかもしれません。そんな時のために、ブログの最後には実際のサンプルファイルを添付しています。
このサンプルは、シンプルな日報アプリです。ぜひダウンロードして、実際に触ってみて、どのように機能するのかをご確認いただければと思います。
さらに、この日報アプリは「分離モデル」で構成されています。つまり、異なる目的のために複数のファイルを使用しています。具体的には、以下のようなテーブル構造を持っています。

__id
これは各レコードに割り当てられる一意の識別子で、いわゆる主キーです。テキストフィールドで作成します。データベース内でレコードを特定する際に必要不可欠なものです。
Get ( UUID )
__pk_tableName
これは計算フィールドで、テーブル名を自動的に取得する役割を持ちます。これにより、どのレコードがどのテーブルに属しているかを簡単に識別できます。このような計算式を設定しています。
GetValue ( Substitute ( GetFieldName ( Self ) ; "::" ; ¶ ) ; 1 )
このフィールドをリレーションキーに含めて関連するオブジェクトレコードを作成すると、オブジェクトレコードから親レコードのテーブル名を確認することが出来て便利です。


__z0 と __z1
これらは計算フィールドで、それぞれ「0」と「1」の値を持ちます。これらのフィールドは、リレーションを作成する際に役立ち、特定の条件(例えば、フラグが0または1のレコード)に基づいて関連付けを行うことができます。


このリレーションを使って、特記事項に記載がある日報レコードの数を数えてみました。


za_accountCreated
レコードを作成したアカウント名を記入するフィールドです。

za_accountModified
レコードを編集したアカウント名を記入するフィールドです。

za_timestampCreated
レコード作成時のタイムスタンプを設定するフィールドです。

za_timestampModified
トリガフィールドが変更されたタイムスタンプを設定するフィールドです。

za_trigger_modified
修正タイムスタンプを更新するトリガとなるフィールドです。

zb_serialNumber
これは数字フィールドで、シリアル番号を設定するために使います。シリアル番号はレコードごとにユニークです。レコードを特定する目的では、同じくユニークである主キーも重要な役割を持っていますが、ユーザが読みにくいのが難点です。 ユーザが使う画面にはこちらのフィールドを表示することで、データの追跡を行いやすくなります。

zc_display_serialNumber
この計算フィールドは、シリアル番号を基にして桁数の編集やプレフィックスの追加を行います。例えば、ウインドウ名などに「No.00001」といった形式で表示されるように設定できます。
"No." & Right ( "00000000000000000000" & zb_serialNumber ; 5 )
zg_id
グローバルフィールドで、UUIDを設定し、子テーブルのレコード作成に使用します。このフィールドにより、レコード間の関連付けが容易になります。
サンプルアプリではこのように使っています。


zg_ids
これもグローバルフィールドで、以下の2つの用途で使用されます:
一時的に改行区切りの値を保存し、スクリプトに渡します。
改行区切りの値を設定し、対象となるレコードを参照します。
このサンプルファイルでは、特に1番目の用途で利用されています。
サンプルアプリでは、下記の場所で使っています。



zg_quickSearch
これはグローバルフィールドで、検索窓として設置し、クイック検索に使用します。ユーザーはこのフィールドを通じて、必要な情報を迅速に見つけることができます。


zs_id_list
これは__idフィールドの一覧を集計するフィールドです。複数のレコードのIDを一覧で確認する際に役立ちます。

zz_dummy
最後に、zz_dummyフィールドは主にテスト用途で使用されます。任意の計算式を試すために設けられており、通常のユーザーインターフェースには表示されません。
まとめ
以上、16個をご紹介しました。
最適なハウスキーピングフィールドの組み合わせは何か?ということを考えるのが私のライフワークなので、今回は大好物のハウスキーピングフィールドネタを記事にしてみました。
もし皆さんの中に、「私もこのフィールドを使っている」とか「こんな設定変更で新たな用途に活用できる」といったアイディアがあれば、コメント欄でぜひ教えてください。
そしてともにハウスキーピングフィールドネタで盛り上がり、FileMakerの世界をより豊かなものにしていきましょう!