FileMaker Webアプリを実装するにあたり、FX.php, FileMaker API for PHPの使い方やパフォーマンス比較を紹介してきた。今回より、FMCakeMixの使ったFileMaker Webアプリの開発やソースコードリーディングを取りあげていこう。まずは環境構築~チュートリアル編から。

Hello, FMCakeMix! チュートリアル

FMCakeMixのUser Guide.pdfを参考に、CakePHP x FileMakerでWebアプリの作成方法を紹介する。紹介するのは、CakePHPのPaginationという機能を使った一覧画面だ。今回はファイルのデプロイ、データベースの準備、データベース接続設定、モデルの定義までを紹介する。

まずは必要なファイルをすべてダウンロードし、特定のディレクトリに展開する。動作に必要なライブラリ、PHPファイルは次のとおり。

  • FX.php
  • CakePHP
  • FMCakeMix (dbo_fmcakemix.php)
  • (必要に応じて) FX_patched091010.zip

まずはこれらのファイルをWebサーバに展開する。ファイルのダウンロード先や展開の手順については「番外編: CakePHPでFileMakerを使う方法」を参照されたい。

ファイルの展開が完了したら、続いてデータベースファイルを公開する。FX.phpのパッケージを解凍して生成されるDatabases/Book_list.fp7を、FileMaker Serverのデータベースフォルダに配置する。配置後、FileMaker Server Admin Consoleを使ってファイル公開を実施。

FileMaker Server Admin ConsoleからBook_Listを公開

ターミナルからfmsadmin open Book_ListとしてもOK。ターミナルからのFileMaker Server操作に慣れておくとメンテナンス時になにかと役にたつので覚えておこう

CakePHPの規約に従うよう、Book_Listを公開後、FileMakerファイルを開いてテーブルに「id」フィールドを追加しておく。Book_ListとDetail_Viewの両レイアウトに「id」フィールドを配置し、全置換を使ってレコードID(シリアル値)を入力する。

Book_Listテーブルに「id」フィールドを追加

Book_ListとDetail_Viewの両レイアウトに「id」フィールドを配置、全置換でレコードID(シリアル値)を入力

必要なPHP・データベースファイルの展開が完了した。それではここから、FMCakeMixのUser Guide.pdfを参考に、実際に一覧画面を作成してみよう。

データベース設定を変更

User Guide.pdf P.4 - Define Your Database Connectionより。データベースに接続するための設定を、app/config/database.phpに記述する。設定項目は次のとおり。

  • driver: 使用するDBOドライバを定義。FMCakeMixを使用するので、"fmcakemix"と指定
  • persistent: 持続的接続をするかどうかを定義。"false"を指定
  • dataSourceType: FMCakeMix(FX.php)用の設定値。FileMakerファイル形式を定義。"FMPro7"と指定
  • scheme: データベースに接続するためのスキーマを定義。"http"と指定
  • port: データベースに接続するためのポート番号を定義。"80"と指定
  • host: データベースサーバのホスト名またはIPアドレスを定義。"127.0.0.1"と指定
  • login: データベースに接続するためのアカウントユーザ名を定義。Web公開からFileMakerファイルにアクセスできるユーザIDを使用する。"admin"と指定
  • password: データベースに接続するためのアカウントパスワードを定義。""と指定(空欄)
  • database: データベース名(FileMakerファイル名)を定義。"Book_List"と指定
  • prefix: すべてのテーブルの頭に付ける接頭辞(prefix)を定義。""と指定(空欄)

データベースコンフィグ記述例

var $default = array
(
    'driver' => 'fmcakemix',
    'persistent' => false,
    'dataSourceType' => 'FMPro7',
    'scheme' => 'http',
    'port' => 80,
    'host' => '127.0.0.1',
    'login' => 'admin',
    'password' => '',
    'database' => 'Book_List',
    'prefix' => '',
);

モデルの定義

User Guide.pdf P.4~5 - Define Your Modelより。データベースのモデルを定義する。CakePHPのモデルでサポートするリレーションタイプは次の4種類。

  • hasOne
  • hasMany
  • belongsTo
  • hasAndBelongsToMany

FMCakeMixはこのうち"hasMany"と"belongTo"の2種類に対応している。今回使用するサンプルのBook_Listは1テーブルなので、とくにリレーションの設定はおこなわない。

このほかの設定項目については次のとおり。

  • name: PHP4ユーザ互換性用。モデル名と同じ値を指定
  • useDBConfig: データベース設定ファイル内の、どのパラメータを指定するかを定義
  • primaryKey: 主キーが「id」ではない場合はここで定義。さきほど「id」フィールドを作成しているため、今回は使用しない
  • defaultLayout: FMCakeMix(FX.php)用の設定値。デフォルトでアクセスするFileMakerレイアウトを定義
  • fmDatabaseName: FMCakeMix(FX.php)用の設定値。FileMakerファイル名を定義

モデル記述例

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

    // FMCakeMix specific attributes
    var $defualtLayout = 'Book_List';
    var $fmDatabaseName = 'Book_List';
}

CakePHPをはじめて触る方はマニュアルを熟読しておこう。CakePHPは設定より規約(convention over configuration)という考え方をもとに作成されている。既存のFileMakerデータベースをFMCakeMixでWeb化する前に、CakePHPの基本原則に目を通しておきたいところだ。