In article <1128179638.632910.18519.nullmailer / x31.priv.netlab.jp>,
  Yukihiro Matsumoto <matz / ruby-lang.org> writes:

> |RubyGems を添付するが自動的には require しないというのは、中
> |途半端だと思うんですよねぇ。
>
> 中途半端ですかねえ。むしろ、RubyGemsが「勝手に」動かないため
> にどこかで明示的に
>
>   require 'rubygems'
>
> した方が良いような気もするんですが。

仮にあるアプリケーションがあるライブラリを必要としたとしましょ
う。つまり、そのアプリケーションの README とかにはそのライブ
ラリをインストールしてくださいと書いてあるわけです。

ここで、そのアプリケーションはそのライブラリが gem としてイ
ンストールされた場合でも、site_ruby に直接インストールされた
場合でもどちらでも動作させたいとしましょう。

ユーザがそのライブラリを gem としてインストールしたいかどう
かはアプリケーションの作者が強制するものではないですから、ど
ちらでも動作させたいというのは自然な話です。

その要求を簡単に実現するには、RubyGems 固有の機能は使わない
が、rubygems を require するだけはするということが考えられま
す。

> ああ、でも「誰かが」使っ
> てたら変わっちゃうんだから明示性には大した意味はないか。

えぇ。ライブラリ A がライブラリ B を必要とした時に B が gem
でインストールされているかどうかにかかわらず... 以下上記と同
様な理屈でライブラリ A が rubygems を require するのはありそ
うな話です。

そういうライブラリがたくさんあったとして、rubygems を
require しないという要求を満たすには... まぁ、$" をいじって
おくのが簡単ですかね。

> rubygemsは確実に添付されるわけですから、そこでrequireを捕捉
> する必要はないのでは。

RubyGems が添付される ruby が普及し、添付されていない ruby
を無視できるようになった時期ではたしかにそうです。でも、添付
されていない ruby もしばらくはあるわけで、それを気にするので
あれば LoadError を捕捉することになるでしょう。

RubyGems の ruby への統合の状態は次の 3種類が考えられます。

(1) RubyGems が添付されていない ruby
(2) RubyGems が添付されているが自動的には require しない ruby
(3) RubyGems は添付されていて自動的に require する ruby

ここで、(1) しか存在しない現在は、RubyGems を使う人は各自で
対処すればいいというわけで、require 'rubygems' を自分のコー
ドに入れる気分にはならないわけです。

また、もし、(3) の状態が十分に普及すれば、require 'rubygems'
は自動的に行われるので、やはり自分のコードに入れる必要はない
わけです。

でも、(2) が混在すると、RubyGems でライブラリをインストール
したユーザにも対応したいよなぁ、という気分になって、
require 'rubygems' を自分のコードに入れ、また、(1) が無視で
きなければ LoadError を捕捉することになるわけです。

なので、もし (2) をすっとばして (1) から (3) へ変化するので
あれば、require 'rubygems' を自分のコードに入れなくていいの
でいいなぁ、と思うわけです。

つまり、もし最終的に (3) の状態に到達するのであれば、(2) は
require 'rubygems' という、現在は必要なく、また最終的にも必
要なくなるコードを書くようにする影響があるわけで、そこが (2)
を中途半端だと評する理由です。
-- 
[田中 哲][たなか あきら][Tanaka Akira]