preload
1月 19

「CakePHP で複合キーは使えない?」というエントリを書いたところ、sdozonoさんという方からコメントをいただいた。

どうしても id フィールドは作りたくない、という場合には、http://qcodo.com がよさそうです。”Qcodo even allows tables to have multiple-column primary keys. However, only limited functionality will be generated for tables that have multiple primary keys. “とあります。

早速、試してみたので、簡単なチュートリアルも交えて試用報告。

qcodo は PHP5 以上を対象としたフレームワーク。PHP4 でやってから悩まないように(僕は、よくハマる。TRAXのときもハマッた)。日本語情報は少ないし、本家チュートリアルの対象バージョンは若干古め。ちょっといじってみた感じ、web に転がっている情報と最新の配布ファイルとでは、ディレクトリ構成や API 周りにいろいろギャップがあるようだ。最新バージョンを試すならアーカイブ中の README や本家チュートリアルからリンクされている example 集の情報を読むのが吉。

今回試したのは 0.3.11。配布ファイル中の /_README.txt を参考に、wwwroot/ 以下を htdocs/qcodo として配置。cli ツールを使う場合は、_devtools_cli を任意の場所に設置する。

続いて、htdocs/qcodo/includes/configuration.inc.php を環境にあわせて編集する。DOCROOT 周り設定と、DB 設定だけで、すぐ動かせる。DOCROOT は apache の DocumentRoot(つまり htdocs まで)、SUBDIRECTORY は DOCROOT から見た qcodo ルート位置を書く。DB設定はアダプタ名と、DBホスト、接続ユーザ名、パスワードとかとか書いてやればよい。ウチの場合、両箇所の該当部分はこんなかんじ。

終わったら、htdocs/qcodo/_devtools/codegen.php をブラウザからアクセスしてやると、接続先DBのスキーマからデータモデルクラスやらフォームやらビューをぼこぼこ自動生成してくれる。一個一個、対話式でbakeしなくて良いのはCakePHPよりも楽ちんだ。できあがったフォームは htdocs/qcodo/form_drafts やら htdocs/qcodo/panel_drafts をアクセスすれば確認できる。プルダウン選択->テーブルの読み込みや、レコード新規作成/編集のUIは AJAX していて、これだけでもなかなか使いやすい。

qcodoの面白いところは、CakePHPで悩んだ複合キーの課題も含め、テーブル間の関連情報を、全て外部XML設定ファイルに書けるという点にある。codegen.php でコード生成する際、既存スキーマの利用はテーブル名/カラム名くらいにまで留まっており、関連やキーの設定はこの外部XMLを参照するような作りになっているようだ。これがなかなか絶妙。

つまり、将来的にhogehogeするかもしれないから、なんて理由でユルユルな制約のまま運用してしまって、機能拡充するうちにアレな状態になってしまっていた既存DBの面倒を見ることになってしまっても(泣)、既存スキーマに手を入れること無く、スピーディな管理ツール開発手法を導入できる(かも知れないっ)ということだ。

この辺の話は、また今度書く。


関連していそうなエントリ:

2 Responses to “qcodoを試してみた”

  1. Persistence is Power Says:

    qcodoでdashboard表示をちょっとカスタマイズ

    書くまでもない小ネタだけど、「qcodoを試してみた」の続き。
    qcodo の codegen で生成された panel_drafts は微妙に表示がオカシイ。dashboard の dashboard_left, dashboard_right 辺りの配置とスタイル指定がよろしくないようで、僕の環境だと、dashboard_right が下に…

  2. Persistence is Power Says:

    Qcodoによるマスタメンテナンスツール開発

    前回書いてからずいぶん経ってしまったが、業務利用のマスタメンテナンスツールをQcodoで開発していく手順について職場のJさんにまとめてもらったので、いろいろ晒してみます。業務システムに限らず、旧来のwebサイトに適用して、なんちゃってCMS/カンタン管理ツールみたいな…