実際のファイルと共に綴るFileMaker 画像データベースの作り方、R11です。フォルダ階層のツリー表示によるフィルタペインが追加されました。ライブラリ管理では更新の自動化が可能になり、その他キーワード、星、旗などのいくつかの定番フィールドが追加されました。
MediaDB R11 何が新しいか
今回は少し盛り沢山になってしまいました。1バージョン1投稿1機能を目指したんだけど・・つい。主な新しいところは次の通りです。
- フォルダ階層のツリー表示を追加しました。左側のペインに切り替えで表示できます。
- ライブラリ管理にバージョンの概念を導入し、過去バージョンで作成したライブラリを最新に更新することができるようになりました。
- 画像データベースでお馴染み、キーワード、星(レート)、旗(フラグ)を追加しました。他に「見出し」「概要」「著作者」「コピーライト」など、よくあるフィールドを追加しています。
その他、いろいろあります。
- メタデータパネルにコマンド GetFileInfo による情報を追加しました。これはファイルリソース「タイプ」と「クリエータ」を取得します。昔のファイルにだけ入っている情報で、ほとんどの今時の人に関係ありませんが古いファイルを取り扱う場合のみ少し役に立ちます。
- フィルタペインのスクリプトを刷新し、「設定」レイアウトでフィルタペインに表示する項目をコントロールできるようになりました。
- 多機能と共に少し遅く感じる操作が増えたため、ローディングの小さな画面を追加してみました。
MediaDB R11
DownloadMediaDB_R11.zip
FileMaker Pro v19.3 以降。Mac専用。
v11 (11.26) 2023.07.03 若干の修正
最新のバージョンは INDEX から確認してください。
マニュアルページ作り始めました → 使い方 最新のバージョンに準じていますが。
新しい機能、使い方ベース
では使い方ベースで見ていきます。いつものように最初は空なので何かインポートして使い始めてください。インポートするとこんな感じの見栄えになります。
フォルダ階層
左側ペインにフォルダ階層のツリー表示が新たに追加されました。上部に切り替えボタンで表示できます。どの階層でもフィルタできます。
フォルダ階層が表示され、最下層のフォルダ名以外には►▼の印が付き、クリックで展開・折り畳みがされます。最下層のフォルダ名クリックはフィルタが実行されます。階層途中でのフィルタは、右側の一定範囲がフィルタ実行ボタンのエリアになっています。
セッションを変更
MediaDB にはセッションという概念があります。インポートで選択したフォルダをフィルムロールのように扱い、分類として記録しています。内部的には単にフォルダのパスがその正体です。
フォルダ階層でフィルタした状態である場合、セッションを現在の対象のフォルダに変更できるようになりました。
ここで注意が必要なことは「格納」で登録した場合です。
格納ファイルはライブラリ内の所定のフォルダにあります。フォルダ階層で表示されているのはインポート元ではなく実際のファイルがある場所ですので、「Library/Media/Masters/」(フィールド管理の指定保管庫のパス)になります。セッションの変更にあまり意味があると思いにくい。
さらに、ビデオファイルは格納で取り込んでも強制的に「参照」になります。画像ファイルはライブラリ内の所定フォルダに、ビデオファイルはオリジナルの場所にあることになり、セッションが同じでも、オリジナルのパスが異なります。これを変更してしまうと、インポート元で分類したのがバラバラになりますね。
「セッションの変更」というのは、基本的に参照で管理している場合にのみ意味がある機能と言えるかもしれません(というか、フォルダ階層表示そのものが参照登録向きです)
フィルタペインの項目を設定
フィルタペインも刷新され、この場所に出現させる項目の設定を可能にしました。
これまでは、値一覧を作成しフィールドフルネームで名付けることとしていましたが、そうやって作ったとしても、そこからさらに手軽に表示・非表示を設定したい。はい。設定ウインドウのタブに新たに設定画面が登場しました。
2つボックスがあって、右側が作成済みのリスト、左側にコピペするなり何なりしてリストを作ります。左側にリストした項目が実際のフィルタペインに表示されます。
リストからクリックで選ぶわけでもないし、表示されているのも無骨なフルネーム、簡単になったと言いながらちょい不細工です。ですので「ちょい簡単になった」と思いましょう。ペインの表示をコントロールできることは良いことです。
キーワード
キーワード、星や旗、見出しなど一般的な画像管理アプリで見かけるフィールドが追加されています。まずはキーワードからいきます。
キーワードという言葉を用いていますが、さほど多機能ではないし(親子関係も作れない)これはタグと言ったほうが良かったかも。と、いう簡易なタグ的なキーワードです。
レコードにキーワードを追加するには、最初は直接入力します。AI が画像を判断して「猫」とか「桜」とか自動で入れてくれません。手で入れてください。
複数入力するには、キーワードごとに改行またはカンマで区切ります(カンマ+半角スペースでもOK)
一度入力されたキーワードなら、横のポップオーバーからチェックボックスで再入力できます。
FileMaker のチェックボックスは大きな弱点があって、それはフィールドのサイズを固定するしかないことです。スクロールもできませんので、配置するのが難しいです。キーワードがどれくらいの数になるのか、使ってみるまでわかりません。その数に応じて、レイアウトモードでフィールドとポップオーバーのサイズを調整してください。
左側のフィルタペインでは新たに「キーワード」のラベルが現れ、入力済みのキーワードでフィルタすることもできます。
キーワード欄の横の歯車から、高度な編集ができます。
- 指定キーワードを対象レコード(または選択したレコード)に追加
- 指定キーワードを対象レコード(または選択したレコード)から削除
- 指定キーワードを削除、全てのレコードから取り除く。
- 指定キーワードの名前を変更
旗と星
フラグ(旗)を付けたり、レート(星)をセットできます。
左側のフィルタペインにも現れますが、フィルタペインでは「その星の数」しか検索しません。星三つなら星三つだけを検索します。星を使うときって「星3個以上」とか「星4つより少ない」とか、そういう風にフィルタしたいと思うんです。現在のフィルタペインではそのような複雑な条件に対応できません。
「<、≦、>、≧」を条件にしたいなら、検索モードに入るしかありません。
検索モード
フィルタペインが頼りないときはFileMakerの検索機能を使ってください。コマンド + F で検索モードに入りますが、検索しやすいレイアウトデザインにはなっています。
rate のフィールドでは「<、≦、>、≧」といっしょにセットできます。過剰に親切ですね。
見出しや著作者
IPTCタグ的なフィールドをいくつか追加しています。見出し、概要、著作者、コピーライトなどです。コメント欄は前回にもありました。他にも、著作者EMail、著作者URLも追加していますがレイアウトに配置していません。お好みで配置してください。
これらのフィールド内容は将来エクスポート時にファイルに書き込んだりしたいなーという希望を持っていますが、現時点では何の処理もしていません。
ライブラリのバージョン管理
作って育てるMediaDBのファイル群は、育ち盛りなので毎回変更点があります。R10のライブラリをR11で使ったら上手く動きません。そこで、バージョン管理することにしました。
ライブラリ管理の使い方自体は前回までと同じですが、仕組みが変更されいて、ライブラリをどのバージョンで作成したかによって、注意書きが出たり更新を促してきます。
バージョンが合わないとライブラリとして使用不可になり「更新」と出ます。
バージョンがない頃に作ったライブラリなら「未確認」と出ます。どちらにせよ「更新」しか選べません。更新しないとライブラリとして使用できなくしました。
そうです。ライブラリファイルのバージョンを更新できるようにしたのです。
ライブラリの更新
「更新」ボタンで登録済みのライブラリが最新に更新されます。
更新ボタンをクリックすると自動で更新作業が行われ、そのライブラリでファイルを再起動することになります。
再起動直後の起動過程で旧ライブラリからデータの引き継ぎが行われます。ライブラリの旧ファイルは、念のために別名で同じ場所に保存されており、もし万が一更新に失敗した場合でも復帰可能です。
このバックアップファイルは、次回の更新で棄てられますから、心配性の方は独自にバックアップしておいてください。
Mediaフォルダというのがあります。画像データはこの中に入っています。参照登録ではサムネイルくらいですが、格納でインポートした場合はマスターファイルが入っています。FileMakerのファイルなんかより、このフォルダのほうがよほど重要です。
その他の見た目の変更
起動画面が可愛くなったりしておりますがそれはどうでもいいか。
ちょっと小気味が良い機能を追加しています。本当にちょっとしたことですが、思想部長的にはとても重要な一手間です。
wait… 小さなLoading.gif 画面
フィルタペインでのフィルタ、検索ですね、これを行うとファイル数が多いと僅かに待たされます。クリックしてから検索結果が表示されるまでに空白の時間があり、何のフィードバックもありません。そういう場合、人はイラつきます。
それで、クリック直後に小さな待ちの画面を出すことにしたんですよ。僅かの検索時間ですが、この画面が出てくることでクリックがきちんと評価されたのだと自覚できますし、だから待てます。たったこれだけのことで精神衛生上とても良い効果があると改めて確信しました。
仕組み編
仕組み編行きます。ここで丁寧に説明してしまうと長大になる上に後の参照にも不便ですので、それぞれの投稿へのリンクになります。
キーワード
キーワードは独立したテーブルのデータではなく、フィールド内のテキストです。高機能なものではございません。タグと言ったほうが近いです。
この機能の正体は二つのフィールドです。カンマ区切りの keywordsDisp と改行区切りリストの keywords です。
カンマ区切りの keywordsDisp が表示と入力用フィールドで、改行区切りの keywords は keywordDisp を計算で改行区切りに変換したものです。
キーワードの実装と仕組みについては、すでに詳細の投稿があるのでご参照ください。投稿では「タグ」となっていますが意味は同じです。
旗と星
旗のアイコンで示すフラグと★の数で示すレートです。どちらも実体は数字フィールドで、flag フィールドは 1 かどうか、rate は1〜5 かどうかという、それだけのことです。レイアウトの見栄え的な工夫で判りやすい表示となっています。
こちらの機能もすでに投稿があります。詳しくは以下を参照してください。
フォルダ階層
初のお披露目となる「フォルダ階層のツリー表示によるフィルタ」です。ずっと前から温めていたのですが、結局旧実作編にも実装できませんでした。
まずフィールドとして mainData 内に「フォルダ階層」を用意しています。パスを元に計算で作られるフィールドで、パスの階層を改行区切りテキストつまりリストに変換したものです。これが機能の要になります。
もしファイルパスがこうなら
Volumes/DiskA/works/image/pict001.jpg
「フォルダ階層」は自動計算によりこうなります。
DiskA DiskA/works DiskA/works/image
Folders テーブルを新規に作成し、「全レコードのフォルダ階層」を1行ずつバラしてレコード化しました。これは、フィルタペインの FilterItems テーブルと同じ理屈で、メインブラウザにポータル表示させるために存在するテーブルです。
詳細は別の投稿にしておこうと思います。アップされたらここにリンクされます。
ライブラリのバージョン管理と更新機能
ライブラリバージョンの必要性
成長過程のMediaDBは頻繁に内容が変わります。ライブラリフォルダ内のファイルも同じくです。よって、最新ファイルと最新ライブラリフォルダ(内のファイル)の組み合わせでないと上手く動きません。
また、ライブラリ管理というテーブルでライブラリフォルダを管理しています。ここの情報も、実態に沿ったものでないといけません。
メインファイル、ライブラリ管理テーブル、そしてライブラリフォルダ内のデータファイル、それぞれが整合性の取れた関係にあるか、確認する仕組みがライブラリバージョンです。
ライブラリバージョン
バージョン管理の大元はメインファイル MediaDB の 設定テーブル内ライブラリバージョンフィールドです。制作者がここにバージョンを書き入れます。これが全ての基準です。
設定テーブル内にバージョンを記入すると、以下のそれぞれに同じバージョンが反映されます。
- ライブラリ管理テーブルの現在使用中のライブラリレコードのバージョンフィールド
- 現在使用中のデータファイル mainData の mainData設定にあるライブラリバージョン
- ライブラリフォルダ内の pref.txt の内容
現在使用していないライブラリ内のファイルには変更がありません。よって「バージョンが異なります」となり、更新を促されます。
バージョンを確かめる手段
ライブラリ管理をしていてですね、既存ライブラリフォルダを選択して登録できます。「フォルダパスを取得」など既存機能を使って、フォルダとファイルパスをレコードとして登録することは容易ですね。しかしそのやり方ではバージョンを確認することができません。
ファイルを開けばバージョンフィールドが読めますが、でも開くわけにはいきません。使用していないライブラリですし。既存ライブラリをことごとく外部データソースとして登録し続けるわけにはまいりません。
そこで、気軽にバージョンを確かめる手段として、テキストファイルをライブラリフォルダに作成することにしました。FileMaker18以降に搭載されたデータファイルの作成機能を使います。
R11のこのバージョン以降は、新規にライブラリを作ったらライブラリフォルダ内にバージョンだけが書かれたpref.txtが作られるようになりました。FileMakerスクリプトを使って目的ライブラリフォルダのpref.txtを読んでバージョンを知ることができるようになったわけです。
そんなわけで、ライブラリ管理では、バージョンをチェックし、メッセージを表示することができるようになりました。
更新
これで満足すると思っていましたがしませんでした。「更新」ボタンほしい。更新作業を自動化させたい。よしやりましょう。
更新作業を自動化させるのは勇気がいりますが、なーに試作にすぎないから畏れることはない。ということで次のような工程をスクリプトで自動化させたのです。
更新するライブラリフォルダにはMediaフォルダが作成されいるはずで、画像データがあります。これは手を付けずそのまま再利用します。このフォルダを複製するのは非現実的ですからね。Mediaフォルダを生かしたままファイルだけ入れ替えます。
工程
最初の工程、指定ライブラリフォルダのファイルを追加・入れ替えします。
-
-
- 更新先ライブラリフォルダにある mainData, metadata, Importer の三つのファイルを名称変更、「Backup_」を先頭に付けます。
- 現在使用中の mainData, metadata, Importer の三つのファイルを、変更先ライブラリフォルダに「内容空で別名保存」します。
- 現在使用中の DBTools フォルダを、フォルダごと更新先ライブラリに複製、入れ替えます。
- 管理レコードと変更先フォルダ内の pref.txt の内容を最新バージョンに書き換えます。
-
次の工程、更新先ライブラリを指定してメインファイルを再起動します。
実はスタートアップのスクリプトに更新作業スクリプトを含めています。即ち、使用するライブラリフォルダ内に「Backup_」の三つのファイルが存在していれば、更新作業に突入するというスクリプトです。
- スタートアップで「Backup_ 」ファイルの存在を確認し、もしあればバージョンを更新する作業に入ります。
- 起動を続けると中身が空のデータファイルが開きます。念のために空であることを確認してから、Backup_と名前の付いたファイルをごっそりインポートします。mainData と metadata でこの作業を行います。Importer はもともと作業用ファイルだからどうせ中身は空だしどうでもいいので棄てます(なら最初から作んなよ)
- フィールドの自動計算を停止した状態で純粋インポートしますから、インポート後にちょっとした手間を掛けてフィールドを更新(セルフ全置換)します。これで各種計算が成されます。
- インポートが終わったのでBackup_ファイルをリネームします。棄ててもいいけど念のため。リネームしないと次回起動時にまた更新が始まってしまいます。Backup_の代わりに prev_の言葉をくっつけておきましょう。次回の更新があれば上書きされます。
以上が更新の全工程でした。やってることは簡単なことです。手動でやると面倒なだけですがスクリプトが勝手にやってくれます。
ここまでできてようやくライブラリ方式の真の恩恵を得られましょう。複数のライブラリを使い分けるテストを行い、十分に実用的だと確信した次第です。
「データファイル作成」を初めて使ってみた pref.txt ですが、これは他の用途にも流用できそうですね。plist を駆使するプロっぽいことの真似事が素人流で出来そうです。
処理待ち時に表示する Loading.gif
ローディングのことを上の方で書きましたが仕組みは単純で、Webビューアに loading.gif を表示させて「隠す」を駆使するだけです。ただ、思想的に重要かなと思えることがありましたので投稿がひとつ作られるかもしれません。作られました。
おわりに
時々発生する謎エラー
出現頻度はかなり下がりましたが、希にメインのMediaDBファイルが壊れます。ライブラリフォルダとの接続に失敗し、一度ならファイル再起動で問題なくなるのですが、何度も繰り返し「見つかりません」とエラーが出続ける症状に見舞われると厄介です。一度こうなったファイルは何をどうやっても直りません。棄てるしかなくなります。メインファイル MediaDB 自体は大したデータを持っていないので、棄ててバックアップと入れ替えても大きな問題はありませんが、何とも解せないです。
どこかのフィールドに不要なデータが残っている場合に発生しがちという目安は付いていて、ファイルクローズ時にあちこちクリアして回るようにはしているのですが、手強いです。グローバルフィールドの多用が問題なのかもしれませんが判りません。
実作編リメイク状況
この投稿はメディア管理のデータベースをコツコツ作るシリーズです。シリーズのインデックスはこちら。
以前、実作編という同じシリーズがあって、それを途中で辞めて最初から作り直しているのが本シリーズです。実作編には5つの記事がありましたが、まずはその内容に追いつくのが目的でした。
R11というこの投稿で旧実作編Ver.4の内容をすべてカバーできました。Ver.4の投稿はまだ残っていますが近いうちに処分する予定です。