Pixisががらっと変わろうとしている。最初は単純に継承ではなくRoleでその機能を提供しようと思ってあれこれ考えてたんだけど、その際にCatalyst.pmの中身を見たらsetup_plugins()が・・・
sub setup_plugins { my ( $class, $plugins ) = @_; $class->_plugins( {} ) unless $class->_plugins; $plugins ||= []; my @plugins = Catalyst::Utils::resolve_namespace($class . '::Plugin', 'Catalyst::Plugin', @$plugins); for my $plugin ( reverse @plugins ) { Class::MOP::load_class($plugin); my $meta = find_meta($plugin); next if $meta && $meta->isa('Moose::Meta::Role'); $class->_register_plugin($plugin); } my @roles = map { $_->name } grep { $_ && blessed($_) && $_->isa('Moose::Meta::Role') } map { find_meta($_) } @plugins; Moose::Util::apply_all_roles( $class => @roles ) if @roles; }
おわああ!Roleが適用できるじゃないか!どうもこれは将来的にPlugin機構をすべてRoleに取り替えるための伏線な気がするぞ。しかしともあれ、これがあるということは今までCatalyst Pluginを指定していた所でRoleを指定すればそのまま動くということ。

ってことでpixis/tree/rollerブランチで主立った機能をすべてRoleに移した。今後の使い方はこんな感じ:
package MyApp; use Pixis::Web; __PACKAGE__->config( ... ); __PACKAGE__->setup(); 1;
このファイル一個と、myapp_server.plさえあればいきなりある程度動くCatalystアプリができあがるという寸法。myapp_server.plが作れるようにしないとなあ。