Module::Installを使ったCPANモジュールはincというディレクトリがあって、その中にinc::Module::Installなどのファイルが同梱されています。なぜ、inc::Module::Installなどが含まれているかというと、これによってModule::Installがインストールされていないマシンでも、そのモジュールをインストールできるという利点があります。

Module::Installを使ったモジュールのプロジェクトを作るのは意外と簡単で、module-starterなどでプロジェクトの雛形を作り、以下のような感じでMakefile.PLをModule::Install用に書き換えてやるだけでいいのです(module-starterはテンプレート機能があるので、$HOME/.module-starter/の設定で最初からMakefile.PLをModule::Install用で出力することも可能)。
use strict;
use warnings;
use inc::Module::Install;

name     'Sample::Module';
author   'Foo Bar <foo@example.com>';
all_from 'lib/Sample/Module.pm';

auto_install;
WriteAll;

Makefile.PLをModule::Install用に書き換えたら、いつもCPANモジュールをインストールするときと同じようにperl Makefile.PLを実行すると、Makefileや前述のincディレクトリなどのインストールに必要なファイルが生成されるというわけです。


で、ここからが本題です。

他の人と同様に自分もモジュールを作る際にソースをsubversionで管理しているのですが、管理しているモジュールのリポジトリにincディレクトリがコミットしてあると、そのモジュールのデバッグ時にperl Makefile.PLとやることで毎回incディレクトリが再生成され、incディレクトリ内のsubversion用の.svnディレクトリが消されてしまいます。

当然この状態でsvn updateやsvn commitをすると、
% svn up
svn: Directory 'inc/.svn' containing working copy admin area is missing

とか
% svn commit
svn: Commit failed (details follow):
svn: Directory '/path/to/inc/.svn' containing working copy admin area is missing

とおこられちゃいます。

なぜincディレクトリがperl Makefile.PLするごとに再生成されてしまうのかというと、incディレクトリに「.author」という空のディレクトリがあり、これがあることによってModule::Installがauthor mode(作成者モード)で動くため、毎回Makefile.PLの中身を判別して必要なModule::Installのモジュールをincディレクトリにコピーするためです(その辺はinc::Module::Installのperlpodに書いてあります)。

author mode でincディレクトリを再生成してくれるのはとてもありがたいのですが、「デバッグ→コミット→デバッグ→コミット」とスムーズな開発がしたいのに、毎回.svnが消されることにより「デバッグ→incディレクトリを消す→svn updateでincディレクトリを最新にする→コミット→デバッグ→incディレクトリを消す→svn updateでincディレクトリを最新にする→コミット」と、とてもめんどくさいことになってしまいます…。


ということで長々と書いてしまいましたが、モジュールのプロジェクトをsubversionで管理するときに、incディレクトリ内の.authorディレクトリまで管理した方がよいのか、それとも.authorディレクトリはsubversionで管理せずに必要な時に適宜自分で.authorディレクトリを生成してincディレクトリを再生成させた方がよいのか、どちらがいいのでしょうか。


このエントリを見ている人で、こうしてますっていう人がいたら是非教えてほしいです。

CodeReposとかみると、あんまりModule::Installを使ってる人がいないので、あんまりModule::Installって使われてないのかな?
追記http://unknownplace.org/memo/2007/10/12#e001 いくつかのモジュールを見て判断してしまいましたが、Module::Install使ってる人は結構いるようですね。失礼しました。