高橋征義です。

Minero Aoki <aamine / dp.u-netsurf.ne.jp>さん:
> えっ? それだったらむしろ foo/* は自然でしょう。ユーザが使いたいのは
> Foo モジュールそのものじゃなくて「Foo::全部」なんですから。

あんまり直接の回答ではないです(_o_)が、もう少し説明してみます。

# あ、さっき書いてませんでしたが、FooがFoo::Barなどを使ってる
# 場合には、 foo.rb の中で、
#
# require 'foo/bar'
# require 'foo/baz'
#
# などと書く、というのが前提です(_o_)

まず、Foo::Bar というクラスがあった場合、このクラスは、ライブラリ
製作者の意図としては、

 1. Fooと一緒に使われることを想定しているが、諸処の事情により
    サブクラス/モジュールに分割されたもの
 2. 名前空間を分割する意味でFooというモジュールを使っているが、
    基本的に他のFoo::* とは別クラス/モジュールとして提供される
    もの

の二通りがあるかと思います。

前者の場合、foo.rb を用意します。利用者は require 'foo' します。
後者の場合、foo.rb は用意しないので、利用者は require 'foo/bar'
します。
つまり、ライブラリ製作者としては、foo.rb を用意するかしないかで、
その Foo という名前の意味を利用者に伝えることになります。


> Date → date.rb なのに、Foo::全部 も foo.rb ってのはおかしくない
> ですか?

んー、「全部」っていう名前のものはないんですよ(日本語で名前を
つけないかぎり:-)。

上の例の前者の場合、それは「Foo::全部」じゃなくて「Foo」になります。
後者の場合は、それぞれ独立して使うことを前提としたライブラリなので、
「Foo::全部」じゃなくて「Foo::Bar」や「Foo::Baz」になります。だから、
別々に読みこみます。

後者の場合で、それでも全部まとめて読みたい、ということがあるかも
しれません。でも、それはライブラリ製作者の方で意図していない使い方
なのだから、使えなくても別に仕方ないかと。実際に使うのは個々の
Foo::Bar や Foo::Baz なのですし。素直に、

require 'foo/bar'
require 'foo/baz'

でいいんじゃないでしょうか。

もし、それをまとめて提供するべき、という判断があるなら、その時は
foo.rb を用意する時です。

……というシナリオでどうでしょうか?

高橋征義 (TAKAHASHI Masayoshi)       Email:maki / inac.co.jp
でも、foo.rb と foo/ が転がってるのはちょっといやかも、という
感覚はあります。はい。