FileMakerでメディア管理のファイルを作っていて、パスのスラッシュで苦しんだという話です。一晩経って追記あり。
写真や動画、その他いろんなファイルをオブジェクトとして読み込んで管理するデータベースを作って実作編とか調子こいてますが、Ver.3の途中で停滞しまくり、挫折間近でございます。というのも、パスがわけわかりません。
メディアファイルを読み込む方法は、一個ずつ挿入、あるいはフォルダごと一括で登録します。一括のときはファイル名、パス、サムネイルが同時に取得できます。そうでないときはGetAsTextで取得します。
パス
メディア管理ではパスが最重要フィールドとなります。パスを元に画像を再読込みしたり、更新があったときにパスから元メディアを辿ります。あるいは、パスからオブジェクトを探しに行って登録したりします。パスって、何がどうあってもピンポイントで場所を特定できる絶対的なものですよね。これを信頼しないとコンピュータで何もできません。
というパスなんですが、最近、苦労して作ったパスに関連するスクリプト群がことごとく動かなくなってしまい、というか、動きが期待通りではなくなってしまい、その原因もわからず長い時間苦しみ抜きました。
苦行の果てにようやく判ったことは、FileMaker仕草に対する誤解でした。
問題をざっくりいうと、ファイルパスを元に何か事を行うとき、今まで出来ていたことが出来なくなったように感じたこと。具体的には、照合フィールドとして利用することが困難になりました。今まではそれなりに上手く動いていたのに、弾かれてしまうようになった感じです。以前はゆるかったけど v19 で厳格になったのでしょうか。単に私の勘違いか。わかりません(バージョン関係ありません勘違いでした)
FileMakerのパス – 謎の接頭語とスラッシュの数
そもそもの話をすると、パスに接頭語を含める意味がわかりません。その接頭語は条件によって「image:」だとか「imagemac:」だとか「file:」だとか「PNGf:」だとかいろいろ変わります。URLに例えたら、サイトの内容によって「http」の部分がbogttpになったりimagettpになったりofficialttpになったり変化するようなものです。画像メインの公式サイトの場合どうすんだよ!みたいな。
接頭語そのものに留まらず、スラッシュの数の出鱈目さが仇になります。スラッシュが一個だったり二個だったりします。時にはスラッシュがないものもあります。
実例をひとつ。同じファイルを読み込んだものですが、パスの取得方法や時と場合によってはこうなります。
どないなっとんのこれ?インポートの方法によって変わるのか。ファイルパスって、フォルダから読み込んだら取得できますが、そうでない限りGetAsTextから生成しますよね。その加減なのかもしれない… だとすれば原因はおれか…
だんだん核心に迫ってきました。
核心
・フォルダからインポートしたら「file://」スラッシュが2個入ります。
フォルダからのインポートのみ、FileMakerがパスを取得してくれます。以下、フォルダインポート以外ではパスを取得するのは GetAsTextの最後の行。
・挿入して格納したら「ファイルタイプ的な様々な文字列: 」スラッシュなしになります。
(PNGf: , FILE: , MOV : など)
・挿入して参照したら「ファイル種類またはfile+mac:/」スラッシュ1個になります。
(imagemac:/ , moviemac:/ , filemac:/ など。filewinというものもありますか)
V19のパス変換関数
ところでV19のお楽しみだった パスを変換するConvertFromFileMakerPath関数というものがあります。FileMakerパスからPOSIXに変換してくれるという。これはいい!と、思ったこともありました。
早速関数を試してみましたが、スラッシュが二個くっついたパスを変換できません。エラーで結果が「?」となります。スラッシュが一個だと上手くいきますが、勝手に二個くっつけたのFileMakerさんのほうですよ。
こんなのなら今まで使ってきた自作の変換関数のほうが賢いよ。
もうひとつ、逆の関数もあります。POSIXをFileMaker式パスに変換してくれます。POSIXのパスをConvertToFileMakerPathで変換すると、これは正しく動きました。出来上がったFileMaker用パスはスラッシュが一個でした。
そのスラッシュ一個のパスを、再びConvertFromFileMakerPathしてやると、正しくPOSIXに変換されました。
なるほど。そういうことか。いうことは、どういうことですか。
こういうことですね。パスの書式としてはスラッシュ1個が正しいと。でも現実に「//」と二個付けられます。
二個のやつを計算式で一個削ったら統一は図られましたが、今度はそれをパスとして認識してくれなくなりました。照合フィールドに指定しても照合してくれません。更新も追加もできなくなりました。それはあんまりやで。V19、怪しすぎ。
どうすることもできず、困っておりますが、時間がないのでしばらく放置します。
追記
うたた寝して人生が猿の見ている夢に過ぎないと気づいた夢を見て起きたらファイルパスについて閃きました。
FileMakerにはそもそもファイルパスという概念がなく、GetAsTextやフォルダインポートで取得するファイルパスには一環した法則や定義などが最初からないということですね!
つまり、インポートするときに取得するファイルパスは「この場所から持ってきたファイルだよ」という単なる記録。なので特別に file:// と、スラッシュが二個付くんですね。これはつまり、パスじゃないのですよ。そうでしょ!ただの印なんですよ。
GetAsTextの最後の行にあるのもパスっぽい何かであってパスじゃない。変な接頭語が出鱈目にくっつくのも、パスじゃなくて「印だよ」という意味ならガッテンできます。
これに気づけばこちらのもの。対処方法も何となくわかりました。照合フィールドに使うときは、接頭語に注意して揃えてやればいいのですね。きっとそうですね。まだ試してないけど。
さらに追記
このポストや関連ポストでは、パスを照合フィールドにした際の問題についてパスが変だからという視点で書いていますが、その捉え方が間違っていたことが随分後に判明しました。
ここには二つのまったく関係ない問題が絡んでいたんです。
ひとつはパスの問題、これはこのポストで書いたとおりです。もうひとつは照合フィールドそのものの問題です。
照合フィールドに私の知らなかった大きな問題がありました。みんなは知っていたんでしょうか。つまりそれは・・・ この続きは以下のポストでどうぞ!
FileMakerで正しくリレーションできない現象、原因と解決