FileMakerでメディア管理システムを作る話 概要

FileMakerで画像管理データベースや動画管理データベース、即ちメディア管理システムを作ってみましょう。

FileMakerで画像・動画データベース

画像管理のアプリケーションを探し求めて試用しまくり、どれにも満足できないとき「自分でアプリケーションを作れたらなあ」とよく思います。ですがスキルがないので何もできません。

でも待てよ。結局画像管理のデータベースがほしいだけだろ?ならFileMakerで作ってみればいいじゃないか。と、思ったりしますので、さっそく試しましょう。

実は遙か昔に同じことを考えたことがありました。FileMakerで会計システムを作ろうとしたり画像管理システムを作ろうとしたりしていました。でも当時のFileMakerはリレーション機能もないし、そもそもパソコンで画像を扱うこと自体が重くて大変で、しかもHyperCardで絵本を作るくらいしかできないぼんくらスキルではどうにもなりません。とうてい使い物になるようなものは出来ず、それ以降完全に諦めていました。でも今ならハードウェアも進化したしもしかして割といいものができるかもしれない、スキルはともかく、と、そう思って再チャレンジするのです。

つまり…

上の段落で言いたいことは、当ブログの一連の記事はFileMakerのエキスパートのプロフェッショナルによるご高説の解説でも講演でもなく、デジタル部活の身の丈の活動ということです。たまに間違いもあるし変なことを言うかもしれません。そのときは、アドバイスをお願いします。

FileMakerのメディア機能

FileMakerには画像や動画などメディアファイルを扱える機能があります。

まず画像やメディアを取り込めます。読み込んだ画像を指定したフォルダに格納したり、そもそも取り込まず「参照」して管理できたりします。動画プレイヤーが内蔵されていて動画を再生することもできますし、PDFも表示できます。

扱えるファイルタイプはさほど多くありません。Photoshop psd の扱いに不埒もありますし、MacではOSが上る度に再生できる動画の種類がどんどん減っていきます。

FileMakerはグラフィックソフトかというくらいレイアウト画面を作り込めますから、デザインの工夫もできます。これがあるからFileMakerでものを作るのが楽しいんです。ただし、世にある普通の画像管理のアプリみたいに、レコードをタイル状に配置して表示することはできません(無理矢理できなくもないですがレコードの表示機能としては用意されていません ※

画像管理ソフトのサムネイル表示
このようなタイル状の表示はFileMakerでは簡単にはできません

FileMakerにポータル機能がついたとき「いつかポータルを横方向やタイル状に並べたりできるようになるに違いない」と思いましたがなりませんでした。

サムネイルを並べたかっこいい見た目は難しいですが、そのかわりデータベースソフトならではの、数多のフィールドを作って縦横無尽に絞り込んだり他と連携させて活用させるシステムは作れます。これこそが一般の画像管理ソフトで不満のある部分なのでFileMakerを利用する大きなメリットとなるでしょう。

FileMakerで作ったメディア管理の例
FileMakerで作ったリスト中心のメディア管理の例

そもそも史上最高峰画像管理アプリApertureではリスト表示も出来るのでして、他の画像管理アプリでこれができるのも少ない。「リスト表示させろや」と凄んでいましたがFileMakerで作れるのがまさにそのリスト表示じゃありませんか。これってむしろ理想じゃね?

Apertureのリスト表示
Apertureのリスト表示

※ サムネイル画像をタイル状に並べるビューについての追記

過去、レコードをタイル状に並べる工夫がいろいろ試されてきました。ポータルを無茶利用したり、近年はWebビューアを使用したりと、無理矢理な工夫が見られました。私はこうしたナンチャッテ表示について興味がなく知らなかったんですが、実はWebビューアを使用したタイルビューはかなり使い物になることがわかりました。それで試しに作ってみたところなかなかイケてることが確認できまして、それについて投稿しました。こちらです。

FileMakerでメディア管理 – サムネイル画像のタイルビューを作った

FileMakerではメディアのメタデータを取得する関数も用意されています。使用目的によっては十分なデータを得られます。ですが私個人は期待していたより貧弱と思えました。とくに映像に関しては弱いですし、ファイルそのものから取得できる情報も少ないです。

この記事は当初FileMakerでWordPressを扱うという意図で書き始めましたが、FileMakerだけで内容が濃すぎてWordPressまで届きませんでした。WordPressのメディア管理はまた別口で用意します。

用意しました → FileMakerでWordPressメディア管理

メディアのインポート、挿入、参照

メディアを扱うためにデータベーステーブルを一つ作成してフィールドを用意します。何をさておいても画像や動画を収めるメインのフィールドが必要ですね。オブジェクトタイプで作成します。

オブジェクトタイプのフィールド

オブジェクトタイプのフィールドには画像や動画やPDFやファイル、さまざまなオブジェクトを格納できます。

ちょっとつまずくポイントは、その表示の制御が二種類あるってところです。

レイアウトモードでオブジェクトタイプのフィールドを選択しインスペクタを確認するとこういうのがあります。

データの書式設定
データの書式設定

「次の用途に最適化」でイメージとインタラクティブコンテンツ、どちらかを選択するようになっています。この選択によって、見た目だけでなくメディアを挿入するときの挙動が変わってしまうのです。まずここにこういう設定があるということを抑えておきましょう。

さて、メディアを取り込むいくつかの方法があります。

挿入メニューから挿入

まずは「挿入」メニューです。オブジェクトフィールドを選択して挿入を選ぶとさらに「ピクチャ」「ファイル」それからグレーアウトと選択肢があるので選びます。

挿入メニュー
挿入メニュー

あれれ?グレーアウト?何で何で?それは先ほどの書式設定のせいです。

書式設定で「イメージ」を選択しているとビデオがグレーアウトします。「インタラクティブコンテンツ」を選択するとすべての項目が選べます。

書式設定が「インタラクティブコンテンツ」だと、動画ではメディアプレーヤーが内容を表示してくれます。

FileMaker内蔵ムービープレイヤー
内蔵ムービープレイヤー

参照と取り込み場所

「挿入」メニューからダイアログで目的ファイルを選択すると、ダイアログの下方に参照するかどうかのチェックボックスがありますので、データを取り込まず(複製せず)参照にしたい場合はチェックを入れます。参照にするとファイルは元の場所に留まりFileMakerではその場所だけを記録し、管理します。

チェック項目 - 参照データの保存
チェック項目 – 参照データの保存

参照しないときはFileMakerのどこに取り込まれるのでしょう。それを司るのがフィールド定義のオプションです。

フィールドオプション
フィールドオプション

オブジェクトフィールドのオプション、データの格納タブに保存場所を指定する欄があります。ここで保存場所をセットできます。セットしないとFileMakerの書類の内部に格納されてしまいファイルサイズが膨れあがるので注意。保存場所はデフォルトの場所以下の設定したフォルダになります。「保存先」と書かれた横のポップアップに示された階層ありますよね。それがデフォルトの格納場所で、外には出られません。

デフォルトの格納場所を変更したい場合はここではなく別のところから設定し直します。ややこしいですね。別のところとは、ファイルメニュー > 管理 > オブジェクト… です。

オブジェクトの管理ウインドウ
オブジェクトの管理

ここで新規に場所を作り、改めてデータベース管理から設定し直すことになります。しかしここでも[データベースの場所]からは逃れられません。格納場所は常にデータベースファイルのある階層です。

メディア管理アプリでよくある「ライブラリの中のマスターフォルダ」みたいなものとして受け入れます。

さて、フィールド定義のオプションに「セキュア格納」「オープン格納」という選択肢がありますが、普通にファイルとして扱いたいならオープンで格納します。

ドラッグドロップによる読み込み

読み込み方法についての話に戻ります。

オブジェクトフィールドにドラッグドロップしてもメディアを読み込むことが出来ます。気軽に取り込める方法ですが、無条件に格納として読み込まれ、参照を選べません。ドロップしたものがムービーファイルの場合は無条件に参照になるようです。ドロップしたとき、こちらには格納方法を選択する権利が与えられていません。この仕様はちょっぴり残念ですね。

ちなみにApertureでは、オプション+コマンドを押しながらドラッグすると参照で読み込まれます。さすがにこういう機能は無理か。トリガー使ったらできるのかな。

フォルダをインポート

さてメディアを取り込む方法、挿入メニュー、ドラッグ、どちらも一つのレコードにひとつのメディアを登録するだけです。まとめてごっそり登録できないのでしょうか。できます。それはフォルダのインポートです。フォルダごとまとめて読み込むことが出来ます。

ファイル > レコードのインポートからさらに「フォルダ…」と進みます。

インポートメニュー
インポートメニュー

そうすると、フォルダの一括インポートオプションが出てきます。フォルダを指定し、読み込み方法、下位フォルダを含めるかどうか、そういうのを設定します。

インポートオプション
インポートオプション

続行すると、通常のインポート画面に切り替わりますので、どのフィールドに何をインポートするのか選んであげます。

インポート画面ではあらかじめ「イメージ」「ファイル名」「ファイルパス」「イメージのサムネール」という項目が用意されていて、対応するフィールドがあればこれらを取り込めます。この画面を最初見たときは「へえ」と少し驚きました。

インポート画面

フォルダをインポートすると、ファイル名やファイルパスまで一緒に登録されます。これはとても有能ですね。

フォルダインポートではない読み込みの場合、ファイル名もパスもサムネイルも自動で読み込まれませんから、それを作るための計算式かスクリプトを準備しておかねばなりません。

メディアファイルをフォルダごとレコードに追加できるという方法でした。

さてこうして画像などメディアを含めたレコードが作成され、データベースができあがりました。あとはレイアウトを作ってこのデータベースをさらにブラッシュアップしていきます。

していきますが、そのときどういうフィールドが必要か、どういうレイアウトが必要か、そんなのは人それぞれです。勝手に好きなように濃厚なデータベースシステムを作りましょう。

…それではそっけないので、ちょっとだけ触れておきます。

フィールド

メディア管理ですからオブジェクトタイプのメディアフィールドは必須ですね。それ以外に何が必要でしょうか。

ファイル名ファイルパス。これらは必須系と言っていいでしょう。サムネイルもあればいいですね。

ID。IDフィールドを用意することが重要です。連番でもuuidでも何でもいいですが、ユニークでレコードを特定できるプライマリーなキー、IDはシステム的に必須です。

メタデータ。メディアを管理するのだからメタデータがないと始まりません。ちょっとしたデータならFileMakerの関数で取得できます。もっと欲を出してがっつりメタデータを取得することも可能です。どういうメタデータを必要としているかがFMメディア管理の根幹を揺るがします。かんたんシンプルデータベースからデジタルアセットマネジメントと呼べる長大高機能システムまで、それは知恵と工夫とやる気と時間次第。

変換されたパス。FileMaker形式のパスをOSで使用する書式に変換したパスフィールドはシェルスクリプトやOSのファイル管理と連携させるために必要です。MacだとUNIXのパス形式であるPOSIXですね、ちょっと凝ったことをするにはフィールドとしてあったほうがいいでしょう。

フィールドに使う関数

フィールドに手動でデータを入力するなんてことを避けたいのは全人類の希望です。

GetThumbnail

イメージからサムネイルを作成する関数です。

GetThumbnail (ソースフィールド ; 幅 ; 高さ)

こんなふうに使います。指定サイズ、または幅や高さに合わせたサイズで作成できます。

GetContainerAttribute

オブジェクト関数のGetContainerAttributeは、オブジェクトからメタデータを取得できます。

GetContainerAttribute (オブジェクトフィールド ; "属性名" )

このように書きます。属性名のところに、あらかじめ用意されている属性名をタイプします。

ファイル名を取得するのはこんな感じ。

GetContainerAttribute ( オブジェクトフィールド ; "filename" )

取得できる属性は、ファイル名、ファイルサイズ、イメージだと幅や高さやDPI、写真ならカメラ情報や写真の向きに関するメタデータやタイムスタンプなどいろいろあります。詳しくはファイルメーカーリファレンスを検索して使える属性名を確認してください。用とによってはGetContainerAttribute さえあれば満足できるかもしれません。もしそうならFileMakerで作るメディア管理システムの完成は近いです。

満足できない場合は、さらなる高見を目指してExifToolをインストールしたりします。

GetAsText

テキスト関数のGetAsTextを使って、ファイルパスを取得できます。

ファイル名、ピクセルサイズ、種類、パスなどを取得できる関数です。指定するフィールドによって返すテキストが異なりますから使用するのがちょっぴり難しいのですが、ヘルプによると

外部に保存されたオブジェクトデータでは、データは次の例にある書式で返されます:
GetAsText (オブジェクト) は、次を返します。
remote:cat.jpg
size:320,240
JPEG:Images/Animals/cat.jpg

ということです。

これを実際に使用するときは、計算式が少々複雑になります。結果の内容や行数がオブジェクトによって異なりますし、改行を含むテキストから必要なものを取り出す計算式とセットで使うことになるからです。

検索置換を行うSubstitute、検索文字列が含まれるかどうかを調べるPatternCount、改行が含まれるテキストの何行目かを指定するGetValue、フィールド内容が何行あるのかも示すValueCountや位置取得のpositonなど、関数を巧みに組み合わせて目的のデータ内容を得ることになります。

GetAsText が必要とされるのはファイルパスの取得です。それ以外はGetContainerAttributeで取得できますから。パスは大抵最後の行に書かれています。

ということで、読み込んだ画像に関するいろいろなフィールドのデータは、GetContainerAttribute と GetAsText を使って自動入力できます。

FileMaker Pro v18 以降の便利な機能

バージョン18の新機能として、外部のファイル操作を可能にするスクリプトステップと関数が追加されたようです。ファイルの存在を確認したり、名前を変えたり捨てたりできます。18以降をお持ちならファイル操作もFileMakerの機能を使って行えますね。18未満のあなたや私はAppleScriptを駆使するしかありません。

レイアウト

FileMakerの個性的なところはレイアウト中心であるところです。レイアウトとテーブルオカレンスが一体となる概念の理解が難しい点でもありますが、レイアウトの何が楽しいってやっぱデザインで遊べるところですね。機能させることを忘れて見た目に没頭しすぎないよう注意します(←機能させることを忘れて見た目に没頭しすぎているらしい)

セルフポータル

FileMaker Pro 17から(でしたっけ?)セルフポータルの機能が追加されました。リレーション設定を作る必要なく、自己データをポータルとして表示できる機能です。要は画面内にリスト表示を含めることができる機能で、これにより飛躍的にレイアウトの性能が上がりました。リスト表示とメイン画面のレイアウトをそれぞれ用意して切り替えなければならなかったこれまでのレイアウト作法を完全に過去のものにしましたね。

じつはこのセルフポータル機能が追加されたことで、これまでやりたくても出来なかったレイアウトデザインが可能になり、既存ファイルを大幅更新したり、新たに何か作ってみたりするようになりました。メディア管理もそういった中で作ってみようと思えるようになったというわけです。

リストを画面内に配置することが出来るようになったのが実に大きい

カード表示

もうひとつちょっとお気に入りはウインドウスタイルにカード表示が追加されたことです。これはFileMaker Pro 16くらいから実装されましたか?

window style: card
カード表示

FileMakerのレイアウトデザインを行う中でちょっとした欠点はウェブブラウザのような「戻る」機能がなく、それを実装するのがとても難しいところです。にもかかわらず、レイアウト内でレコード移動や検索、絞り込みなどして他のレコードを参照することは頻繁にあります。元の状態に戻ることができないので都度不便を感じていました。

そんなわけで、一時的に参照したり表示したいとき、これまでは新規ウインドウでやっていましたがこれにカード表示が加わってより小気味よく行うことができるようになりました。

メディア管理ではプレビュー表示でも活躍するんです。

スライドアニメーション

その他、地味に気に入っているのがスライド機能です。タブとスライドは目的も機能も同じようなものなのですが、スライドでは切り替え時にアニメーションを設定できます。ぬるっと切り替わります。こういうのはユーザー体験的に大事なんですよ。アニメーション機能はレコード移動やその他、いろんな切り替え時にもぜひ実装してほしいです。

FileMakerによるメディアカタログは使い物になるか

なります。

付随する情報を好きなだけ付け加えられますし、関連するデータベースとの接続もできますし、メディア管理システムとしてかなり強力なものができます。

ただしメディアそのものの表示の弱さ、メタデータ取得の弱さ、それからファイル操作をはじめFileMakerであること自体の機能の制約はもちろんあります。プラグインで画像レタッチやHandBrakeないんかいとかあらぬことを望んだり、扱えるファイルタイプ少なすぎるやろとか、欲ばかり出てきますがキリがありません。

ペンギンアイコン mini

ここでざっくり書いたことを「概要」ということにして、もうちょっと丁寧に仕切り直しました。

ペンギンアイコン miniその後もメディア管理データベースを作るテストをちまちまとやっています。
タイルビューを実現できました

ペンギンアイコン miniWordPressのメディアを管理する話です。

ペンギンアイコン mini特に分類していないけどメディア管理絡みのメタ。知見が広がってきておりますよ。

ペンギンアイコン mini実際にファイルを作って育てていく試み

これまでのことを踏まえて仕切り直し、基本の素の状態から実際にファイルを作成していく実作編です。バージョンごとにファイルをダウンロードできます。