FileMaker Webアプリを実装するにあたり、FX.php, FileMaker API for PHPの使い方やパフォーマンス比較を紹介してきた。今回から徐々にではあるが、FMCakeMixの紹介をしていきたいと思う。FMCakeMixは今日も改良が続けられているオープンソースソフトウェア。まずは最近のバージョンで変化があった点を取りあげていこう。

FMCakeMixとは

FMCakeMixとはPHPフレームワーク「CakePHP」のDBOドライバのひとつ。おなじみFX.phpを使用して、FileMaker Server/FileMaker Web公開エンジンと通信をおこなう。DBOドライバとして動作するため、編集・削除などレコードIDが要求される一部の動作を除いて、バックエンドのデータベースを意識しないコーディングが可能となる。

過去に日本語環境下で利用する場合の注意点を「番外編: CakePHPでFileMakerを使う方法」としてまとめたので、こちらもあわせて参照されたい。 FMCakeMixはBeezwax(Alex Gibbons氏)を中心に開発・リリースがおこなわれており、最新のバージョンは6月17日(米国時間)にリリースされたもの。The MIT Licenseのもとで公開されているオープンソースソフトウェア。最近のバージョンで追加・変更されたおもな機能は次のとおり。(コミットログより一部を抜粋、日時はすべて米国時間)

データベースレベルでdefaultLayoutを指定できるように

defaultLayoutとはFileMakerにアクセスする際、処理の中心となるレイアウトのこと。これまでこのdefaultLayoutはモデル(/app/model/*.php)で指定していたが、これをデータベースレベル(/app/config/database.php)でも指定できるようになった。

モデルでのdefaultLayout指定例

class Book extends AppModel
{
    var $name = 'Book'; 
    var $useDbConfig = 'default';
    var $primaryKey = 'ID';

    // FMCakeMix specific attributes
    var $defualtLayout = 'web_books_general';
    var $fmDatabaseName = 'FMServer_Sample';

    // Optionally assign related models
    var $hasMany = array
    (
        'Comment' => array
        (
            'foreignKey' => '_fk_book_id'
        ),
        'History' => array
        (
            'foreignKey' => '_fk_book_id'
        )
    );

    // Optionally provide translations of related FileMaker table occurrences
    // that may be returned through FileMaker portals into Cake model names
    var $fmTOtranslations = array
    (
        'CommentsTO' => 'Comment'
    );

    // Optionally provide validation criteria for our model
    var $validate = array
    (
        'Title' => array
        (
            'rule' => 'notEmpty'
        ),
        'Author' => array
        (
            'rule' => 'notEmpty'
        )
    );
}

データベースでのdefaultLayout指定例

var $default = array
(
    'driver' => 'fmcakemix',
    'persistent' => false,
    'dataSourceType' => 'FMPro7',
    'scheme' => 'http',
    'port' => 80,
    'host' => '127.0.0.1',
    'login' => 'myUserName',
    'password' => 'myPassword',
    'database' => 'FMServer_Sample',
    'prefix' => '',
    'defualtLayout' => 'web_books_general';
);

データベースレベルでdefaultLayoutが指定されていない場合は、モデルで指定したdefaultLayoutが適用される。なお、いまのところレスポンスレイアウトの指定(responseLayout)には対応していない。レスポンスレイアウトはFileMaker Webアプリを高速化するにあたり必須といえるパラメータ。すぐに使用したい場合は、dbo_fmcakemix.phpのSetDBData()が使われている箇所を中心にカスタマイズする必要がある。

値一覧のサポート

値一覧を取得したいモデル(/app/model/*.php)に「var $returnValueLists = true;」の一文を加えることで、スキーマに値一覧情報が格納されるようになる。値一覧を使用したいコントローラ(/app/controller/*.php)でスキーマ情報を取得し、set()でビューに渡してやることで値一覧の中身を使うことが可能になる。モデル側でvar $returnValueLists = true;の一文を追加をしていないと、スキーマ情報に値一覧が格納されないので注意されたい。

OR検索のサポート

コントローラ(/app/controller/*.php)で検索をおこなう際に$conditionsに「or」という文字列を渡してやることで、OR検索になる。このOR検索はFX.phpのSetLogicalOR()を使用している。

FileMakerスクリプト実行のサポート

次の6種類のFileMakerスクリプト実行パラメータに対応した。

  • -script
  • -script.prefind
  • -script.presort
  • -script.param
  • -script.prefind.param
  • -script.presort.param

これらはFX.phpのPerformFMScript(), PerformFMScriptPrefind(), PerformFMScriptPresort()のように専用のメソッドを使用するのではなく、AddDBParam('-script', 'スクリプト名')のように$conditionsにそのまま渡して使用する。

進化の早いFMCakeMixだが、データベースを意識しないプログラミングができるようになるメリットは非常に大きい。コミットログと一緒につねに最新版をチェックし、ソースコードを読みながら実際にコーディングしてみることが習得の近道だ。