かっこいいテーブルオカレンスの並べ方 ’25

  • URLをコピーしました!

こんにちは、最近は人と話すより機械と話す方が長くなりつつあるジョージです。

さて、今年も早いもので Claris 界隈最大のイベントへのカウントダウンがいよいよ始まりました!90 年代に青春を謳歌したジョージにとってはまさに神イベント。なんといっても解散から 16 年、まさかの再結成を経ての来日公演が東京ドームで開催されます!!ってこれ Claris じゃなくて Oasis ですね、失礼しました。。。

というわけで本当の告知はこちら、、、

Claris カンファレンス 2025 では、ユーザー企業による DX 成功事例の発表や、AI を活用した業務アプリ開発テクニックなど、約 60 の多彩なセッションやワークショップを通じて、問題解決や業務改善のヒントを得ることができます。参加は 無料・事前登録制 となっております、皆様のご来場を心よりお待ちしております。
https://content.claris.com/ja/cc25/cpsig

目次

リレーションシップグラフ

以前にもこちらのブログで紹介させていただいた「かっこいいテーブルオカレンスの並べ方」ですが、並び替えって地味に大変なんですよね。前任者から引き継いだカスタム App 、別のユーザが作成したカスタム App のメンテナンスをする場合、蜘蛛の巣のようにちらかったテーブルオカレンスを目撃してしまうと、見なかった事にして「OK ボタン」でダイアログを閉じてしまいたくなりがちです。

そこで今回は AI を使って(厳密には AI が作成したスクリプトを使って)とにかく テーブルオカレンスを綺麗に並べる に挑戦してみました!

名前をつけて XML として保存…

FileMaker Pro Advanced 18 以降に追加された機能「名前をつけて XML として保存…」を使えば、カスタム App のスキーマ、レイアウト、スクリプトなどの各部分を表す XML 形式で保存できるようになりました。

カスタム App 界隈における AI 活用は、これまで主に ユーザ視点 での自然言語検索や、LLM/RAG を活用した自然言語処理に注目が集まっていました。しかし カスタム App 開発者 も書き出された XML と、次のツールを活用することで、AI の恩恵を直接受け、より効率的で高度な開発 を実現できるようになっています。

Claris FileMaker Upgrade Tool

まずは FMUpgrade Tool です、最新バージョンでは特に ReplaceAction が強化されて、カスタム App のさまざまな要素をコマンドラインから変更できるようになりました。

Claris FileMaker Upgrade Tool を使用してスキーマ、レイアウト、およびスクリプトの変更を FileMaker Pro (.fmp12) ファイルに適用することができます。このコマンドラインツールは Windows、macOS、および Ubuntu の FileMaker Server バージョン 2025 以降にインストールされており、アクセス可能なコマンドラインパスに追加されました。

Claris FileMaker Upgrade Tool ガイド

なお、変更可能な要素の一覧は、公式サイトよりも海外の Claris パートナー Soliant Consulting 社のブログ に詳しく掲載されております。

Claris FileMaker Developer Tool

つぎは FMDeveloper Tool です、いろいろ機能豊富ですが今回は「XML として保存」を使ってみます。

FileMaker Server に含まれている Claris FileMaker Developer Tool (FMDeveloperTool) を使用して FileMaker データベースで次の操作を実行できます。

  • コピー、クローン、最適化コピー、またはすべてを含むコピー
  • 名前変更
  • XML として保存
  • 暗号化または復号
  • 管理アクセスの削除
  • キオスクモードの有効化
  • 修復または一貫性チェックの実行
  • テーブル、フィールド、またはフィールド索引のレコードデータの合計サイズをクエリー
  • テーブル内のフィールドのレコードデータのサイズまたは索引サイズを最大から最小の順に並べた一覧の取得
  • FileMaker Server ホストへのデータベースのアップロード
  • データベースの固有 ID の再生成

Claris FileMaker Developer Tool ガイド

事前準備と典型的なワークフロー

Claris FileMaker Upgrade Tool ガイド を確認して手順通りに進めます。

まずは並び替えを行いたいカスタム App を準備します。今回はリレーションシップグラフにスパイダーモデルを採用した Oasis.fmp12 を準備しました。

既存のオブジェクトに GUID を割り当てる

まずは手順にしたがって GUID (グローバル一意識別子)  なるものを付与していきます。

FMUpgradeTool --generateGUIDs -src_path Oasis.fmp12 -src_account 有効なアカウント -src_pwd 有効なパスワード

コマンドを実行すると「カスタム App Upgraded.fmp12」というファイルが作成されます。この GUID が付与されたファイルを元に作業をすすめます。

カスタム App を XML で保存

続いてカスタム App を XML で保存します。FileMaker Pro からでも XML 書き出しはできますが、せっかくなのでコマンドで簡潔させたいと思います。面倒くさいのでバッチ化します。

#!/bin/bash

# エラーハンドリング(スクリプト中で失敗したら停止)
set -e

TOOL_PATH="FMDeveloperTool"
SRC_PATH="./Oasis upgraded.fmp12"
SRC_ACCOUNT="admin"
SRC_PWD="admin"

# FMUpgradeTool を実行
"$TOOL_PATH" --saveAsXML \
  "$SRC_PATH" \
  "$SRC_ACCOUNT" \
  "$SRC_PWD" \

実行するとカスタム App ファイルから XML 形式 でファイルが書き出されました。

XML 構造の確認

XML の構造を確認するには VSCode の機能拡張 XML by Red Hat がおすすめです。XML ドキュメントを VSCode で開くとウィンドウ左側のアクティビティーバーにアウトラインが表示され、構造毎に XML の中身が確認できます。

今回は主に、TableOccurrenceCatalog エレメント、RelationshipCatalog エレメントを利用します。以下のように RelationshipCatalog には、どのテーブルオカレンス、どのフィールドでリレーションシップが成立しているか条件が記載されています。

<Relationship id="1">
					<UUID modifications="0" userName="" accountName="Admin" timestamp="2025-10-16T14:30:59">14166477-811E-4E83-94E7-7D8D1B571CEB</UUID>
					<LeftTable cascadeCreate="False" cascadeDelete="False" type="Local">
						<TableOccurrenceReference id="1065111" name="Cigarettes & Alcohol" UUID="B3630222-1DF9-4239-B59E-9BFEBEC436E7"></TableOccurrenceReference>
					</LeftTable>
					<RightTable cascadeCreate="False" cascadeDelete="False" type="Local">
						<TableOccurrenceReference id="1065106" name="Definitely Maybe" UUID="0047F6CC-3214-47C5-89D5-8F30B5C1A9E1"></TableOccurrenceReference>
					</RightTable>
					<JoinPredicateList membercount="1">
						<JoinPredicate type="Equal">
							<LeftField>
								<FieldReference id="1" name="z_作成TS" UUID="80F50474-EA60-43D2-8611-D47046B64109">
									<TableOccurrenceReference id="1065111" name="Cigarettes & Alcohol" UUID="B3630222-1DF9-4239-B59E-9BFEBEC436E7"></TableOccurrenceReference>
								</FieldReference>
							</LeftField>
							<RightField>
								<FieldReference id="2" name="z_作成者" UUID="BCAA7EBF-B024-481F-907B-97641939B8BA">
									<TableOccurrenceReference id="1065106" name="Definitely Maybe" UUID="0047F6CC-3214-47C5-89D5-8F30B5C1A9E1"></TableOccurrenceReference>
								</FieldReference>
							</RightField>
						</JoinPredicate>
					</JoinPredicateList>
					<TagList></TagList>
				</Relationship>

そして、TableOccurrenceCatalog にはリレーションシップグラフでのテーブルオカレンスの座標などの情報が確認できます。

<TableOccurrence View="Collapse" height="86" id="1065089" name="@Sys" type="Local">
	<UUID modifications="7" userName="" accountName="Admin" timestamp="2025-10-16T14:33:00">50CA6509-4E06-409A-B3F4-940B30900434</UUID>
	<BaseTableSourceReference type="BaseTableReference">
		<BaseTableReference id="129" name="@Sys" UUID="03696494-20EE-471F-ACEB-1338778D672C"></BaseTableReference>
	</BaseTableSourceReference>
	<CoordRect top="81" left="1109" bottom="197" right="1240"></CoordRect>
	<Color red="120" green="120" blue="120" alpha="1.00"></Color>
	<TagList></TagList>
</TableOccurrence>

これら 2 つの情報を使えば、どのテーブルオカレンスがどこに配置されていて、どれくらいの頻度で参照されているか全てわかるわけです。それでは出力された XML を使って、テーブルオカレンスを実際に並び替えてみたいと思います。

XMLを介した AI 活用の新アプローチ

Claris FileMaker は、大変パワフルな「ノーコード/ローコードツール」なのですが Python や JavaScript のようなスクリプト言語を取り扱うように AI が直接レイアウトを生成したり、スクリプトを生成することはできません。当然 AI では FileMaker アプリケーションの GUI を介してではテーブルオカレンスの位置や座標を変更することはできまないのですが、一度 XML としてカスタム App から書き出すことで AI でも書き換え可能なテキスト情報として取り扱えるようになります。

今回は OpenAI 社の ChatGPT を使って、書き出した XML のテーブルオカレンスの座標を綺麗に並び替えるプログラムを Python で作成してみます。XML ファイルの内容を調査し、その値(この場合はテーブルオカレンスの座標)を書き換えるプログラムを生成するのは、まさに AI の得意分野 となります。

Codex

本ブログ執筆のタイミングで VSCode の OpenAI 社機能拡張 Codex が最新版になったので使ってみます。Copilot の OpenAI 社版みたいな感じでしょうか。画面左側に常駐しているので、いちいち ChatGPT のアプリと VSCode 行き来しなくてよいのと、プロジェクトフォルダの構成ファイルを調べてくれるので非常に便利です。指示する プロンプトも少なく て済むようです。

Codex(コーデックス) は、OpenAI が開発・提供する AI コーディングエージェント/プラットフォームです。ソフトウェア開発支援を目的とした自然言語からコード変換や自動化を行います。

OpenAI 社のウェブサイトによると、Codex は VS Code などの IDE 拡張を通じて、開いているファイルや選択中のコードといった文脈(コンテキスト)を直接参照しながら動作します。これにより、開発者は長いプロンプトを入力する必要がなく、Codex が現在のソースやプロジェクトファイルの依存関係を理解した上で、最適なコード提案・修正を行うことができます。つまり、Codex は「自然言語モデル」というよりも、**プロジェクト全体の状況を理解して支援する“文脈対応型AIコーディングエージェント”**として機能する点が大きな特長です。

https://openai.com/ja-JP/index/introducing-upgrades-to-codex

なんだかんだで 2-3 時間、AI とチャットしていたらいい感じの Python プログラム が完成しました!(お客様のカスタム App 解析依頼の案件に必要なので作りましたので遊んでいるわけではないのです…)プログラムの解説は割愛しますが、ざっくりしたプロンプトは以下の通りです。ソースはこちらから

次の relationship.xml が与えられた場合にLeftTable の TableOccurrenceReference の id で頻出度に応じてもっともスコアの高い(id に登場する)順番で Relationship エレメントを並び替えるプログラムを python で実装して

ルート別グループ毎に TableOccurrenceCatalog の TableOccurrence を 並び替えてほしい
さらに TableOccurrence 子要素 <CoordRect top=”” left=”” bottom=”” right=””></CoordRect> を左上側から右下側に向かい、レベルと出現数に従って並び替えて

CoordRect は左上から右下に向かって四角形を形成するので 幅 100 高さ 100 になるように計算して

完成した XML を patch.xml として書き出して

.fmp12 ファイルのアップグレード

patch.xml の確認

Python スクリプトを実行してみます。以下のように 一瞬で XML の解析 が終わり、テーブルオカレンスのリストとグループが書き出されます。(おぉ〜すごい!)ちなみに L数字 は 階層、freq=数字 は何個の TO から参照されているかを示す頻度です。

vscode@778be2b86003:/workspace/FMUpgradeTools$ python3 reorder_table_occurrences.py ./Oasis\ upgraded/Oasis\ upgraded.xml 
=== ルート別グループ ===
L1 1065114 ((What’s the Story) Morning Glory?) : freq=12
L2 1065098 (Don’t Look Back in Anger) freq=6
L2 1065097 (Wonderwall) freq=4
L2 1065093 (Morning Glory) freq=1
L2 1065094 (The Swamp Song – Excerpt 2) freq=1
L2 1065096 (Hello) freq=1
L2 1065099 (Hey Now!) freq=1
L2 1065100 (The Swamp Song – Excerpt 1) freq=1
L2 1065103 (Slide Away) freq=1
L2 1065104 (Roll With It) freq=1
L2 1065105 (She’s Electric) freq=1
L2 1065112 (Cast No Shadow) freq=1
L2 1065113 (Champagne Supernova) freq=1
L3 1065115 (Awesome) freq=1
L3 1065116 (Epic) freq=1
L3 1065117 (Genius) freq=1
L3 1065118 (Legendary) freq=1
L3 1065119 (Stellar) freq=1
L3 1065120 (Killer) freq=1
L3 1065121 (Dope) freq=1
L3 1065122 (Fire) freq=1

L1 1065106 (Definitely Maybe) : freq=8
L2 1065090 (Shakermaker) freq=1
L2 1065091 (Live Forever) freq=1
L2 1065092 (Up in the Sky) freq=1
L2 1065095 (Digsy's Dinner) freq=1
L2 1065102 (Rock 'n' Roll Star) freq=1
L2 1065107 (Morning Glory ) freq=1
L2 1065109 (Columbia) freq=1
L2 1065111 (Cigarettes & Alcohol) freq=1

=== グループ未所属 ===
1065089 (@Sys)
1065101 (Be Here Now)
1065110 (Bring It on Down)
パッチを生成しました: patch.xml

同時に patch.xml が出力されているので確認してみましょう。ちなみに ReplaceAction で囲んだ箇所が変更対象になります。

<?xml version='1.0' encoding='utf-8'?>
<FMUpgradeToolPatch version="2.2.2.0">
	<Structure>
		<ReplaceAction>

			<Replace type="TableOccurrence" UUID="152FA67F-E769-4099-A3AA-FBB59C27C0A6">
				<TableOccurrence View="Collapse" height="50" id="1065114"
					name="(What’s the Story) Morning Glory?" type="Local">
					<UUID modifications="26" userName="" accountName="Admin"
						timestamp="2025-10-16T14:34:59">152FA67F-E769-4099-A3AA-FBB59C27C0A6</UUID>
					<BaseTableSourceReference type="BaseTableReference">
						<BaseTableReference id="154" name="(What’s the Story) Morning Glory?"
							UUID="70C85E05-2CFA-494C-AE56-63A022F29D59" />
					</BaseTableSourceReference>
					<CoordRect top="0" left="0" bottom="50" right="180" />
					<Color red="120" green="120" blue="120" alpha="1.00" />
					<TagList />
				</TableOccurrence>
			</Replace>

			... Replace アクションがいっぱい ...

			</Replace>
		</ReplaceAction>
	</Structure>
</FMUpgradeToolPatch>

patch.xml の適用

patch.xml ができたら FMUpgrade Tool で パッチファイルを適用 します。コマンド打つのが面倒くさいのでバッチ化します。早速実行してみましょう!

#!/bin/bash

# エラーハンドリング(スクリプト中で失敗したら停止)
set -e

TOOL_PATH="FMUpgradeTool"
SRC_PATH="Oasis upgraded.fmp12"
SRC_ACCOUNT="admin"
SRC_PWD="admin"
PATCH_PATH="./patch.xml"
DEST_PATH="./Oasis/Oasis.fmp12"

# FMUpgradeTool を実行
"$TOOL_PATH" --update \
  -src_path "$SRC_PATH" \
  -src_key "$SRC_KEY" \
  -src_account "$SRC_ACCOUNT" \
  -src_pwd "$SRC_PWD" \
  -patch_path "$PATCH_PATH" \
  -dest_path "$DEST_PATH" \
  -force

アップグレードが完成すると DEST_PATH で指定した場所に Oasis.fmp12 が作成されました。それではリレーションシップグラフを確認してみましょう。

まさにギャラガー兄弟のバンド内の確執が解消されたように テーブルオカレンスが美しく並び変わって ますね!これでどんなにテーブルオカレンスが多いスパイダーモデルでも、一瞬で並び変かえることができます!

まとめ

それではまとめです。今回紹介したツールを使えば Claris FileMaker プラットフォーム カスタム App 開発者 でも AI の恩恵 をうけられる事がわかりました。そしてなんといってもコマンドラインで機械的にファイルの変更をするので、手動で修正するのと違い、修正箇所以外を誤って変更してしまう可能性 がまったくなくなるはずです。

まだ試していませんが、リレーションシップグラフの書き換えだけでなく、他の要素の書き換えもできるので、興味のある方はぜひ使ってみてください!

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
目次