2023.03.15

FileMakerの新機能「トランザクション」をやってみるぞ




こんにちは。

Systemチームの木村です。


ちょっと遅い話題なのですが、昨年(2022年)の12月1日に、Claris FileMaker 19.6.1がリリースされ、待望の「トランザクション」スクリプトステップが実装されました。

(リリースノートはこちら



冷静を装ってブログを書いていますが、これはもう本当に画期的な機能なのです。


当社は、Claris FileMakerを長年メインシステムで使っており、この機能があれば効率的に開発を進められたと想像できます。

また、今後の開発も大きく変わるぐらいのインパクトをもたらすのではないでしょうか。



今回はこのClaris FileMaker 19.6で実装された「トランザクション」の検証内容を紹介させていただきます。





「トランザクション」とは?



トランザクション(transaction)とは、簡単に言うと「一つの処理のまとまり」のことです。

よく例に出されることが多いのですが、銀行での送金処理などがそれにあたります。



Aさんが、Bさんに1000円送金する場合を例にしてみます。

その場合、処理としては以下の2つが必要になります。


 [処理1] Aさんの口座から1000円マイナスする。

 [処理2] Bさんの口座に1000円プラスする。



この例で言えば、[処理1][処理2]の2つで1つの「トランザクション」となります。


例えば、処理Bの前に何らかの不具合で不正終了してしまった場合、Aさんの口座からは1000円引かれているものの、Bさんの口座には1000円が入金されないことになります。

こんなことになってしまってはたまったものではありません。



それを防ぐために、トランザクション処理の考え方が必要になるのです。

(ACID特性とか有名だと思いますが、気になる方はまた調べてみてください。)



ACID特性のひとつに「Atomicity(原子性/不可分性)」というのがあり、これはトランザクション内のそれぞれ個々の処理を「実行前に戻す(ロールバック)」か「完全に実行しきる(コミット)」かという特性を表しています。



考え方としては、0か1かということ。

処理自体があと少しで終わりそうだったとしても、処理が完了しきれなければ、処理前の状態に戻します。



今回の例で言えば、Bさんの口座へ入金ができなければ、Aさんの口座から1000円を引かない、処理実行前の状態に戻すのが正しいということになります。


FileMakerでもこの連続した処理を「一つの処理のまとまり」として扱い、最終的に「確定させる」のか「なかったことにする」ということ制御が容易に実現できるようになったのです。





FileMakerの特性として


FileMakerの場合、入力フィールドから移動したり、レイアウトを閉じたりしたタイミングでデータが確定されます



多くの方がよく触れているであろうWebアプリや、スマホアプリのように、テキストボックスにデータを入力後に確定ボタンを押して、データを確定(コミット)させるという動きではありません。



そのため、フィールドに入力し、次のフィールドに移動するだけでデータが確定してしまうので、最初は戸惑いがある人も多いです。

間違って入力してしまっても、戻すことはできないのです。

(カーソルが入力フィールドにまだあるコミット前であれば、Ctrl+Zで戻れます)



開発者側は、必要データをすべて入力した上作業を終えて欲しいし、そもそもその入力データに誤りがないかバリデートしてコミットさせたいけど、等々…、というケースのコントロールは諦めざるを得ないこともありました。


(ただ、これらが絶対できなかったと言うわけでなく、工数をかけて実現させていたわけですね。)


そこに「トランザクション」スクリプトステップが実装されたものだから、まさに「待望」なのです。






とりあえず試してみることにする


以下のようなCSVを用意しました。

簡単な注文データの入ったCSVです。




各カラムの意味は以下の通り。


a1: 注文者名

a2: 注文者住所

a3: 注文商品

a4: 注文個数



これを、以下の図のように「tmp」テーブルに取り込み、その後、「注文者テーブル」と「注文商品テーブル」に分けてインポートします。

そして最後に意図的にロールバックさせてみたいと思います。





スクリプトの中身はこんな感じ。

(簡単な作りになっています。)






そして、スクリプト9行目で注文者情報をインポート、12行目で注文商品情報をインポートさせています。

インポート順の設定はこんな感じです。


【to 注文者テーブル】



【to 注文商品テーブル】





では早速実行させてみます。

まずはCSVを選んで「開く」。






その後「確定させますか?」とダイアログがでます。

注目してほしいのですが、後ろに表示させている各テーブルにはデータが入っています。




今回は確定させないので「いいえ」を押してみます。





おおおぅ!





何事もなかったかのようにロールバックされちゃいました!




使いどころとしては、今回検証してみたような、内部でのインポート処理の簡素化でしょうか。

もちろんUIの作り込みも簡素化もできると思います。



あと、クライアントのバージョンを19.6以降で揃える必要があるので、実際導入されるときは注意が必要です。


古いバージョン運用している場合は導入していくのは難しいかもそれませんが、19.6以降のバージョンで新規開発する場合は大活躍することでしょう。



詳細については公式ヘルプを参照の上ご利用ください。

https://help.claris.com/ja/pro-help/content/open-transaction.html



以上、トランザクションスクリプトステップの紹介でした。




 #ファイルメーカー #FileMaker #Claris #クラリス