FileMaker Data API を使う 2025 年版 vol.1

　今回は、FileMaker ソリューションを REST API として使う FileMaker Data API について。
 まずは、準備編。

## 利用環境

　以下の環境を前提に説明しています。

 - Claris FileMaker Pro 21.1.1.41 macOS
 - Claris FileMaker Server 21.1.1.40 Ubuntu 22(AMD)
 - サーバ: Ubuntu 22.04.5 LTS
 - SSL 証明書
 - リクエストする側のサーバ（任意）

 　開発段階では、以下を使用した方が楽でしょう。

 - Postman Version 11.30.0

## データソースの準備の前に

　FileMaker ソリューションをデータソースとして使い REST API として機能させる方法として、FileMaker Data API と OData を選択できます。

　OData は、汎用性の高い規格ですが、FileMaker Data API は名前の通り FileMaker プラットフォーム専用となります。

　FileMaker Data API は FileMaker に特化されていることもあり、その考え方も FileMaker に合わせたものになっています。

　データソースを準備する段階で、Odata と FileMaker Data API のどちらが適切なのか検討してください。
[API ソリューションの比較](https://help.claris.com/ja/odata-guide/content/api-solution-comparison.html)

## FileMaker Data API で使う、FileMaker ソリューション

　FileMaker は、他のSQL ベースのリレーショナルデータベース管理システムとは、成り立ちが大きく異なります。
 乱暴な言い方を敢えてすると
 
 「**FileMaker では、テーブルは必ずエイリアスを作成し、レコードの操作は、そのエイリアスを元にした VIEW を通して行わなければならない**」
 
 ということになります。これを FileMaker 用語で言い直すと
 
 「**FileMaker では、テーブルは必ずテーブルオカレンスを作成し、レコードの操作は、そのテーブルオカレンスを元にしたレイアウトを通して行わなければならない**」

　大変、迂遠な印象ですけど、これが、RAD ツール、ローコードツールとしての FileMaker を支えているものの一つだと思います。

 　FileMaker Data API は、FileMaker ソリューションを REST API で使おうとするものですから、FileMaker Data API もこの制限から免れません。

　もう一つ。FileMaker は起源がカード型データベースで、擬似リレーショナルデータベースの段階を経て、Version 7 でリレーショナルデータベースになりました。現在は、Version 21.1.1.41 です。
　起源がカード型データベースというところがポイントで、FileMaker は内部的なプライマリーキー（主キー）を持っていて、ユーザが恣意的にプライマリーキーを設定しなくてもレコードを一意に特定することが可能になっています。これを レコード ID（RecordID）と言います。レコード ID は、通常は開発者を含めユーザには見えません。
 　レコード IDを知るには、「Get (レコード ID)」関数を使用して取得することになります。

  この仕様からもFileMaker Data API は基本的には、逃れることができません。もちろん、恣意的に設定したプライマリーキーを指定して、レコードを取得することはできますが、FileMaker の内部的なプライマリーキーがレコード ID であることには変わりありません。

- **FileMaker Data API のレコード操作は、レイアウトを必要とする**
- **FileMaker ソリューションの内部的なプライマリーキーはレコード ID である**

## FileMaker ソリューションのファイル名とレイアウト名

 FileMaker Data API で使用する FileMaker ソリューションのファイル名、及び、そのソリューション内で、FileMaker Data API でアクセスするレイアウトの名称は、半角英数字、_（アンダースコア）のみで命名するようにして下さい。

## データソースの準備

 FileMaker Data API を使うための FileMaker ソリューションファイルには、次の設定が必要です。
 - FileMaker アカウント
 - そのパスワード
 - 拡張アクセス権 fmrest

 **ファイル＞管理＞セキュリティ...** 、「**+新規**」ボタンでアカウント及びパスワードを設定して下さい。

 その際に、「**アクセス権セット**」を選択しますが、あとで設定できるので、任意のものを選択します。

 アカウント、アクセス権セットは、専用のものを用意することを推奨します。

#### アクセス権セット

 FileMaker Data API で使用するアカウントに設定するアクセス権セットには、拡張アクセス権「**fmrest**」が設定されている必要があります。

 **ファイル＞管理＞セキュリティ...** 、「**詳細設定...**」、「**アクセス権セット**」タブで、「**新規...**」または、任意のアクセス権セットを選択し「**複製**」ボタンで、FileMaker Data API 専用のアクセス権セットを作成します。
 複製した場合は、複製したアクセス権セットをダブルクリックして「**拡張アクセス権**」の「**fmrest**」を設定します。
![スクリーンショット 2025-01-20 0.30.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3833520/2dc7b86f-5f41-c0f2-22cf-578eaf1cadce.png)

 作成したアクセス権セットを FileMaker Data API 用に作成したアカウントへ割り当てます。
 ![スクリーンショット 2025-01-20 0.34.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3833520/fe1390b6-1cc0-9476-c68f-8719de9115a2.png)

 実際の運用では、FileMaker Data API で使用するアカウントとアクセス権セットは、最低限必要なアクセス権に絞り込んで、利用目的に応じて、複数作るようにします。

## レイアウトの準備

 FileMaker Data API は、FileMaker Pro の機能を REST API によって利用しようとするものです。
 その為、FileMaker の仕様に依存した部分が多数あります。
 FileMaker は内部的な レコード ID によって管理され、テーブルを直接操作するのではなく、テーブルオカレンスを通して操作します。そしてテーブルオカレンスはレイアウトを通して操作するようになっています。

 これは FileMaker Data API で操作する場合も同じで、レイアウトを通して、データ操作を行うようになっています。

 テーブルを直接操作しないので、レイアウトにないフィールドにはアクセス出来ません。逆に言うと、レイアウトにあるフィールドはポータルにあるものを含めて操作出来ると言うことです。

 FileMaker Data API で操作するレイアウトには、必要なフィールドのみを含めるようにします。
 不要なフィールドはデータ転送量の無駄遣いにしかなりませんので、場面に応じて、必要最小限の FileMaker Data API 用のレイアウトを作るようにしましょう。

## サンプルソリューションを作る

　即席で、サンプルソリューションを作ります。
 利用するのは MLB STATCAST のデータを使います。2015年〜2024年の STATCAST の規定到達の打者データを使います。

 [STATCAST Custome Leaderboad](https://baseballsavant.mlb.com/leaderboard/custom?year=2024%2C2023%2C2022%2C2021%2C2020%2C2019%2C2018%2C2017%2C2016%2C2015&type=batter&filter=&min=q&selections=player_age%2Cab%2Cpa%2Chit%2Csingle%2Cdouble%2Ctriple%2Chome_run%2Cstrikeout%2Cwalk%2Ck_percent%2Cbb_percent%2Cbatting_avg%2Cslg_percent%2Con_base_percent%2Con_base_plus_slg%2Cxba%2Cxslg%2Cwoba%2Cxwoba%2Cxobp%2Cxiso%2Cavg_swing_speed%2Cfast_swing_rate%2Cblasts_contact%2Cblasts_swing%2Csquared_up_contact%2Csquared_up_swing%2Cavg_swing_length%2Cswords%2Cexit_velocity_avg%2Claunch_angle_avg%2Csweet_spot_percent%2Cbarrel_batted_rate%2Chard_hit_percent%2Cavg_best_speed%2Cavg_hyper_speed%2Cwhiff_percent%2Cswing_percent&chart=false&x=player_age&y=player_age&r=no&chartType=beeswarm&sort=xwoba&sortDir=desc)

1. このリンクの「Download CSV」ボタンをクリックしデータをダウンロードします
1. stats.csv がダウンロードされるので、player_batting.csv にリネームします
1. FileMaker Server/Cloud 上の FileMaker Data API で使用するソリューションを開きます
1. ファイル > レコードのインポート > ファイル... で、player_batting.csvを選択します
1. インポート順の指定を以下のようにして、インポートします
  ![スクリーンショット 2025-01-28 14.29.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3833520/f4424d53-8f60-2f69-17d3-63a84e5ec378.png)

　成功すると、2025年1月28日現在で、1375件のレコードの player_batting テーブル、player_batting テーブルオカレンス、player_batting レイアウトが作成されます。

 　今後は、このデータを使っていきます。