From: TAKAHASHI Masayoshi Date: 2001-12-27T02:35:24+09:00 Subject: [ruby-dev:15557] Re: fileutils (2) 高橋征義です。 Minero Aoki さん: > ぼくとしてはようするに fileutils みたいなのを自分が使えれば > それで満足です。 (略) > 「ぼくの最初の個人的な作成動機は」、make の代替です。最初は make > 使ってたんですけど、メタデータをあっちこっちにやりとりするのが > 面倒でしかたなかったんで、Ruby で書いたツールに移行したんです。 > ただそうしたら今度は cp とかが面倒になってしまったのでそれを埋め > るために今度は fileutils を作った。 > > というのが歴史的経緯です。 なるほど。 > > ftoolsの代わりにfileutilsを使えば、たとえばmake -n install相当の > > 「どこにインストールされるかを表示するけど、実際にはインストール > > しない」ということが簡単に書けますよね。 > > しかしそれでは、 > > * 可搬性が下がる (1.8 移行でしかインストールできない) > * もし fileutils がバグ入りだった場合に困る > > という問題があります。 「1.8以降」の問題については、おそらく時間が解決する、ということに なるのでは。 # そのうち1.8以降でしか動作確認をしないライブラリが多数派を占める # ようにもなるでしょう。 バグ取りの問題については、その頃には解決されるはず。……というか、 そもそも目立つバグが入っているものをRuby標準に入れること自体が 問題ですし、一部機種でのバグやローカルな条件でのバグは、もしあれば (いつものように)patchや「CVSからとってきてね」で対応、ということに なるでしょうし。 > 特に noop なんて > ftools を使っても > > require 'ftools' > noop = Object.new > %w( cp mv rm_f makedirs install chown ).each do |name| > noop.instance_eval "def #{name}(*args) end" > end > op = $noop ? noop : File > > と、6 行で実装できます。 これだとverboseしてくれません……とかなんとかやってる うちに長くなりません? > そもそも、インストーラが欲しいなら最初から汎用インストーラその > ものを添付してしまえばいいんじゃないでしょうか? そうすれば > make -n 相当の機能が、実装するまでもなく、手に入ります。 それはその通りなのですが、「汎用」というのが問題で、 「どういう機能があれば『汎用』になるのか?」かつ「どういう 機能があれば最低限の要望は満たせるのか?」が模索されている ところだと思います。 例えばRDocみたいなのとの連携とか。 > Ruby のある生活に役立つ。とか。(make が薄れていく生活、でも可) > make ってディレクトリを越えたメタデータのやりとりが面倒だし、 > 制御構造使いにくいし、だんだんダミーターゲットばっかりになって > くるし……。Ruby ベースにするとそういう点はすごく楽になると思い > ます (ちょうど ruby-talk でも make replacement の話が出てますね)。 ほんとにmakeの代替まで作るんなら、それはそういうライブラリ&アプリケー ションを作るべきですよね。ちょっと「FileUtils」という名前のライブラリ とは方向が違いそう。 > あとさっき気がついたんですけど、lib/shell/ をよく見ると cd や > pwd があったりして結構似たようなことをしてるんですね。でも > cp や mv は ftools に投げてるので、そのへんをカバーできるように > 考えるのもいいかもしれません。 そうですね。というか、まさにFileクラスとの兼ね合い、という ことになりそうです。 高橋征義 (TAKAHASHI Masayoshi) Email:maki@inac.co.jp