FileMaker 17の新機能のうち、デプロイの関連で今後の開発に大きな影響がありそうなのが、Data Migration Toolです。FDSメンバ限定での提供ですが、分離モデルが必ずしもベストプラクティスではない、というふうになっていくのかどうか、興味があるところです。
今回はITSolutionsのColin Keefeさんの記事を紹介します。
FileMaker 17: Data Migration Tool – Part One
(元記事はこちら)
Colin Keefe
2018/5/15
FileMaker 17でリリースされたわくわくさせる新機能の1つが、 Command Line Data Migration Toolです。少なくとも私はわくわくしています。というのも、こういう技術ネタを見るとおたくモードに入ってしまうので。
まず最初に、データ移行が必要となる一般的な利用シナリオを2つあげます。
- デプロイ(本番移行):カスタムAppを複数回に分けてリリースする。そのときに、前の版からデータを取り出し、新しい版に入れ込む。
- 復元:ファイルが壊れた場合に、クリーンなバックアップクローンに戻す。
FileMaker 17より前は、データ移行の手法は通常、スクリプトによるインポートで行われていましたが、時間がかかる上に機能に制限がありました。新しいData Migration Tool (FileMaker Developer Subscriptionのメンバが利用可能) は、上記のデプロイの場面で驚くほど役立ちます。また、このツールは破損したデータを魔法のようにきれいにしてくれるわけではありませんが、復元の場面でのデータ修復処理をスピードアップするのに役立ちます。
Data Migration Toolは、データを取得するためのソースファイルと一度も開いていないクローンファイルを使用して、クローンから新しいファイルを作成し、ソースファイルから新しいファイル(デフォルトでは <元のファイル名> migrated.fmp12)にデータ(アカウントと値一覧を含むことも可)をコピーします。
DMT(と勝手に略すことにします)は、従来のマイグレーション戦略に関わる課題を次のように解決しようとします。つまり、FileMakerのアプリケーション層をバイパスし、データ(およびその他の関連要素)を1つのファイルから別のファイルに、テーブル/フィールドを照合しながら直接コピーします。この照合の基準については後述します。
利点
DMTは高速
スクリプトによるマイグレーションは、時間がかかりレコードをインポートスクリプトステップに依存します。大規模なデータセットの場合、データのインポートには非常に時間がかかることがあります。大きなレコードセットとテーブルの列数の多さは、両方ともインポートを遅くする可能性があります。大きなテーブルが多数あるソリューションでは、マイグレーションに何時間もかかる場合もあります。
上記のようなデプロイや復元の場面では、通常、作業のための時間枠が制限されます。
デプロイは通常、数時間で行われます。16時間より長くかかる場合(これは十分にありえます)は、週末に実施する必要があります。そして週末の作業者はデータ移行中にファイルにアクセスできません。この時間的制約によって、デプロイが失敗したときに復元する時間も少なくなります。マイグレーションを再実行する時間はありません。
DMTはアカウントとパスワードをコピーする
スクリプトによるマイグレーションでは、あるファイルから別のファイルにアカウントを移動することはできません。実際、古いファイルから最新ファイルに移行するとき、FileMakerのスクリプトではFileMakerのユーザーアカウントをまったくコピーできません。FileMaker 17より前のバージョンでこの問題を解決するためには、通常ユーザテーブルを使用します。すべてのユーザアカウントに対応するレコードを持ち、レコードにはアカウント名が含まれています(ただし、セキュリティ上の理由からパスワードは含みません)。
データをインポートした後、新しいファイルでアカウントを再作成できますが、その場合はデフォルトのパスワードを設定することになります。このプロセスは面倒でエラーが発生しやすく、ユーザには混乱を招くことになります。なぜなら、パスワードを再変更する必要があるからです。他の方法もありますが、それらはすべて何らかの欠点があります。
DMTにはFileMakerアカウントをあるファイルから別のファイルにコピーするオプションがあり、正しく使用するとこの問題を完全に解決できます。ユーザは、以前に使用したのと同じ認証で新しいソリューションにログインすることができます。「最初のログイン時にパスワードを変更する」などの強制的なしくみはありません。
DMTは値一覧をコピーする
スクリプトによる移行では、あるファイルから別のファイルに値一覧をコピーすることはできません。DMTには、カスタム値を使用した値一覧をあるファイルから別のファイルにコピーするオプションがあります。これは、カスタム値を使用した値一覧が開発者によって管理されていない場合、つまりエンドユーザによって編集されている場合に便利です。
Data Migration Toolの使い方
Data Migration Toolはコマンドラインインターフェイス(CLI)ツールです。そのため、シェルウィンドウで引数を指定してコマンドを入力することで、ターミナル(Macの場合)またはPowerShell (Windowsの場合)で実行します。FMDataMigrationという名前のファイルが、指定されたフォルダにあり、それをシェルから呼び出します。
Macではファイルは以下のように表示されます。
Finderでファイルをダブルクリックすると、ターミナルのウィンドウが開き、図のようにアプリケーションとその使用方法を説明するテキストがウィンドウに表示されます。
Windowsマシンでは、PowerShellを実行し、 (ファイルの場所)\ FMDataMigration と入力すると、Macの場合と同じテキストが画面に表示されます。
これを一つずつ見てみましょう。
Usage: FMDataMigration -src_path <path> -clone_path <path> [<other options>]
FMDataMigrationを呼び出すときは、最低でも2つの引数を指定する必要があります。
-src_path
:データを取り出すファイルのパス
-clone_path
:データをコピーする先のクローンファイルのパス。このファイルは未開封でなければなりません。DMTはこれをチェックし、無効な(開かれた)クローンであった場合には実行を拒否します。
<other options>
(その他のオプション)
引数 | 必須か | 説明 |
Source File | ||
-src_path | 必須 | ソーフファイルのパス。ファイル名を含む |
-src_account | 任意 | これを指定しない場合、DMTは”Admin”と判断する |
-src_pwd | 任意 | これを指定しない場合、DMTはブランクと判断する |
-src_key | 任意 | ファイルが暗号化されている場合、ここで暗号化鍵を指定する |
Destination File | ||
-clone_path | 必須 | 開いていないクローンファイルのパス。ファイル名を含む |
-clone_account | 任意 | これを指定しない場合、DMTは”Admin”と判断する |
-clone_pwd | 任意 | これを指定しない場合、DMTは”Admin”と判断する |
-clone_key | 任意 | ファイルが暗号化されている場合、ここで暗号化鍵を指定する |
Options | ||
-target_path | 任意 | デフォルトでは新規ファイルのパスはソースファイルと同じでファイル名の最後に” migrated”がつく。違うファイル名や場所で保存したい場合はここに指定する |
-force | 任意 | デフォルトではDMTは既存のファイルを上書きしない。上書きしたい場合にこのオプションを指定する |
-ignore_valuelists | 任意 | デフォルトではDMTはソースファイルの値一覧をコピーする。クローンの値一覧をそのままにしたい場合にこのオプションを指定する |
-ignore_accounts | 任意 | デフォルトではDMTはソースファイルのアカウントを書き込む。クローンのアカウントをそのままにしたい場合にこのオプションを指定する |
-v | 任意 | (Verbose Mode) Verbose Modeが指定されると、DMTは新規ファイルを作成するときに、ターミナルに処理の詳細情報をステップごとに出力する。これはこのツールの学習のために役立つ情報となる |
-q | 任意 | (Quiet Mode) Quiet Modeが指定されると、DMTは出力をターミナルに表示しない |
試してみよう!
ここからの説明では、Macのターミナルを使用します。
ステップ1
ZIPファイルをダウンロード*し、デスクトップに解凍します。内容は以下のとおりです。
- Contacts.fmp12は、いくつかのレコードがあらかじめ入っているFileMaker17スターターテンプレート(連絡先)です。
- Contacts Clone.fmp12は、Contacts.fmp12ファイルの未開封のクローンです。
- FMDataMigrationはData Migration ToolのUnix実行ファイルで、これからコマンドを送信する対象です。
- Usage Syntaxにはコピーして使える(パスの変更が必要)構文が入っていてすぐに試すことができます。
ステップ2
ターミナルを検索して起動します。DockからLaunchpadを起動して検索すると、簡単に見つけることができます。
起動すると、次のようなターミナルウィンドウが表示されます。
ステップ3
自分のUserフォルダを指すようにパスを修正して(あなたの名前がColin Keefeではないと仮定して)、ターミナルに次の行を貼り付けます。
'/Users/colinkeefe/Desktop/DMT Demo/FMDataMigrationTool/FMDataMigration' -src_path '/Users/colinkeefe/Desktop/DMT Demo/Contacts.fmp12' -clone_path '/Users/colinkeefe/Desktop/DMT Demo/Contacts Clone.fmp12' -mode -v
Enterキーを押す前の端末ウィンドウは以下のようになります。
ステップ4
Enterを押します。
“-v” (Verbose Mode)を使用したため、端末ウィンドウに次の出力が表示されます。
大量の文字が出力されます。この中身については後ほど説明します。その前に、実際に何が起こったかを見てみましょう。デスクトップのDMT Demoフォルダに戻ります。
Contacts migrated.fmp12
という新しいファイルができています。
FileMaker Pro 17で開き、内容を確認してみます。
これで終了です!
操作手順の概要は以上です。この具体例では注意すべき点がいくつかあります。
- 使用した2つのファイルは完全に同一のもので、ロールバック/リストア型のシナリオにあたります。しかしDMTは、似ているが同一ではないファイル間でのデータ移行も可能です。つまりマイグレーション型のシナリオにも対応します。これについてはパート2以降で説明します。
- オブジェクトフィールドのデータもコピーされています! これってすごくないですか?
追加の練習
操作の概要が理解できたところで、いくつかの実験をしてみましょう。以下について試してみてください。
- カスタム値を使用した値一覧をsource fileに追加し、DMTを実行する
- source fileにアカウントを追加し、DMTを実行する
- source fileまたはdestination fileを暗号化し、DMTを実行する
- いろいろなsource fileとdestination fileをDMTで指定する
- 同じソリューションファイルのV1とV2
- 全く異なる2つのソリューションだがテーブル名は同じ
この記事は役に立ちましたか? もしそうならパート2: Data Migrationヘルパーファイルを作成するを参照してください。
この記事で、FileMaker 17の新しいData Migration Toolについて価値のある情報を提供できたと願っています。データの移行に関する技術支援を希望される場合、またはFileMaker 17へのアップグレードについて相談したい場合は、今すぐお問い合わせください。
* FileMaker data migration toolは、FileMaker Developer Subscriptionのメンバのみ利用することができます。このシリーズのデモファイルを試すには、FDSにメンバ登録してコマンドラインツールをダウンロードする必要があります。登録はこちらから!