FileMakerのパスで苦しんだ話

2021-08-07 夜想 チルドレンクーデターminimum レザニモヲ VAMPIRE!

FileMakerでメディア管理のファイルを作っていて、パスのスラッシュで苦しんだという話です。一晩経って追記あり。

写真や動画、その他いろんなファイルをオブジェクトとして読み込んで管理するデータベースを作って実作編とか調子こいてますが、Ver.3の途中で停滞しまくり、挫折間近でございます。というのも、パスがわけわかりません。

メディアファイルを読み込む方法は、一個ずつ挿入、あるいはフォルダごと一括で登録します。一括のときはファイル名、パス、サムネイルが同時に取得できます。そうでないときはGetAsTextで取得します。

パス

メディア管理ではパスが最重要フィールドとなります。パスを元に画像を再読込みしたり、更新があったときにパスから元メディアを辿ります。あるいは、パスからオブジェクトを探しに行って登録したりします。パスって、何がどうあってもピンポイントで場所を特定できる絶対的なものですよね。相対パスでもビシっと指定できるので絶対です。これを信頼しないとコンピュータで何もできません。

というパスなんですが、最近、苦労して作ったパスに関連するスクリプト群がことごとく動かなくなってしまい、というか、動きが期待通りではなくなってしまい、その原因もわからず長い時間苦しみ抜きました。

苦行の果てにようやく判ったことは、FileMakerのバージョンの問題かもしれないということでした。あるいは、己の頭の悪さに起因する問題かもしれません。V17とV19でパスの扱いが異なるようなんです。そのせいでスクリプトが壊滅しました。

ソフトウェアの変な動きを簡単にバグだの不具合だのと言うのに抵抗あるから言いませんけど、怪しいですよ。

問題をざっくりいうと、ファイルパスを元に何か事を行うとき、今まで出来ていたことが出来なくなったこと。具体的には、照合フィールドとして利用することが困難になりました。接頭語や接頭語の後ろのスラッシュの数がバラバラで、今まではバラバラなりに上手く動いていたのに、弾かれてしまうようになった感じです。

FileMakerのパス – 謎の接頭語とスラッシュの数

そもそもの話をすると、パスに接頭語を含める意味がわかりません。その接頭語は条件によって「image:」だとか「imagemac:」だとか「file:」だとか「PNGf:」だとかいろいろ変わります。URLに例えたら、ブログは blopps:/ で 公式サイトなら offpp:// で 画像メインのサイトだったら imageepp:/ だったり picttps:// になったりするのと同じですよ。画像メインの公式サイトの場合どうすんだよ!みたいな。

接頭語そのものに留まらず、スラッシュの数の出鱈目さが仇になります。スラッシュが一個だったり二個だったりします。時にはスラッシュがないものもあります。

実例をひとつ。同じファイルを読み込んだものですが、その方法や時と場合によってはこうなります。

FileMakerパスの不手際
スラッシュが2個
V19パスの不手際
スラッシュが1個

V17でインポートしたパスはスラッシュが一個ですが、V19でインポートするとスラッシュが2個つきました。バージョンアップで一個増えました \(^O^)/ 

喜んでる場合ではありません。ただ増えただけでなく、増えないこともあるんです。どないなっとんのこれ?

 あっ。これは勘違いで、インポートの方法によって変わるのか。ファイルパスって、フォルダから読み込んだら取得できますが、そうでない限りGetAsTextから生成しますよね。その加減なのかもしれない… だとすれば原因はおれか…

だんだん核心に迫ってきました。

核心

・フォルダからインポートしたら「file://」スラッシュが2個入る。

フォルダからのインポートのみ、FileMakerがパスを取得してくれます。以下、フォルダインポート以外ではパスを取得するのは GetAsTextの最後の行。

・挿入して格納したら「ファイルタイプ的な様々な文字列: 」スラッシュなし
(PNGf: , FILE: , MOV : など)えっ。スペースが入ってるよ。いいの?

・挿入して参照したら「ファイル種類またはfile+mac:/」スラッシュ1個
 (imagemac:/ , moviemac:/ , filemac:/ など。filewinというものもありますか)

・ファイルパスを照合したときの動作がV17とV19では異なります。これが悪の原因っぽい。V17で出来ていたことがV19では出来なくなってます。突っ込んで調べてないから何がどうなってんのか不明。

V19のパス変換関数

ところでV19のお楽しみだった パスを変換するConvertFromFileMakerPath関数というものがあります。FileMakerパスからPOSIXに変換してくれるという。これはいい!と、思ったこともありました。

早速関数を試してみましたが、スラッシュが二個くっついたパスを変換できません。エラーで結果が「?」となります。スラッシュが一個だと上手くいきますが、勝手に二個くっつけたのFileMakerさんのほうですよ。

こんなのなら今まで使ってきた自作の変換関数のほうが賢いよ。

もうひとつ、逆の関数もあります。POSIXをFileMaker式パスに変換してくれます。POSIXのパスをConvertToFileMakerPathで変換すると、これは正しく動きました。出来上がったFileMaker用パスはスラッシュが一個でした。 

そのスラッシュ一個のパスを、再びConvertFromFileMakerPathしてやると、正しくPOSIXに変換されました。

なるほど。そういうことか。いうことは、どういうことですか。こういうことですね。パスの書式としてはスラッシュ1個が正しいと。でも現実に「//」と二個付けられます

二個のやつを計算式で一個削ったら統一は図られましたが、今度はそれをパスとして認識してくれなくなりました。照合フィールドに指定しても照合してくれません。更新も追加もできなくなりました。それはあんまりやで。V19、怪しすぎ。

どうすることもできず、困っておりますが、時間がないのでしばらく放置します。数日後、8月7日は京都の夜想に出演するからです。つまらないことでテンパってる暇はありません。

コロナに乗じた自民禍のせいでまた何かが発令され、急遽開始時間が16:45 に変更😭 私最初に出るんですけど。

2021-08-07 夜想 チルドレンクーデターminimum レザニモヲ VAMPIRE!

16時45分オープン!早いよ早いよ!

満員電車や昼の仕事や馬鹿なスポーツショーに比べたら家族団欒のティータイムレベルですよ。皆お越し。

追記

うたた寝して人生が猿の見ている夢に過ぎないと気づいた夢を見て起きたらファイルパスについて閃きました。

FileMakerにはそもそもファイルパスという概念がなく、GetAsTextやフォルダインポートで取得するファイルパスには一環した法則や定義などが最初からないということですね!

つまり、インポートするときに取得するファイルパスは「この場所から持ってきたファイルだよ」という単なる記録。なので特別に file:// と、スラッシュが二個付くんですね。これはつまり、パスじゃないのですよ。そうでしょ!ただの印なんですよ。

GetAsTextの最後の行にあるのもパスっぽい何かであってパスじゃない。変な接頭語が出鱈目にくっつくのも、パスじゃなくて「印だよ」という意味ならガッテンできます。

以前のバージョンまでは、それでもパスのように柔軟な振る舞いをしていました。V19からは厳格になり、パスでないパスモドキをパスのように振る舞わせることをやめたのでしょう。

これに気づけばこちらのもの。対処方法も何となくわかりました。照合フィールドに使うときは、file://の印を付けたパスを生成してそれを使えばいいんですね。きっとそうですね。まだ試してないけど。