=encoding utf8 =pod =head1 題名 Moose::Cookbook::Meta::Recipe4 - メタクラスに「table」アトリビュートを追加する =head1 概要 package MyApp::Meta::Class; use Moose; extends 'Moose::Meta::Class'; has table => ( is => 'rw', isa => 'Str', ); =head1 本文 このレシピでは「table」アトリビュートを持つ新しいメタクラスを作成します。このメタクラスはORMを作るときのように、DBMSのテーブルに紐づけられたクラスに使うためのものです。 この例ではテーブル名は単なる文字列ですが、本当のORMであればそのテーブルを表すオブジェクトが入るかもしれません。 =head1 メタクラス これはLにある通り本当に簡単なレシピですが、自分のクラスにこのメタクラスを使わせるのと、テーブルを宣言するためのシュガー関数を用意するのにこつがいります。これについてはLで扱います(そちらではモジュールをC自身のようにする方法や、Cのようなシュガー関数を用意する方法を紹介しています)。 =head2 実際にこのメタクラスを使ってみる この新しいCアトリビュートにアクセスする方法はきわめて簡単。Cという名前のクラスがあるとしたら、このように書くだけです。 my $table = MyApp::User->meta->table; CがメタクラスにCを使うようになっている限り、このメソッド呼び出しはうまくいきます。もっと慎重にいきたいのであれば、メタクラスのクラスをチェックすることもできます。 $table = MyApp::User->meta->table if MyApp::User->meta->isa('MyApp::Meta::Class'); =head1 まとめ 独自のメタクラスを作るのはむずかしいことではありません。独自のメタクラスを使うのはもう少し大変ですが、それについてはほかのレシピで取り上げます。また、これからクラスのメタクラスにトレートを組み込む話もしていきます。こちらはさらに柔軟で相性のよい実装になります。 =head1 参照 L - 「table」アトリビュートをメタクラスのトレートとして実装する L - Moose.pmのようにMoose風のシュガー関数を提供する =head1 作者 Dave Rolsky Eautarch@urth.orgE =head1 COPYRIGHT AND LICENSE Copyright 2006-2009 by Infinity Interactive, Inc. L This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =pod