FileMaker Server 16 (以下、FMS16)ではPDF出力をサポートするようになりました。FileMaker Pro はもともと帳票/レポートを簡単に作成できるツールして利用されてきましたが、サーバサイドでPDFが作成できるようになり、面倒なWeb帳票の設計・実装が実に簡単、且つ短時間のうちに行えるようになりました。 データベースは FileMaker でも SQL/XMLデータベースでもOKです。 本稿では MySQL の1500万件のテーブルからデータを抽出し、遅延無くPDFを出力する方法の概要を記します。
開発・運用環境
FileMaker Pro (Advanced) 16 ― 帳票作成ツール*1
FileMaker Server 16/IIS/PHP ― サーバ*2
*1 帳票を作り、簡単なスクリプトを書くだけであればFileMaker Pro 16(¥4万前後)で事足りますが、複雑なスクリプトを書くには開発用(デバッガ付)の FileMaker Pro Advanced (¥7万前後)が必要です。
*2 FileMaker Server 16 はFM社直売で¥99,000 (税抜)です。
FileMaker Server 16 (の カスタムWeb公開 =CWP)の理論上の最大接続数は 2,000、検証接続数は500 ですので(詳細はこちら)、¥20万弱で本格的な帳票開発・運用環境が構築できる可能性があります。
FileMaker では API for PHP、FX.php、XML、ODBC を介して Webプログラミングを行うのが通常ですが、昨今巷で REST なる言葉を聞くようになりました。 そこで今回は REST を使用した FileMaker DB アクセスにトライしてみました。
開発環境は以下のとおりです。
Slim フレームワークを使った REST 構成で FileMaker Server にアクセス
ご覧のように、Microsoft IIS Web サーバに FileMaker Server 15 と PHP をインストールしたうえで、 Slim フレームワークをインストールしています。
REST についてモヤモヤっとしがちなところ
REST (REpresentational State Transfer) とは、サーバ上の情報(リソース)に対し、一意の URI を提供するためのアーキテクチャ(仕組み)です。
この 一意の URI と、Web クライアントから渡ってきた HTTP メソッドの組み合わせにより、リソースを操作します。
GET メソッド --- Amazon でたとえば PlayStation 4 Pro という商品の情報を得るためのGET リクエストは、https://www.amazon.co.jp/dp/B01LRHPUZ4/ です。
これは固有の URI として一般公開されているため、Web ユーザがこの URI に何度アクセスしても、このリンクが存在するかぎりは同じ商品にたどりつくことを意味します。よって、この処理は idempotent (冪等性がある)となります。
POST メソッド --- Amazon の例でたとえると、出品者が Amazon に商品情報を追加したいときの URI は専用のものを使いますが、その URI だけでは、追加された商品(リソース)にたどりつくことができません。
このため、この URI そのものはリソースの一意性を保障できないため、not idempotent (冪等性がない)となります。
PUT メソッド --- 特定のリソースを更新しますので、この URI は idempotent (冪等性がある)となります。
FileMaker で カスタムWeb を構築する場合、どの API が一番高速なのか、と疑問を持たれてきた開発者の方も多いかと思いますが、小社もその一員です><。「FM社がバンドルしてるんだから FileMaker API for PHP なら、まぁ、間違いないだろう」位のノリでそれを採用してしまったりとか。FileMaker API for PHP(以下、FM API for PHP) や FX.php なら、ネット上の情報量も多いですし。
そんな折、FM API for PHP を使用してWeb システムを構築していたわけですが、JMeter で想定される最大負荷をかけたところ、Web サーバがダウンしてしまうことがありました。 幸い、実運用ではそのような状況には今のところ陥っていないのですが、「これは一度、4つの API で比較テストしておこう」ということになり、今回、その運びとなりました。 また、同テストを FileMaker Server 12 と 15 でも実施しました。以下にその方法と結果を公開いたします。 1ユーザによる郵便番号データの検索と表示という限られたテストなのですが、多少なりとも参考になればウレシイかも、です。
1. テスト方法
全国の郵便番号データを入れた FileMaker データベース(今回は弊社製品『FMEasy在庫』の郵便番号テーブル)を用意し、FileMaker Server 12 と 先月リリースされたばかりの FileMaker Server 15 でそれぞれ公開。
このデータベースにアクセスして郵便データを検索するための簡単な php ページを作成しました。
たとえば、FileMaker API for PHP で「北海道」を含む郵便データを検索するときのイメージはこのようになります。
検索実行中!
そして下図が実行結果となります。
FileMaker API for PHP による「北海道」郵便データ検索結果は 8242 件(データはかなり古いので、最新のデータでは違う結果が返ると思います)で、このレコードを取得してくるのに 2.9935 秒かかったことがわかります。
2. テスト結果
FileMaker Server 12 と 15 を使用し、それぞれのサーバ上で XML、FileMaker API for PHP、fx.php、POD(ODBC) の 4 種類の API を使って 10 回ずつ「北海道」の検索を実施しました。
その測定結果は次の通りとなりました。
FileMaker Server 12 と 15 のバージョン間の比較では、FileMaker Server 15 のパフォーマンスが約30% 良い結果となりました。
当社の経験上、FileMaker Pro 5.5/6(以下、FM5.5/6) は最新の Windows OS ― Windows
7/8/8.1/10で、FileMaker Server 5.5(以下、FMS5.5) は Windows Server
2008/2008R2/2012/2012R2 で動作します。また、FMP5.5/6 のマルチユーザライセンスを
Windows Server のリモートデスクトップサーバ上に配置すれば、遠隔地からでも
FMS5.5にアクセスして快適にFMを使用できます。
当社の取引先では、2台の Widnows Server 2008 を2008年に導入し、1台に FMS5.5
を、もう1台(Remote Desktop サービスライセンス×10ユーザ付)に
FMP5.5(マルチユーザライセンス)
をインストール。2016年5月現在、20ユーザがこのシステムを利用しています。
ちなみに、FM5.5のリリースが2001年。最終のアップデートがリリースされてから約15年が経過した2016年現在でも最新のOS上で普通に動作する
FileMaker 5.5/6 は驚異的ですらあります。
(追記:2020年3月現在稼働中)
注:
2019年3月現在、当方及び取引先の Windows 10 機で FMP 5.5/6
が起動・動作することを確認しています。
3. 仮想ハードディスク1 (VHD1) を複製して仮想ハードディスク2(VHD2=スタンバイサーバー用VHD)を作成します。 Windows Server OS と FileMaker Server 14 がインストールされた状態の仮想ハードディスクを複製するため、インストール作業の二度手間を大幅に省くことができます。
上述のように上記のテストは海外のサーバを使用して行っていることにご注意ください。上記2の現象に関し、WinMTR の結果をホスティング会社に送付し問い合せたところ、「some severe packet loss and latency from you location in Japan to our location」とのことでした。 ただ、サークルアイコン出っ放し状態の時でも、FileMaker Pro によりサーバにアクセスして < あるい > をクリックすると、速度は遅いものの正常に動作すること、社内サーバを使用してもサーバへの負荷を高めるとサークルアイコン出っぱなし現象が発生することからみて、WebDirect にはまだ問題があると思います。 尚、小社のLAN内のWebDirect環境では、ブラウザの > または < ボタンを連続押ししても、上記の問題は発生していません。
ちなみに、当方でも同じ現象に遭遇したことがあります。
ホスティング会社にこの件について問い合わせたところ、FileMaker Server 13 から発生している既知の現象で、この現象が発生した場合は、FileMaker Server を再起動しないとどうにもならないとのことでした。
また、この現象はいまのところ FileMaker Server 14 でも発生しているので、今後のアップデートが望まれるところです。 早く出さんかいヽ(`Д´)ノ