FileMaker Proで管理されているデータは、簡単にCSVとしてエクスポートすることが可能だ。ファイル>レコードのエクスポートからおこなうか、FileMakerスクリプトステップ「レコードのエクスポート」からおこなう。これらの操作は、残念ながらWeb公開には対応していない。今回はWebアプリケーションからFileMakerのデータをCSVを出力する方法を紹介しよう。

FileMakerのデータをWeb経由でCSV出力

FileMaker Proで管理されているデータは、レコードのエクスポートメニューかスクリプトステップから簡単におこなうことができる。エクスポートのファイル形式を選択し、エクスポートしたいテーブルとフィールドを選択してボタンをクリックするだけ。便利な機能のひとつだ。

FileMaker Proではわずかな手順で簡単にレコードをエクスポートすることが可能。エクスポートしたいテーブルとフィールドを選択してボタンをクリックするだけで、CSV出力が完了する

便利な機能だが、このスクリプトステップはWeb公開に対応していない

残念ながらこの「レコードのエクスポート」機能はWeb公開に対応していない。WebアプリケーションからFileMakerのデータをCSV出力するには、若干工夫が必要となる。FileMakerを使ったWebアプリケーションからCSV出力をおこなうための実装を3点紹介しよう。

  1. エクスポートしたいフィールドをレイアウトに配置。PHPでそのレイアウトにアクセスし、for/foreachなどのループ文で出力
  2. エクスポートしたいCSVを計算フィールドで定義し、レイアウトに配置。PHPでそのレイアウトにアクセスし、for/foreachなどのループ文で出力
  3. FileMaker Serverのスケジュールで「レコードのエクスポート」スクリプトステップがふくまれたスクリプトを実行。Webアプリ上からそのファイルを参照する

1. エクスポートしたいフィールドをレイアウトに配置。PHPでそのレイアウトにアクセスし、for/foreachなどのループ文で出力

エクスポートしたいフィールドをFileMakerのレイアウトにすべて配置する。PHP側でそのレイアウトに対して検索を実行し、結果をfor/foreachなどのループ文でカンマで区切り出力する。

レイアウトにエクスポートしたいフィールドを配置しておく。PHPでそのレイアウトに対して検索をおこない、対象レコードをループ文で出力。レイアウトに配置するフィールド数が多ければ多いほどパフォーマンス低下を招くのがネック

  • メリット: エクスポートする項目をWebアプリ側で制御することが可能。PHPの文字列関数によるテキスト操作が容易
  • デメリット: エクスポートするフィールド数やレコード数が多いほど、パフォーマンスが低下する

2. エクスポートしたいCSVを計算フィールドで定義し、レイアウトに配置。PHPでそのレイアウトにアクセスし、for/foreachなどのループ文で出力

(1)がPHPでCSVの構成をおこなったのに対して、こちらはFileMaker側でCSVエクスポート項目の構成をおこなうパターン。テキストタイプの計算フィールドを作成し、エクスポートしたいフィールドをカンマ区切りで持たせる。あとは(1)と同じようにこのフィールドをレイアウトに配置し、PHPでループ出力。エクスポート項目をFileMakerのデータベース定義上でおこなえる分、仕様修正~実装完了までの時間が短くて済むメリットがある。

テキストタイプの計算フィールドを作成し、CSVエクスポート項目を定義する。FileMaker Proで簡単に修正ができ、メンテナンス性にも優れる

PHP側ではこの計算フィールドだけをエクスポートすれば良い

  • メリット: 実装が簡単。エクスポートするフィールドを計算フィールド上で定義・制御できる
  • デメリット: エクスポートするレコード数が多いほど、パフォーマンスが低下する。計算フィールドを使用するため、(1)より若干動作が遅くなる可能性もある

3. FileMaker Serverのスケジュールで「レコードのエクスポート」スクリプトステップがふくまれたスクリプトを実行。Webアプリ上からそのファイルを参照する

(1)および(2)はWeb公開エンジンの仕組み上、1,000件や10,000件以上のレコードをCSV化したい場合にエクスポートまでに大変な処理時間がかかってしまう。この際のFileMaker Server/Web公開エンジンにかかる負荷も大きい。大量のフィールドや大量のレコードをエクスポートしたい場合は、やや面倒だが「レコードのエクスポート」をおこなうスクリプトを作成し、FileMaker Serverのスケジュールから実行させる方法が良いだろう。FileMaker組み込みの機能を利用してCSVを出力する分、(1)や(2)の実装方法とは比較にならないほど高速な動作が期待できる。FileMaker ServerとWebサーバが分離している環境では実装に時間がかかるのが難点だ。

「サーバー」互換性を持つスクリプトステップで、CSVエクスポートをおこなうスクリプトを作成する。当然ながら出力したCSVは、Webサーバが参照できる場所に配置する必要がある

  • メリット: 大量のレコードをエクスポートする場合でも高速に動作する
  • デメリット: FileMaker ServerとWebサーバが分離している環境では、CSVの出力先や参照方法、リバースプロキシなどを検討する必要あり。エラー処理を考えると必要な画面やテーブル数も多くなり、実装に時間がかかる

今回取りあげたこの3つの実装方法は、どれにもメリットデメリットが存在する。使用目的に応じて使い分けができるようになっておきたいところだ。