あおきです。

  In mail "[ruby-ext:01559] Re: require 'dir/...'?"
    matz / zetabits.com (Yukihiro Matsumoto) wrote:

> まつもと ゆきひろです

> foo/* ってのはディレクトリfoo以下のファイルを全部requireするっ
> て意味ですよね。順番や排他を制御できないので(ファイル名をそ
> のために変えるのは本末転倒だし)、あまり気乗りしません。

排他は、「それはやっちゃだめ」と言っとけばいいんではないかと。
どちらにしろ「エントリポイントは foo/foo だよ」とか「foo だよ」、
というのは書かなきゃわからないわけですから、その時に「これは
foo/* でロードしろよ」「foo/part1 でやってくれ」と書けばいい
わけです。

順番は、依存関係に応じて個別に require すればいいと思います。
(例えば) all.rb に require があつまってるのは見た目にはいいん
ですけど、依存関係だけがファイルの外に出てしまって管理はむしろ
しにくくなります。ファイルの依存関係の管理はそのファイル内で
完結してほしいです。

それで面倒になるのは

a.rb
 ↑req
b.rb
 ↑req
c.rb
 ↑req
d.rb

とか

b.rb → a.rb ← c.rb
         ↑
        d.rb

みたいな状況でしょうけど、上のほうはあんまりなさそうだし、あっても
二段か三段でしょう。下のほうは、実際に net/smtp,pop,http から
net/protocol をそれぞれ require してる実例があります (たいした
面倒ではないです)。

どの例においても、すくなくとも all.rb を自分で管理するよりずっと
楽になると思います。


また一番ありそうなのは以下のような状況だと思われますが、

a.rb  →  b.rb
c.rb  →  d.rb  →  e.rb
f.rb

これなどは all.rb に a から f までの require をまとめるのはむしろ
不自然です。a.rb c.rb f.rb だけを書くとすると、管理の手間が増えます。
自動化も (a〜f 全部を all に書くよりも) 難しくなります。


というわけでやっぱり foo/* が欲しいです。
-------------------------------------------------------------------
青木峰郎