FileMakerで作る写真・画像・動画の管理データベース、実際に基礎から作って育てる実作編です。ver.4 では付属する情報を追加しました。そして、そろそろ使い物になってきましたよ。
このページに訪れて頂きありがとうございます。ここはかつて「実作編Ver.4」 でしたが、少し時が経ち、実作編は新しいシリーズにリメイクされ完全に置き換えられました。
このページ ver.4 は、新シリーズの R11 にリメイクされました。
↓こちらが新しいほうです。お手数掛けてすいません。
これ以下はリメイク前の旧ポストです。
実作編 Ver. 4 概要
前回の Version 3から随分月日が流れ、またまた改造を施した実作編 Version 4。ファイルはこちらです。
Download FM_MediaDB_V4_1.zip 配布終了
実作編5回目、Ver.4 の概要は以下です。
サブデータを追加
キーワードやレートなど、付属の情報をサブデータとして追加しました。メディア管理DBとして、何となく実践的になった気がします。
メタデータも追加された
サブデータとは扱いの異なるメタデータも追加されました。専用のテーブルを追加し、項目名と値により成り立ちます。今回は GetContainerAttribute から取得できるデータを取り扱いました。
フィルタ機能
付属情報を作ったからには、そのデータで絞り込みがしたくなります。複雑なフィルタリングは出来ませんが、分類ごとに項目をフィルタする仕組みをこしらえました。
ダブルクリックでプレビュー
小技を知ったので早速組み入れます。アイコンダブルクリックでプレビュー、プレビューダブルクリックで閉じるという、実装してみるとなかなか案配がよろしいです。
コードを実行するスクリプトの見直し
コード実行の仕組みは汎用的にあちらこちらのFMファイルで使い回しています。その度に雑なスクリプトやフィールドを見直し、少しずつ洗練されてきました。
他のスクリプトやフィールドの計算式も都度見直していて、毎回「前の記事捨てて書き直したい」と思うレベルの改善が図られたり、うっかり改悪してしまい混乱したりしております。
前回、実作編 Ver.3 で、数ページにまたがる記事を書いたら、ボリューム多すぎてみんな全然読んでくれなかったんで、今回はバラにして行きます。ざっくりした内容にとどめ、必要があれば別のポストにて詳細を説明します。
付属情報のフィールド
いわゆるメディアに紐付く追加データやオマケデータです。「付属情報」という紛らわしい言い方してごめん。メタデータと呼ばないのは、メタデータは別で作ったからです。
こちらは付属の情報、サブデータです。例えば「★★★」のレート、それからキーワード、それから「参照」で読み込んだパスの階層ごとのフォルダ、作成日から計算して作る「年」とか「年、月」などです。
そうこうしているとメインテーブル内にどんどんフィールドが増えます。多すぎて鬱陶しいのでテーブルを分けてぶら下げました。
SubData テーブル
FileMakerメディア管理 実作編 Ver.3 日付の情報 の その他で触れたとおり、すでにmediametaという名のテーブルを作成済みでしたので、付属データをこのテーブルに作っていきます。
1対1の簡単なリレーションです。
意味的にも技術的にもメインテーブルに収めるのと違いはありません。ただ単にメインテーブルにフィールドが増えすぎるのを避けるためだけに分けました。分ける基準も特にありませんが、何となく気持ちです。「メインだな」「サブだな」みたいな。
名前を変えちゃった
でね、ずっとmetadataという名前のテーブルだったんですが、それが気に入らなくて名前を変えました。メタデータは別で扱うので、subdata としました。
どうでもいいことなのに名前が気に入らなくて変えることがよくあります。スクリプトの中に「名前で」を多用するので、予想外のところで動作不良を起こす原因にもなります。「ネーミングが大事です」と主張している合理派の人の爪の垢でも煎じて飲め、自分。と思うこともしばしば。
付属情報の項目
具体的に何を追加したのかというと、たとえばこんなのです。
フラグ
Ver.3 でこっそり実装していましたが、まずはフラグです。🏁 とか 🚩とか、旗です。画像管理ソフトではお馴染みですよね。フラグはちょっとした印です。ちょっとした印ですから「あるかないか」即ち「1 か 0」の単純なデータです。
旗の見栄えと、付ける外すのトグルボタンを組み合わせました。もちろんフィルタリングも一発で出来るようにします。
レート
これも管理アプリによくあります。星です。★★★★★ とか ★★★ です。
旗と星はどんなソフトにも付いていますよね。フィルタ機能が星と旗しかないふざけたアプリもあります。メディア管理の本質はフィルタにあり、フィルタの中で星と旗は最も基本です。
レートとフラグについて、実装方法などより詳しくは下記のポストをどうぞ。
レートとフラグについての詳細 → FileMaker メディア管理 – 星と旗
キーワード
技術的に言うとキーワードまたはタグってのは、ほんとは「分類」として機能する独立したデータベースです。WordPressに例えると taxonomy です。
ですのでFileMakerでキーワードを作る正統な作りは、キーワードテーブルを作って多対多のリレーションを組むことです。でもそれをせず、「カンマまたは改行区切りのテキスト」としてキーワードを扱います。
その理由は、キーワードを分類として扱うのではなく、メタデータのひとつとして扱いたいからです。近い将来キーワードフィールドは、メタデータであるIPTCのタグ”keywords”に対応させるという目論見もあります。
キーワードとして二種類のフィールドを作りました。カンマ区切りと改行区切りです。入力のしやすさ、レイアウト上のフィールドサイズ、データを利用する仕組みなどを考慮すると二つのフィールドが必要でした。
カンマ区切りのフィールドでは手入力を行います。改行区切りは値一覧になり、リストから選択するときに利用したりフィルタリングの際にも使います。
キーワードの実装について、ポストを分けたので下記をご覧ください。
キーワードについて → FM メディア管理 – キーワード FileMakerでタグ的なフィールド
フォルダ階層
メディアを「参照」で登録するとき、インポート元パスがとても重要になります。メディアを内包するフォルダ、そのフォルダを内包するフォルダと、フォルダ階層を辿ったり絞り込んだりすることも多いんじゃないでしょうか。
パスの階層をフォルダとしてフィールドに納めておくと使い勝手が良いかもしれない。と、フォルダフィールドを階層ごとに複数作りました。
こういうフィールドをあえて作ることで、いろんなところで利用が可能です。例えば何かの処理を行うときに「どの階層に対して行うか」の指定を簡単に渡すことができます。
また、ディレクトリツリーのような表示を行うにも有効です。ディレクトリツリーの表示(とフィルタリング)は別ファイルでテスト済み、出来上がってるんですが実作ファイルには未実装です。
著作権情報
制作者、コピーライトなど著作権情報もフィールドとして作ります。キーワードと同じく、元ファイルに埋め込む機能を作る腹づもりですが、今回はただフィールドを作っただけで使い物になるのは今後です。
イメージサイズや日付その他
メディアの幅と高さのイメージサイズは欲しい情報ですよね。Width と Height を取得し、「 Width x Height 」の見栄えフィールドも作りました。
デジカメ写真なら撮影日、クリエイティブファイルならオリジナル作成日というメタデータがあります。これもぜひ欲しい情報ですね。取得してフィールドに記入します。ファイル作成日とオリジナル作成日がズレている場合、そのままにしておくのもあり、ファイル作成日を変えてしまうことを望む人もいるかもしれません。対応しました。
これらの取得は、現時点ではファイルメーカーの機能で可能な範囲のみで行っています。少し後、メタデータの話でもう少し詳しく。
画像管理ソフトを真似る
フラグやキーワードが追加されて実践的になった実作編ファイルですが、実践的になったことで、ひとつの欲望が擡げました。Apertureを真似たいという気持ちです。なぜ真似たいかというと、自分に必要だからです。
プロジェクト
iPhotoで言えばフィルムロールやイベント、Apertureではプロジェクトです。
「プロジェクト」は分類のひとつですが、メディアレコードは必ずプロジェクトの何かに分類されなければならないという性質のものです。
今更ですが後付けでこれを作りました。メディアを無闇矢鱈と登録していき、2000や3000を越えだすと、大きな分類が必ずや必要になってきます。
ただ、アルバムというものを実装していないので、プロジェクトがほんとに重要な分類なのかどうか、微妙なところでもあります。
読み込みセッション
メディアをフォルダからインポートしたとき、読み込みごとの記録がほしくなってきます。「読み込みセッション」は、フォルダからインポートする際に、同じタイムスタンプを記入します。
インポート時のタイムスタンプを付けておくと、フィルタリングの他、更新チェックの日時の比較でも役立ちます。
メタデータ
メタデータのテーブルを追加しました。サブデータテーブルがすでにあるのに何すんのん? はい。サブデータより自由度が高いのがメタデータです。
DBmeta テーブル
追加したテーブルの主なフィールドはこうです。
・リレーションのためのID
・Key(項目)
・Value(値)
WordPressでいうところの postmeta テーブルと同じです。フィールドを見境なく作り続けるのではなく、キーと値の組み合わせで必要なものを追加していく仕組みです。
metaテーブルへの追加は、「メタデータの束を取得してくる」ことを行い、そのメタデータの束をレコードに分配します。そもそもは ExifTool を想定していまして、まとめて取得したExifデータをmetaテーブルにレコード化するための措置でした。
今回、ExifTool まで含めると盛りすぎかと思って中止し、代わりに GetContainerAttribute のデータを利用することにしました。
GetContainerAttribute
以前「FileMakerでメディア管理 – メタデータの取得」で、取得をレベルに分けました。GetContainerAttribute はファイルメーカーの関数ですからハードルが低く、レベル3です。
GetContainerAttribute ( オブジェクトフィールド ; "all" )
これで、取得できるメタデータをまとめて全部取得できますから簡単なことですね。
メタテーブルの詳細については改めてポストします。
ポストしました。
フィルタ 絞り込み
フラグやキーワードなど付属データを作り、プロジェクトやフォルダフィールドを作りました。これらはそもそも何のためにあるかというと、絞り込みをするためです。
フィルタ機能こそが画像管理に求める基本にして最大必須の機能です。フィルタ機能、作りましょう。
分類ごとの or 検索
現時点のフィルタ機能は、分類ごとに独立したものです。分類の中でのみ項目を追加したり外したりできます。分類をまたがって複合検索に挑戦してみようとしましたが、力不足のためスマートなやり方をまだ思いつけていません。
すごい複合検索は無理ですが、そこいらのメディア管理アプリより優秀ですよ。
分類内で複数項目を選択すると、分類内での or 検索になります。別の分類からの絞り込み検索には対応できていません。すべて分類ごとです。ちょっと悔しいので、せめて「以前選んでいた分類の絞り込み結果」を保存する機能だけ実装しました。
項目を選択するインターフェイスも妥協をしています。アプリでよくあるクリックとコマンド+クリックとシフト+クリックの使い分けが実装できないので。仕方ありません。
フィルターについて詳細ポストできました。→ FileMaker メディア管理 – フィルターの詳細
CodeRun
ターミナルコマンドを実行させるAppleScriptの要、コードを実行させるための自作システムがあります。これもまたまた改良しました。育ってます。
コードを実行するFMファイルについて以前ポストしましたが、そろそろ全面的に書き直したい気分。
改良のポイントは「なるべくテーブル内で完結させること」です。これまでは複数のテーブルやフィールドを必要としていて、煩雑さの要因になっていました。
コード実行のテーブルは他のFMファイルでも使い回すことが多くて、テーブルコピペ、スクリプトコピペで即使えるよう簡素化したかったんです。テーブル内で完結させることは重要です。
コードを実行するFMファイルの話はすでに書いたので繰り返しません。関連するポストも複数あります。が、内容を大幅に更新したいので、また別途改めます。
小技
その他の小技について行きます。
ダブルクリックで発動
これまではアイコンサムネイル部分のクリックでプレビュー画面を出現させていました。
しかしリスト表示の操作中に誤クリックが頻繁に起きるので、これは良くない、と他の方法を考えます。
「ダブルクリックの判定があればなー」と思わずにおれません。FileMakerにはダブルクリックの判定機能がありません。
できないものと諦めていましたが、スクリプトにタイマーを仕込めることを利用したテクニックによりダブルクリック判定ができると知りました(ネタ元URLを失念、複数ページを見て回った記憶があるのですが・・)
早速パク真似して取り入れます。
実行させるスクリプト名を引数で渡すだけなので、このスクリプトは汎用で使えますよ。
しつこくファイルパスについて
さてFileMakerで扱うパスについて理解が足りない筆者はこれまでにもごちゃごちゃとパスについて書いてきました。今回もまだ理解不足のままパスについて書きます。
ファイルメーカーが照合を間違える
ファイルパスでリレーションをしていたのです。
これ実はまともに動きません。なかなか気づきにくいのですが、ファイルメーカーったら間違いを起こします。
あまりにも間違いが多いので何とかしようと照合フィールドを追加してみたらさすがに間違うことはなくなりました。
やれやれ。と思ってる場合ではなくて、これでは駄目なんです。リレーションを元に新規にレコードを作成するタイプのスクリプトや仕掛けが動きません。そういうのはリレーションの照合がひとつだからこそ動く仕組みなんです。
苦肉の策で、テーブルオカレンスを増やしてリレーションを設置。目的別に使い分け、なんとかこれで思い通りの挙動を手に入れました。
この無理矢理な解決方法、まったく気に入りません。こういう無意味な無駄を増やしたくない。
記号を置き換える
多分、パスに含まれる記号が良くないんだろうと思います。そこで、計算フィールド「リレーション用パスモドキ」を作成します。「/」や「~」や「.」など記号を片っ端から「_」に置換します。結果、ファイルメーカーは間違いを犯さなくなりました。
照合だけでなく、検索でも同じことが起きます。記号が含まれた検索を正しくできません。多分エスケープする必要があるんだと思います。
で、照合にリレーション用パスもどきフィールドを使うことで、上記の無駄なリレーションは不必要になり、解決に至りました。
ですが、上記の無駄リレを前提にたくさんのスクリプトが作られています。それら全てを検証しながら変更することが困難なので今回は諦めました。故岩田社長なら「修正は困難だがすべて作り直せば早い」と言うでしょう。いつかもしかしたら全面的に書き直すかもしれませんがわかりません。
… ここで追記ですが、油断していました。記号を置き換えてもときどき照合を間違えます。記号が原因ではなかった。
ちっとも解決なんかしていませんでした。
この不出来の酷いところは、間違ったまま照合を成立させてしまう点です。見つけるのが非常に困難です。
これまで、長年この問題を知りつつ放置してきました。しかしそろそろ限界です。考察していきましょうか。
追
この件、別のポストにて詳しく行きます。公開すればここからもリンクします。
ポストしました。原因が判明し解決しました(が、ver4ファイルには反映されていません。ver5で採用します)
FileMakerで正しくリレーションできない現象、原因と解決
ユーザーインターフェイス
特に話題にしていませんが、インターフェイスも着々と改良されています。
ツールを畳んだとき
ツールバーを畳んだときにレコード総数や番号や送りボタンなどを表示します。ツールバーを表示しているとダブるので表示しません。
ツールバーや書式バーなど、関数を使うときに用語が分からなくて困ったことによくなります。いまだに、自分で書いた記事を検索して参照するくらい覚えられません。-> FileMaker ウインドウに関する忘れがちな用語のまとめ
情報パネル
情報パネルを右側に集めてスライドの切り替えで賄います。
収まりきらないものもありますが。
検索モード対策
スライドを駆使して一画面にすべてぶち込んでいます故、検索モードにされてしまうと無茶苦茶な画面が現れます。
検索モードを阻止するため、検索モードである場合は専用画面が出てくるようにしました。嘘です。専用画面ではなく、専用画面の振りをしたオブジェクトです。すべて隠すのです。これで不用意に検索モードにされてもOK。
検索モードを判断する関数なんだっけ。数字は何だっけ。いつもそうなります。そこで、自分が書いた記事を参照するのが常です。
-> FileMaker ウインドウに関する忘れがちな用語のまとめ
リブートされた記事のインデックスはこちらです。
リブート実作編では別の進化を遂げていくはずです。総合案内を置いときます。