Shell::Amazon::S3 - Moooooooosenized psh3ll

psh3llをmoose化してみました。
http://github.com/dann/shell-amazon-s3/tree/master

役割別にクラス分けをしたので、signle script版よりは構成は綺麗になりました。

  • Plugin機構としてDevel::REPLのものを採用
  • CommandをModule::Findで一括ロード
    • Shell::Amazon::S3::Commandにcommand名のファイル置けばコマンドが追加できるようになりました

とすることで、コマンドの追加やシェルの拡張は大分簡単にできるようになりました。以下のようにpluginをloadすることでシェルの機能を拡張できます。

#!/usr/bin/env perl
use strict;
use warnings;
 
use FindBin::libs;
use Shell::Amazon::S3;
 
my $shell = Shell::Amazon::S3->new;
$shell->load_plugins($_) for qw(ReadLineHistory Completion);
$shell->run;
 
__END__

TODO

スクリプトを、そのままMooseベースに移行させたので、いまいちな点がまだ結構あります。

  • Commandのベースクラスの作りがいまいちなので後数段階は綺麗にできそう
    • RoleベースにしてCommandが実装するインターフェースを明確にする?
    • 抽象クラスをRole化?
    • Module::Findでcommand読み込むときのベースクラスの置き場所を...
  • コマンドの戻り値の検討
    • 結果に色をつけたかったりする場合には、今の仕様だとダメだなぁ
  • Pluginは必要?
    • Shell::Amazon::S3などくらいのシェルだと、Pluginにするのではなく、Shell::Amazon::S3::Term::ReadLineなど専用のクラスを作ったほうが役割としては適切なのかなぁという気はしました。CompletionやHistory機能を保持するのは、Pluginという形で実現しなくてもいいのかなぁと
  • MooseX::Methodを外部インターフェース、コマンドなど仕様を明示するところに使いたい