2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

さらば巨大XML 〜FileMakerのDDRをテキスト化し、AIペアプログラミングを実現する方法〜

Posted at

DDRデザインレポートがやっと民主化されました

この夏、GeminiにDDR(FileMakerのツールメニューから作成できるデータベースデザインレポート)で吐き出されたxmlを食べさせようとしたところ、ごく少量なのにギブアップされました。
やっぱり。日に日に進歩しているAIツールでもFileMakerの吐き出すxmlはデカすぎて料理できないですよね。
せめて分割して吐き出してくれたらいいのですが、開くのも大変なくらい大きな一枚岩。

そしたらGeminiからこんなツールがあるよと教えてもらいました。
DDRParser

何をしてくれるツールかというと、

  • DDRを解析してテキスト化
  • 1スクリプトごと、1レイアウトごとに単一ファイルとして分割してくれる

こんなふうに
scripts.png

半信半疑で使ってみたのですが、あっという間に細かく分割されてテキストファイルが吐き出されました。これだけでもうなんでも出来そうです。

コマンドラインツールなのですが、

DDRparser -i <<ファイル名(Summary.xml)>>

コマンドはこれだけ。複雑なオプションは不要です。GUIツール(FileMaker製)も用意されているようですが、軽快なCLIの方がいいでしょう。

プレーンテキストだとやれる事が無限大。

  • テキスト検索
    • 昔からある高額な解析ツールは持っていますが、ほとんどこの機能しか使っていない
  • Gitで差分管理
  • 初めて見るファイルの構造をAIに分析してもらう
  • 巨大な1枚のXMLだと、AIは『トークン制限』で読み込めませんが、スクリプト1つごとのテキストファイルなら、必要な部分だけAIに渡せる。これが画期的

という事で実践

題材としてFileMaker Master Book 中級編の16章にある完成ファイルを利用します。ちなみに私はこのファイルを触るのは初めてです。事前知識はないです。
※FileMakerを英語環境で使っているので、一部(Autoenterなど)英語になっていますが、日本語環境ですと、日本語になっているはずです。多分

まずは解析してもらいます。

parse1.png

わずか0.3秒、一瞬です。
以下のように、10個のフォルダに分割されて出力されました。

parse2.png

テーブルごとに分割されています。

bastables.png

テーブルの中身はこのような内容のテキストです。

baseTableDetail.png
計算式、フィールドタイプ、コメント。これらがエディタで開くだけで俯瞰できます。xmlと違って普通に読めます。

スクリプト

scripts.png

スクリプトの内容はまんまです。

scriptDetail.png

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

relationshipg.png

allow create, allow deleteも、リレーションキーも一目でわかる。しかもテキストサーチですぐに探せる。

AIに解析してもらいます。

出たばかりのGoogle謹製 Antigravity に登場してもらいました。modelはGemini 3 Pro

簡単なリポジトリの説明をして
q1.png

ちゃんと読めているようです
a1.png

肝心の中身の解析ができているか確認(私は把握していないのですが、合っているのでしょうね)
qa2.png

スクリプトを作成してもらいます。
q3.png

コンテキストに沿ったスクリプトを作成してくれるでしょうか
a3.png

提案されたスクリプト
newScript.png

ai_Agentなので、スクリプトフォルダに新規作成.txtファイルが作成されています。
realNewScript.png

ここからxmlを作成してFileMakerに戻せればいいですね。いつかなるでしょう😅

でも、初学者はこのテキストを見るだけでも流れを理解するのに十分に参考になります。リレーション構造やテーブル定義(コンテキスト)を正確に理解してくれているので、今までのようにChatウインドウでのやりとりよりは格段に使えるようになっています。

肝心のスクリプトの中身は色々ツッコミが入るでしょうが、流れとしては問題ないと思います。

全文検索がやっぱり最高

私がありがたいのはむしろこれです。既存の解析ツールだとすごく時間のかかる全文検索ですが、当たり前ですがvscodeなどのエディタで一瞬です。
『このグローバル変数、どこで書き換えてる?』『このカスタム関数、廃止したいけどどこかで使ってる?』 これらが、使い慣れたエディタの検索窓(Grep)で一撃です。高価なツールを立ち上げて検索結果を待つ時間はもう必要ありません。

grep.png

その他のコマンドオプション

.zsh
DDRparser — by HORNEKS ANS
Version 1.4.1

Purpose: Parse FileMaker DDR or SaveAsXML files and split them into a structured folder
         layout for Git tracking and searchability using standard text editors.

Usage:
  DDRparser -i <input file> [-f <target folder>] [options]

Main options:
  -i <file>               Input DDR Summary.xml or SaveAsXML .xml file
  -f <folder>             Output folder for split files (optional)
  -t                      Harvest _(...) strings and create POT file
  -v                      Verbose output
  --version               Show version info only
  -b                      Enable BaseTable alternate output (Exp and Num format)
  --clean                 Remove obsolete files from output directories
  --git-auto-commit "msg"  Automatically commit changes to Git with given message
  -h                      Show this help

Translation tools:
  --update-pos            Scan -f folder for PO's to update from POT files in this folder
  --scan <files>          Scan extra files for translatable strings, like acf-source code files
  -r                      recursive scanning
  --lang <language list>  Optional: only process the list of languages, ie. en,nb
  --use-openAI-apikey <API-key>  Optional: Translate missing strings
  --create_mo             Compile each .po file updated to .mo

Developer tools:
  --probe                 Examine the input file and report its type (DDR or SaveAsXML)
  --devinfo               Show SaveAsXML support level and diagnostic info

  --extract <path>        Extract a specific element from large XML and output to console or file
  --innermatch <path>     Used with --extract: only match if the element contains a nested tag
                          with the given name and attribute
  --listnodes <path>      List tag names and their attributes that match the path expression
  -o <output file>        Used with --extract to write output to file instead of console

Path expressions:
  Match paths use simplified syntax, e.g.:
     /FMPReport/ScriptCatalog/Scripts/Script
     /FMSaveAsXML/*/ScriptReference:name="InitACF"
  - Wildcards '*' match any number of intermediate levels
  - Attributes may be written with or without quotes (e.g. name=InitACF or name="InitACF")

まだ全然使っていませんが、楽しそうなのが並んでいますね。
これなんか見るとそのままAIと連携できるのかな?

--use-openAI-apikey <API-key>  Optional: Translate missing strings

まとめ

Claude Code(3.5sonnet)でも解析してもらいましたが、同程度の結果で遜色ないです。
他のプログラム言語に比べると情報量が圧倒的に少ないので精度は落ちますが、やっとAIドリブン開発に近づいたなという感じです。Claris社が何故こういった開発者ツールを提供しないかいつも不思議ですが。

個人的には若干AI疲れと言いますか、エージェントに何から何までお任せってのは面白くなくなってきたので、やはり最初に自分の考え・コードがあり、レビューはAIという感じで進めるのがいいような気もしています。

ということで、
日本国内では私の狭い観測圏内ではありますが、全く耳にしないので、神ツールの紹介でした。
下記にて無料で公開されています。ここのACFプラグインは知っていますが、Norwayの方なのですね。

リンク / Special Thanks
DDRparser 公式サイト

Special thanks to Ole Horn for developing this game-changing tool!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?