Catalystで使用テーブルを明示的に指定しない理由

CatalystでModelにMySQLを使用し、あれこれ試行錯誤していて思ったこと。
Catalystってどうしてテーブルを明示的に指定しないんだ?」

多くのサンプルプログラムをあさってみるが、どのソースにもテーブル指定の記述は無い。
理由がわからなかったのでその疑問は放置していたのですが、こんなエラーメッセージを調べるうちにその理由がわかりました。

エラーメッセージ

Couldn't instantiate component "Anntena::Model::CDBI", "jpzipcode has no primary key at C:/Perl/site/lib/Class/DBI/Loader/Generic.pm line 164

CatalystのModel作成時に吐かれるエラー。よくわかりません。
Class::DBI::Loader::Generics.pmのドキュメントをあたってみる。

Class::DBI::Loader::Generics.pmとは

Class::DBI::Loader::Generic - Generic Class::DBI::Loader Implementation. - metacpan.org
どうやらこのモジュールは
「汎用のClass::DBI::Loader実装」そうです。
はてなClass::DBI::Loaderを調べる。


Class::DBI::Loader - Dynamic definition of Class::DBI sub classes. - metacpan.org
このClass::DBI::Loader。
DESCRIPTIONを訳すとこんな感じでしょうか。

DESCRIPTION

Class::DBI::Loader automate the definition of Class::DBI sub-classes. scan table schemas and setup columns, primary key.

Class::DBI::LoaderはClass::DBIサブクラスの定義を自動化します。表スキーマをスキャンし、列、そして主キーをセットアップします」
なるー。Class::DBI::Loaderは使用するデータベースから自動的に存在するテーブル情報を取得して、スムーズに利用できるようにするのですね。
ではClass::DBI::Loader::Generics.pmは、Class::DBI::Loaderがさまざまな状況でも利用できるように、汎用化したものだと。

疑問氷解

つまり、冒頭の
Catalystってどうしてテーブルを明示的に指定しないんだ?」
という疑問に対しては、
Class::DBI::Loader::Generics.pmによって、テーブル情報が自動取得されるので、明示的に指定する必要は無い」と答えることができる、と。


それにしてもこのClass::DBI::Loader、便利すね。