ファイルメーカーでメディア管理システムを作る話の概要を少し補完します。画像や動画のデータベースについて具体例を交えつつ基本のフィールド。
FileMakerでメディア管理システムを作る話 概要 というのを書いたんですけど、少し補完します。
メディア管理を作っていこうとするとき、どんなフィールドが必要だろうと考えますね。最初は基本のフィールドさえあればOK。必要を感じてから追加すればいいと思います。
フィールド
フィールド定義です。メディア管理データベースに必要な基本のフィールドをいくつか。
イメージ
オブジェクトタイプのフィールドです。画像や動画を格納します。レイアウトするときに表示方法を二択から選びます。動画プレビューを行うならレイアウトモードのインスペクタで「インタラクティブ」を選択します。
前回の記事に書いたので繰り返しませんが、レコードごとに一個ずつ取り込むときは「挿入」メニューを使います。フォルダごとまとめて取り込みたいときはインポート>フォルダ から一括で行けます。あれ?繰り返してしもた。
もうひとつ、レコードごとの取り込みでドラッグアンドドロップが使えます。使えますが、これが困ったちゃん仕様になっていて、ドラドロだと参照や外部保存で取り込めないんです。問答無用でファイル内に取り込んでしまいます(動画は逆に問答無用で参照になります 後のバージョンアップでさらに改悪され、もうどうにもならなくなりました)メディアの登録なんてドラッグが一番楽ちんなのに、その道は閉ざされてしまっています。ファイルメ−じゃなくてクラリス社さま、改悪ばっかやってないで要改善お願いします。
サムネイル
サムネイルフィールドもあったら便利です。ただ便利というより、FileMaker的な理由があります。ポータル表示でレコードをリスト表示するとき、オブジェクトフィールドは動画を表示できません。
図では、リストの左端にイメージフィールドを置いていますが、この場所にサムネイル画像を置くのが好ましいんですよね。
さて、フォルダインポートを使って追加するとき、オブジェクトが画像ならサムネイルも一緒に取得できます。
インポートではなく挿入を使った場合は自動でサムネイルを作ってくれません。そこで、フィールド定義にサムネイル作成を含めちゃいましょう。
※ 「参照」で挿入したときはどうあがいてもサムネイルを作成できません。なんとかなってほしいんですが何ともしてくれません。
サムネイルのフィールドオプションで計算値にチェックを入れ計算式でサムネイル自動生成します。例えば100px四方のサムネイルを作るならこんな感じです。
GetThumbnail ( イメージ ; 100 ; 100 )
GetThumbnail関数はサムネイル生成関数です。
イメージフィールドには画像以外にもいろいろ格納されるし、他で作ったサムネイル画像をペーストしたい時なんかもあるかもしれません。ですので、無条件に自動生成してほしいわけではありません。”ファイル種類”フィールドがが画像の時だけ、っていう条件をつけたりします。
If ( ファイル種類 ; "画像" ; GetThumbnail ( イメージ ; 100 ; 100 ) )
例えばこんな。必要ないかもしれないけど、ifを使ってファイル「種類フィールドが画像のときだけ」という条件つけてます。
おっと「ファイル種類」なんてフィールド作ってないぞ。作りましょうか。
ファイル種類
ファイル種類を分類するためのフィールドです。例えば「画像」「動画」など、ぱっと見の「ファイル種類」なんて分類があれば使い勝手も宜しいでしょう。
WordPressだと便利なのはposts内のフィールド、post_mime_type を利用することです。MIME_Typeは「image/jpeg」というような書き方でメディアの種類が書かれています。Exifデータにもありますね。識別するのに具合がいいでしょう。
FileMaker都合のファイル種類
FileMaker 都合の分類も有効です。というかシステム的に重要かも。ヘルプページには FileMaker が扱えるファイル拡張子が載っています。これを分類フィールドに利用することで、ファイルメーカー的な縛りを上手く克服できます。
拡張子
そんなわけで、拡張子のフィールドを作っておくことが有効で、強くお勧めしたいです。拡張子はファイル名やパスから計算式でゲットします。
私はメディア管理において、拡張子が付いていないファイルや拡張子の意味ではない「 . 」が含まれるファイルも扱いますので、拡張子を抜き出す計算式がちょっと複雑です。
普通の人は、「.」を「¶」に置換してから最後の行をゲットすることで簡単に拡張子を得られます。
ファイル名
ファイル名フィールドです。
フォルダインポートを使ってデータを取り込むときには同時にファイル名を取得できます。それ以外の取り込みでは取得できません。フィールドオプションの計算値でファイル名を取得します。
タイプ計算ではなくて計算値を使うことについて
さっきのサムネイルフィールドなんかもそうですが、フィールドタイプを計算式にしてしまうと計算結果以外に何もできなくて融通が利かないです。だからあえて普通のタイプのままフィールドオプションで計算値を使います。さらにもっというと、フィールド定義では何もせず、スクリプトを使って計算結果を入力するようなベテランっぽい考え方もあります。
ファイル名をゲットしようとするとき、実は深〜い問題を孕んでいたりします。何からファイル名を取得するのかということが、設計上とても重要なんです。これは実作していく中で気付いたことでもありました。
オブジェクトフィールドから取得
GetContainerAttribute ( イメージ ; "filename" )
これでファイル名を得られます。GetContainerAttribute関数はオブジェクトからいろいろとメタデータを取得する関数です。
FileMaker Pro 18 Advanced リファレンス GetContainerAttribute
パスから取得
オブジェクトではなく、パスから取得します。パスをどこから取得するのかという話と同じなわけですが、ここ、根幹ですからね。私個人は、最初はオブジェクト中心でしたが後にパスを基幹とする方向になりました。
ファイルパス
ということでファイルパスフィールドです。フォルダインポートしたときには一緒に取得できますがそれ以外では手順を踏んでパスをゲットします。というか、そもそも「まず最初にパスを取得する」ことからスタートしたりします。そして、この記事を書いた頃には全く知らなかった FileMaker におけるパスの扱いという難題にも後に触れることになりまして、一筋縄ではいかないこととなりました。
ということで、いろいろ説明も面倒なのでここでは割愛します。以下、このポストを公開した当時の記述が続きます。
オブジェクトからファイルパスを取得するには、GetAsText関数を使います。GetAsText の結果は複数行のテキストですが、たいていの場合は最後の行がパスです。
以下、最後の行がパスという前提で話をしていますが、割り引いてお読みください。尚、最後の行がパスではないケースとしては以下が考えられます。
- 格納での登録
- ファイルタイプが PDF、TIFF、EPS のいずれか
他にも要件があるかもしれません。何にせよ「最後の行 = パス」が真ではないことを踏まえてください。
誤った記述をお詫び申し上げます。
—- 以下、訂正せずに元のまま掲載しております —-
GetAsText ( イメージ )
こういう計算で得られた結果から「最後の行」を取得するには、GetValue を使います。さらに、最後の行を取得するために ValueCountを使います。
GetValue ( 改行含むテキスト ; ValueCount(改行含むテキスト) )
「イメージ」という名前のフィールドをターゲットにするなら、具体的にはこうですね。
GetValue ( GetAsText ( イメージ ) ; ValueCount ( GetAsText ( イメージ ) ) )
これでパス的な文言を頂戴できました。が、接頭詞がくっついていて扱いが不便なので、接頭詞を入れ替えます。
上記でゲットしたパスを「:」で改行して2行目をゲット、「file:」の後ろにくっつけます。
"file:" & GetValue( Substitute( "ゲットしたパス" ; ":" ; ¶ ) ; 2 )
… ということですが、もう少し詳しくは以下に。
—- ここまで —-
フォルダ
メディア管理システムを参照で作っていくと、オリジナルファイルが内包するフォルダ名を得たい場合が多々ありますね。分類として、カテゴライズとして、フォルダ名フィールドを作っておくと有益に使えそうです。
パスからファイル名を抜き取ったものが内包するフォルダパスになります。Substitute 関数で↓すると、最後に”/”がつきますが、直接のフォルダまでのパスになりますよね。
Substitute ( パステキスト ; ファイル名 ; "" )
これが「そのファイルを内包するフォルダ」ですが、最後のフォルダ名だけを抜き出した表示用フィールドを作っておくのもいいかもしれません。表示は「何とかフォルダ」とシンプルなフォルダ名のみ、でも実体はそのパスであるという案配です。
今後スクリプトや計算式で自在に扱えます。特定のフォルダをインポートしたのち、更新チェックで追加のみインポートとかしたいですよね。その時にフォルダ指定しやすいんです。
その他自動入力のフィールド
ファイルメーカーのリファレンスを見ると、自動取得できるメタデータはいろいろあって、写真だと若干のExifみたいのとか、容量とか作成日とか、そういうのがあります。取得できそうなものは取得してデータを充実させるが良いと思います。
あと、最初のサムネイルのところで書いたような、既存の他のフィールドを利用した自分なりのメタデータを作っていけたりしますので各自工夫します。
例えば・・・
- インポートしたフォルダを記録するフィールド
- インポート日付を記録するフィールド
- キーワード、見出し、概要などメタデータフィールド
いろいろ考えられます。
その他手動入力するフィールド
自動で取得できないデータは手動入力します。目的とするメディア管理にどういうフィールドが必要かはそれぞれですのでここは自由にやるところですね。
ムービーファイルなんかはほぼ何も自動取得できないのでデータの充実のために手動入力は外せません。Finderの情報を見るやプレーヤーで開いて情報ウインドウを見るとか、各種別ウインドウを見ながら手入力ということも、仕方なしにやります。Finderと連携させる件については後で書きます。
その他システマチックな目的のフィールド
システマチックなフィールドがあるとレイアウトで活躍します。というかファイルメーカーは何をするにもフィールドが要るので放っておいてもフィールドだらけになります。
システマチックなフィールドには、データに直結するものもあればレイアウト上の都合で必要なものもあります。
例えば・・・
- グローバルな仮のオブジェクトフィールド
- グローバルな一時的なテキスト保管フィールド
- 他のテーブルとの比較する計算フィールド
- 改行リストを表示用にカンマ区切りにしたフィールド
いろいろあります。
“FileMakerでメディア管理システムを作る話 いくつかのフィールド” への1件の返信