YAPC::NAに行ってきて「お、これはいいな」と思ったのがsmartcd。smartcdでぐぐっても"Smart CD"しか出てこなくてCDをリッピングする話ばっかヒットするんだけど、これは違うヤツね。

基本的には単純にディレクトリを変更するとフックが走って、各ディレクトリでなんらかの設定を行うためのもの。で、僕は何をやっているかというとPerlのライブラリパスとか、オプション設定とかをこれでプロジェクトごとに設定するようにした。

例えばプロジェクトごとの依存関係は project/extlib に入れたいなーと思ってて、それを毎回設定するの面倒くさいので以下のように設定

  autostash PERL_CPANM_OPT="-l__PATH__/extlib -nq"

これで特に考えずにextlibに一通りはいる。で、一旦ここにインストールしてしまうと、そこへのパスを通さないといけないので、PERL5OPTも設定:

  autostash PERL5OPT="-Mlib=__PATH__/extlib/lib/perl5 -I__PATH__/lib"

これで以下の設定がproject/ ディレクトリに移動すると自動的に適用される。このディレクトリを離れれば設定はクリアされる。

  PERL_CPANM_OPT="-l/path/to/project/extlib -nq"
  PERL5OPT="-Mlib=/path/to/project/extlib/lib/perl5 -I/path/to/project/lib"

これらの設定はディレクトリごとに設定できるので、project2 にcdしたらproject2/extlib を見るようにできる。よく使う設定は テンプレートとして保存しておくこともできる。

あとはこれをうまく設定すれば、ディレクトリやプロジェクト内容が違ってても同じコマンド名をaliasにすることによって、正しい動作を呼び出すようにもできる。例えばproject/ はperl、project2/ はruby のプロジェクトだったとして、runtest というaliasをそれぞれのテスト実行コマンドにひもづけておけば、あんまり意識せずにおなじよーにテストを実行とかできる。

とりあえず自分はパスの設定とかにしか使ってないけど、今のところ結構便利