FileMakerメディア管理 実作編 Ver.3 日付の情報

Importテーブル

作業用テーブルとは何なのか

FileMakerのインポート機能に「既存のアイテムがあればスルー、既存になければ追加」というオプションが存在しない理不尽を解決するために作られた作業用テーブルです。

一旦すべてをインポートして、条件に合ったものだけ改めてメインにインポートするという、中間的な役割を与えられました。

作業用テーブルとメインテーブルには同じフィールドがありますが、フィールドの意味は全く異なります。

ここに日付が加わったことでさらにややこしくなった作業用テーブルの工程です。スクリプトを100回書いては消し、フィールドを作っては消し、七転八倒したあげくに、ふともたげます。

作業用テーブルって一体何?

さてみなさん、作業用テーブルを「FileMakerの足りない機能を補う仮のテーブル」とだけ認識していると見誤ります。

これはインポートのための準備を行うプリ・インポート作業現場です。

世にある立派な写真管理ソフト、ApertureやLightroomには「インポートモード」があります。インポートする前にブラウジングして写真を選択するモードですね。作業用テーブルとはまさにインポートモードそのものではありませんか?

目的も工程もやろうとしていることも、まさしく写真管理ソフトのインポートモードに他ならないのが作業用テーブルと気づきました。

気づいた以上、作業用テーブルを「Import」テーブルと改名します。すでにフィールドはすべて書き直していますから、作業用テーブルを廃してImportテーブルを新設したと言っても過言。

Importテーブルのインポートデザイン

これまで「ダミーの作業工程」としか思っていなかったものが突如「インポートモード」と認識が変わったことで、工程の目論見や機能デザイン、発想が変化しました。

改めまして、インポート時の挙動はこういうイメージになります。

1 まずインポートレイアウトに移動します。
2 目的のフォルダを指定し、参照か格納か、サブフォルダを含むかふくまないかを選択、これら条件に合致するコードをゲットして実行、レコード化します。
3 ここで最終的に読み込むアイテムを決定させてから、最終インポートを行います。

以下、もう少し具体的にいきます。

インポートレイアウト

フォルダを選択

最初にフォルダを選択します。

フォルダを選択

かつて「ディレクトリの取得」でしたが現在は「フォルダの取得」と名前が変わっているスクリプトステップを使用します。これはラベルが変わっただけで中身は変わっていないんですよね?

フォルダの取得とディレクトリの取得

フォルダなりディレクトリなりを選択させてパスを変数に格納するということをまず行います。

リストを取得してレコードを作成

Importテーブルには、サブフォルダをどうするか、参照か格納かどっちにするかというフィールドを新規に作成しています。これらのチョイスによって、CodeTempから持ってくるコードが変わります。

インポート OKボタン

コードを実行し、ファイルリストをゲットします。ゲットしたファイルリストをレコードとして作成します。パスと日付が入ったレコード群が出来上がりました。

次に絞り込みます。メインテーブルのレコードと重複があれば除外して、残ったパスを元に「更新のみ」インポートでオブジェクトなど他のデータをインポートします。

※ ここで註釈。「更新のみ」のインポート作業はとてもとても遅いです。遅すぎてビビったので、後に対策を講じました。

これでImportレイアウトには、選択したフォルダ内のアイテムがサムネイル付きで網羅されます。ここでImport画面らしいいくつかのサービス機能を追加しています。

インポートボタン

いよいよ「読み込むチェック」にチェックが入ったものだけを本番テーブルにインポートします。

インポートボタン

 

インポートモードであるという認識から、世の写真管理ソフトのインポートモードを真似てみようという発想になり、機能デザインが定まってきました。

 

 フォルダ更新

インポートと同じであると言い切っていいんですが、フォルダ更新の機能です。

読み込んでいるファイルの、元パスのフォルダですね、これをたまにチェックして、登録以降に変更されたり追加されたアイテムを見つけて更新または追加を行います。

インポートとほぼ同じ工程ですが、インポートじゃないんだからオブジェクトやサムネイルのゲットをしません。

更新があれば訊ねずに勝手に更新します。追加がある場合のみリストします。

更新レイアウト
追加があればリストする専用レイアウトを作ったが、追加候補が多いときは「インポート」へ誘導する

リスト上で個別に追加が行えます。ここでも「すべて追加」スクリプトを用意していますが、インポート画面と異なり、一個ずつ挿入するループです。リストが多い場合は時間がかかります。
リストの項目が多すぎる場合は「インポート」へ誘導します。

インポートテーブルはまだ途上です。除外する拡張子のあり方や、速度にも問題を抱えています。

※註 速度に問題大ありでした。対処します。以下に追記。

バージョン3.5

一旦は上手くいったように見えた本稿のファイルおよび記事内容ですが、速度がめちゃ遅い場合があります。その原因と対処をやっていて、またまた大改装となりました。

遅い原因

手順をおさらいしつつ、遅い処理を特定します。

1 シェルスクリプトでパスと日付のリストをゲット … 速い

2 リストをレコードに分割 … そこそこ

3 フィルターしてインポートすべきレコードを特定 … 速い

4 残ったレコードに対してインポート[更新]を行う … くっそ遅い

5 最終的にインポートするレコードをメインテーブルにインポート … まあまあ

はい。はっきりしました。FileMakerの機能「インポート > フォルダ[パス照合]」の工程がべらぼうに遅いんです。

特にインポートするのがムービーファイルだったりしたら「冬眠しとんのか」というほど遅くて、まったく使い物になりません。

試しに、照合せずシンプルに「追加」でインポートすると、常識的な速度でインポートできました。

「照合」「更新」これがアウトでした。でもこの条件をなくしたら計画が成り立ちません。どうしましょう。こうしましょう。

もう一個インポートテーブルを追加

もう一個インポート用テーブル「ImportFM」を作ります。これは、FileMakerのインポート機能で照合なし追加のみのシンプルインポートを行います。
・・・そうすね、かつて作業用テーブルでやっていたことを復活させました💦

パスと日付がベースとなる Import テーブルと、何も考えずインポートする ImportFM テーブルをリレーションして、それを照合代わりにします。

インポート時に照合や更新を行うとクソ遅いが、無条件に追加したあとで照合して絞り込むと処理が速いんです。

この仕組みは上手く行きましたが、最終的にメインテーブルへインポートするテーブルを Import から ImportFM に変更することを余儀なくされました。そうしないと、オブジェクトの処理でまたまた速度が遅くなるからです。

処理はやや複雑化しました。importテーブルにパスと日付のリストを作り、importFMに全項目無条件インポートを行ってリレーションによるフィルターを経てからいらないレコードを削除しまくって残ったレコードをimportFMからメインテーブルにインポートします。

最初からFMレコードをメインに据えても良かったかと思いましたが、Importを主とするからこそフィルターが楽にできるということにも気づいて、あまり深く考えていないから正解がどっちかわかりません。

ここをしっかり考えたらもうちょいスマートに設定できるかもしれません。いつかMacOSXみたいに「全部0から作り直す」と決意したときにやり直すかもしれません。

 

FileMaker Pro

Download FM_MediaDB_Ver3_5.zip

作って育てる実作ファイル、ダウンロードご自由に

Penguin icon Ver.3は日付のゲットとそれに関連したちゃぶ台返しで大変なことになりましたが、その予測をしていなかった頃、ちゃっちゃと日付を終わらせた後はメタデータに取り掛かるつもりでした。とてもそんなのに取り掛かる余裕はありませんが、片鱗がすでにあります。そういうのも含めて、V3のその他について、次ページでさらりと触れておきます。

FMでメディア管理 実作編 Ver.3 日付の情報
次のページ: その他