FileMaker メディア管理の作り方R9、新展開を迎えます。データファイルを分離し、いくつかのテーブルを追加し、フィルターペインのUIを作ったりしています。
R9 の概要
フィルタの UI を新たに設けましたが、このバージョンの本質はそんなところになく、大きな変更点と新展開への準備です。
AppleScriptでmac専用
新展開は外部の機能をメインに使っていくことを指します。基本AppleScriptを使い、コマンドラインツールも使っていきます。追加機能的に使うのではなく、根幹に関わる部分で使います。これが意味することは、本シリーズの実作ファイルが完璧にMac専用となるということです。はい。
分離モデル
データテーブルを別ファイルに分けました。これをFileMakerの達人世界では「分離モデル」と言うそうです。分離モデルにすると、データとアプリケーション的な部分が別のファイルになるので、管理上有利になります。ただし作るのめっちゃ面倒。分離させるだけで手一杯でした。
ライブラリ方式
分離したので必要ファイルをライブラリフォルダ内にまとめて入れました。インポートしたメディアやサムネイルなども同じフォルダ内に作られます。つまりライブラリフォルダはデータのすべてをまとめたフォルダになります。そうなってくると、ライブラリフォルダを複数作って切り替えしたくなります。できるようにしました。
DBTools
別の独立したFileMakerファイルがありました。コードを管理し実行するCodeRunだとか、Exiftoolでゲットできるタグの網羅、拡張子の羅列などです。これらファイルをMediaDBでも使うべく、DBToolsフォルダ内に用意していたのですが、途中で気が変わり内部のテーブルとして組み込みました。
と、書いた尻からまた気が変わり、ライブラリフォルダの中に収めました。
フィルターのUI
見た目的な変化はフィルタのUIです。左ペインを作成し、フィルタ専用のコーナーとしました。
その他、コマンド+Aですべて選択、コマンド+シフト+Aですべて解除するショートカットを実現することができています。
使い方
ダウンロードしたzipファイルを解凍すると以下のようなフォルダ構成になっています。
メインファイルはMediaDB_R9.fmp12 で、Libraryフォルダ、その中にDBToolsフォルダがあります。
Library はデータのすべてが収まるライブラリの役割を持つフォルダです。
メインファイルである MediaDB R9 を開くと、これまでと同じように最初は空ですので何かインポートして使い始めてください。一見、前回R8とあまり変わりがないように見えます。
違いは、左側にフィルタのコーナーが登場しました。
ライブラリ管理
画面右上歯車アイコンの「設定」の中に「ライブラリ管理」があります。初期状態では「Library」だけがリストされ選ばれている状態です。
ここから新規ライブラリも作れますし、他のライブラリを選択できます。そんで、切り替えられます。
他のライブラリというのは、FInderで複製したり場所を変更したりフォルダ名を変更してもライブラリが作れますのでお好きに追加できることを指します。ライブラリフォルダの中身(ファイル構成やファイル名)は変更しないでください。
左ペインのフィルタポータル
これまではポップアップメニューでフィルタする仕組みでしたが、
左ペインを作成してフィルタ用スペースとしました。
フィルタできる分類のタイトルラベルが並んでいます。
タイトル部分のクリックで開閉できます。
フィルタの挙動
分類タイトルの下に値が並び、クリックすることでフィルタできますが、フィルタと言っても期待する動作にはいろいろあります。次の三つの挙動を詰め込みました。
単一のフィルタ
クリックした値のみでフィルタする挙動です。単なる検索とも言います。拡張子でjpgをクリックしたら全レコードから拡張子jpgが検索された状態となります。次に png をクリックしたらpngの検索結果に入れ替わります。
追加するモード
クリックした値の検索結果が追加されていく挙動です。「または」のor検索とも言います。拡張子でpngをクリックしたらpngが検索されます。次に拡張子jpgをクリックしたら、jpg検索の結果が追加されます。値をクリックして追加する度に結果が増えます。
絞り込むモード
クリックしたら絞り込む挙動です。「かつ」のand検索の結果とも言います。拡張子でpngをクリックしたらpngファイルが表示されます。次にjpgをクリックしたら、pngの対象レコードの中にjpg画像はないので結果は0、レコードが何も表示されなくなります。値をクリックして追加していく度に結果が減ります。
この三つの挙動を小さなスペース内で混在させるのが困難なので、上部に小さなボタンを配置し「または検索」「かつ検索」のどちらかを選ぶようにしました。値の横の小さなボタンでひっそり切り替わります。
モードを切り替えることについて、まだ迷いがあります。
例えばApertureでは、この場所はあくまでプロジェクトやアルバムを選択する場所で、決して絞り込みはしません。検索は別の場所で行います。
他の画像管理アプリではこの場所に項目がずらっと並び、絞り込んでいく形態のものがあります。
現状のMediaDBでは、そのどちらも同時に採用しようとしてモード切り替えボタンを用意しましたが、何だかすっきりしません。今後の課題です。
フィルタ項目のカスタム
今のところフィルタできる分類は、セッション、登録方法、拡張子、登録年月です。今後これは増えます。扱うデータや目的によってフィルタしたい項目、しなくていい項目があります。「この分類のフィルタはいらないな」と思ったら簡単なカスタマイズで画面から消すことも容易です。すいません「簡単」とは言いがたいですが、こうします。
フィルタペインから分類を消したり追加したりする方法
そもそもフィルタする分類とその値の正体は「値一覧」です。そして、フィルタペインに表示させるかどうかは名前で決まります。値一覧の名前をフィールドのフルネームにすることで、フィルタペインに表示させてるんです。
「mainData::拡張子」のように名前がフィールドフルネームになっているものがフィルタとして表示されます。ですので、消したい場合は、値一覧の名前をフルネームから別のものに変更します。
何かフィールドを新たに作った場合、そのフィールドで値一覧を作り、名前を「テーブル名::フィールド名」にすると、フィルタペインに現れます。
メタテーブルにもフィルタ機能を追加
ちょっと散漫かもしれないんですが、右側にメタデータの欄があります。ここ自体は前回R8から特に機能強化をしていません。
で、そのメタデータの値でレコードを検索できる仕組みをこの場所に追加しました。
このコーナーはメタデータを見るためにあるので、レコード検索の機能を紛れ込ませることはUI的に褒められたものではありませんが、それを行いたい局面もあるので試しに作ってみたのです。
このように、レコードをフィルタするという目的のUIが左や右に分散してしまい「ややこしい」と印象が残ることになってしまいました。小さな過ちを誤魔化すため人はさらに大きな過ちを行います。どういうフィルタしているのか把握し辛くなってしまったので、左上部にフィルタ状況を示す仕組みを追加しました。
この目的のために専用フィールドが追加され計算式は複雑になり、画面のすっきり感が毀損されました。悩ましい限りで、こういう細々とした機能を入れない方が良いという考えというか直感もあります。
「すべて選択/すべて解除」のショートカット
大きな変更したのでヘマも多く、セルフバグフィックスばかりやっていると次第に余計なことも追加したくなったりします。
以前「選択」機能を追加したのですが、
すべて選択、すべて解除をもっと簡単に行いたくて、でもボタンを配置しまくるのは厭なのでショートカットが理想だなと思ったりしました。最初はトリガのキーストロークを考えましたが、これも何かと鬱陶しいんですよね、それでカスタムメニューを作ることを思いつきました。
コマンドAですべて選択、コマンド+シフト+Aですべて選択解除となります。
仕組み編
改めまして仕組み編をあっさり流します。なぜあっさりかというと、ちゃんと説明し始めるとたいへんだからです。今後もし個別ネタで投稿することがあればリンクするようにします。
ライブラリ
先にも言ったように、いちびって分離モデル化してファイル構成がどうなったかというと、こうなりました。※ いちびる = 調子に乗る、カッコつける
Libraryフォルダは、フォルダ名を変えたり別の場所に複製しても使えます。ライブラリを切り替えられるようにしたので、「外部データソース管理」ではグローバル変数によるパスを設定しています。
メインファイルを起動したらすぐにスタートアップのスクリプトを開始し、mainData などパスをグローバル変数に収めてリレーションを開始します。
スクリプトやレイアウトにわずかでもリレーションの片鱗があるとファイル起動時にエラーが出ます。それを防ぐために細心の注意を払いますね。一切のリレーションと無関係な純粋ピュアな startup テーブルとレイアウトを作っています。
さて、ファイル動作中に「ライブラリ管理」からライブラリを切り替えることができます。
使用中なのに切り替えると挙動がおかしくなることは明白ですね。で、切り替えるとすぐさまメインファイルを再起動するようにしています。
メインファイルを再起動とは、いかなる魔法で実現できるのでしょうか。
はい。メインファイルを再起動させるために、スクリプトでAppleScriptとターミナルコマンドを使ってアクロバティックな処理をしております。
AppleScriptでターミナルをを呼び出し、メインファイルを2秒後に開けと命じておきます。
tell application "Terminal" activate delay .5 do script "sleep 2; open '$POSIX1' ; exit" end tell
こういうコードは今後は CodeRun を使用しますが、ここではグローバルフィールドに固定で入れています。CodeRun に依存しないことも大事です。
次のスクリプトステップで「ファイルを閉じる。己を」と進み、ファイルを閉じます。先ほどの命令はターミナルウインドウで実行中ですのでファイル終了の影響を受けません。命令に従って2秒後にメインファイルが再び開きます。
ターミナルウインドウを介することがキモで、これ、AppleScript単独でも、ターミナルを介さないdo shell script でも上手く動きませんでした。
DBTools
DBTools フォルダ以下に入っているのは、実用するレコードが入った各種ファイルです。多方面から参照するデータが納められており、本来は単体で起動して使用もできます。
このツール群のようなものをどう組み込むかちょっと悩んで、この投稿をアップしたときはメインファイルのテーブルに組み込みました。でもすぐさま気が変わり、ライブラリフォルダの中に納めました。
多方面から参照して使うツール群であることを放棄して、MediaDBでのみ使用するという役割に特化しました。
CodeRun
このブログ内で度々登場する CodeManager というファイルがあって、コマンドのメモや実行ランチャーとして使える自作ファイルです。その簡易版が CodeRun です。すでにこのテーブルのレコードを実践としてスクリプト内で使用しております。
単体で起動しても使えるやつですが、今回はメディア管理専用ツールとしてライブラリの奥底にしまい込んだので直接操作をしないようお願いします。というのも、この中のレコードを実際にコードとしてスクリプト内で使用しているからです。
単体での使用に興味がある方は、CodeManager をダウンロードしてみてください。詳細は以下のリンクから。
FileType
拡張子のデータベースです。アイコンの管理も兼ねます。ですので、サムネイルの仕組みを変更し、「サムネイルに未対応の拡張子なら FileTypeのアイコンを使う」こととしました。
後には、インポート時に「拡張子によるフィルタ」を実現するためにも使います。
このファイルは単体で使用されても誰も困りません。自分なりの拡張子データベースを作ることができます。
metaKeys
Keyというか、メタテーブルの項目名即ちタグ名を管理するデータベースです。現状、ExifToolでゲットできるタグがすでに網羅されています。メタデータをゲットしてメタテーブルにする際、例えば特定タグをフィールドに昇格させるためとか、エクスポートの際にメタデータを書き換えるためとか、可能性は秘めていますが今は何にも使っていません。後に使う予定ですが未定です。
以上、DBToolsでした。
filterItems テーブル
さて、画面左のフィルタ用ペインについてですが、これはポータルが置かれているだけです。
で、ポータルで表示するためのテーブル filterItems を作成しております。これは、値一覧をレコード化したテーブルです。
フィルタペインで「タイトルラベルのクリック開閉」を始め、フィルタするための工夫に満ちてます。ここで詳細の説明をし始めると長大なものになるので避けますが、「値のないkeyをひとつ作っておく」「グローバルフィールドで監視する」といったことを行っています。
この件について、より詳細な投稿があります。
カスタムメニュー
FileMaker歴が無駄に長いだけのド素人の雑魚である筆者は、未だかつてカスタムメニューを使ったことがありません。一度管理画面を眺めたことがありますがまったく意味が判らず見ていないことにしました。無駄話はともかく、カスタムメニューによって「すべて選択」がコマンド+A、「全て解除」がコマンド+シフト+Aというショートカットを実現できました。
なるほどショートカットを設定するためだけにカスタムメニューを使うというやり方があると気付きました。
カスタムメニューの作り方がようやく少しわかったので嬉しがって追加した機能でした。
ダウンロード
ダウンロードできます。お試しください。
FileMaker Pro v19 が必要です。完全にMac専用です。
update 2023.06.13 (ライブラリ管理とstartupを修正)
最新のバージョンは INDEX から確認してください。
データ分離化にチャレンジしてから来る日も来る日も修正作業していまして、だんだん飽きてきたので、まだちょっと不安もあるけど公開してしまいます。失敗箇所や不手際を見つけたらぜひ教えてください。