白井です。

> >  面倒なとおっしゃいますが、よく考えられた綺麗なツリーだと思いますよ
> > 。私の場合、あのツリーのまま CVS に入れています。ですから、
> > install.rb を放り込めばそれだけで配布パッケージが完成してしまいます
> > 。例えば:
> うーむ、本当にそのままなんですね……。それは考えてませんでした。

 他にも rubycocoa, ruby-dbi, shim 、これらは少なくとも"そのまま"の形で
CVS に入っています。思うに install.rb/setup.rb って配布用のインストーラ
に留まらず、優れたビルドシステムともいえるんじゃないかと思います。

> あのツリーは直接使うにはちょっとツリーが深すぎるような気がするん
> ですよ。あと言ったとおり、小さいツールとかをパラパラとその場に
> 置けないのが嫌です。CVS/ もありますし。

 私の場合も結構小さなツールを置いていますが、 tarball にする際にはその
都度 CVS のリポジトリからチェックアウトしますから、 cvs add しない限り余
計なものが混じる危険性はありません。 CVS/ については tarball にする際に
find -name CVS|xargs rm -rf してしまいます。(作業用のツリーとは全く別だ
から、「破壊的」な操作が可能です)

> > 今のところ、このツリー以外の形で開発用のソースツリーを持つ理由は考え
> > られません。青木さんの場合は、開発用と配布用とでは全く別のツリーで管
> > 理しているのでしょうか?
> 
> はい。ぼくのはこんな感じです。
> 
> ~/r/
> ...
> 配布用には remake というコマンドを使ってゼロから再配置してます。
> 次のようなファイルを作っておいて remake pack と打つと全部やって
> くれるようになってます。(でも pack の定義はここにはない。
> environ('rubyprog/tmail') の時点で rubyprog から継承している)
> ...

 つまり、どのファイルがどんな役割を持っているか( bin,lib,ext )という
のは外側で定義しているわけですよね。で、 remake によって振り分けられたそ
れらをインストールするために install.rb/setup.rb が存在すると。これだと
、ファイルにアクセスする際に役割の階層を気にせず、素早くアクセスできると
いう利点があります。

 とはいっても、 bin,lib,ext という階層分けが煩わしいかというと、そうも
言えないと思います。よほど面倒臭ければ

  $ ln -s bin/* lib/LIBNAME/* .

という風にリンクを上手に使う手もありますしね。それよりも、チェックアウト
したソースツリーに install.rb/setup.rb が直接適用できることの利点が大き
いんじゃないかと思います。これは、誰かが Anonymous CVS からソースを取っ
て来て、ビルドしたいというケースを考えると非常に分かりやすい仕組みです。
ですから、

> しかしそれならそもそも現在の setup.rb の「ディレクトリツリー (のみ) 
> で属性を指定する」という前提が崩れるので、ディレクトリツリー縛りは単
> なる負担になってしまいます。それだったら全部作り直したほうが楽です。

負担というよりも、むしろこうした構造に従うことで良いソース管理ができると
思うのです。

> 本気で考えれば、無視すべきファイルパターンは固定しないでしょう。たと
> えば *.in は入れてほしくないとか、いくらでも変則的な要求は考えられま
> す。だからちゃんと問題を解決するには、たぶんその逆にインストールすべ
> きファイルを指定するべきです。

 もっとも、色々と変則的なケースが想定されます。でも、

  RCS CVS *~ *.bak *.BAK core *.core #* .#* *.orig *.rej *.old

は多分ほとんどの人が除いて欲しいと思っているパターンのファイルだと思うし
( rsync にも --cvs-exclude というオプションがあるくらいです)、これらを
インストール処理の対象から除いても誰も困らないのではないかな、と。ほんの
一部の人達(私とるびきちさん)が幸せになれる為にパッチを取り込んで欲しい
と思ったりするんですけど、だめ?

-- 
shirai / korinkan.co.jp

Shirai,Kaoru
  Korinkan Ltd.