[前][次][番号順一覧][スレッド一覧]

ruby-reference-manual:310

From: Minero Aoki <aamine@l...>
Date: Fri, 12 Jan 2007 22:31:19 +0900 (JST)
Subject: [ruby-reference-manual:310] Re: requireするライブラリの存在について

青木です。

  In mail "[ruby-reference-manual:309] Re: requireするライブラリの存在について"
  sheepman <sheepman@s...> wrote:

> こんばんは、sheepman です。

> > 例えばわたしは BitChannel で webrick/httpstatus を require したことが
> > ありますし、require 'test/unit/testcase' はググるとけっこうひっかかります。
> 
> webrick に関しては、webrick か webrick/cgi のどちらかを require すれば
> 済むと思うんですが。それに、require 'test/unit/testcase' しているのは、test/unit

そうは思いません。WEBrick で 200 でないステータスを発行するときに
webrick/httpstatus の定数が必要なんですが、それを投げるのはリクエスト
ハンドラです。BitChannel のリクエストハンドラは CGI, FastCGI, mod_ruby,
サーブレットをサポートしているので、webrick/cgi を require するのは
筋に合いません。かといって、require 'webrick' して HTTP サーバごと
ついてくるのってどうよ、と思いますし。

# webrick/webapplication てのがあったらちょうどいいんですが。

あとは net/http でも WEBrick::Cookie が使いたいなあ〜と思ってたり
するわけですが、そういうとき net/http から require 'webrick' とか
require 'webrick/cgi' するってのは、やっぱり変な気がします。


> 済むと思うんですが。それに、require 'test/unit/testcase' しているのは、test/unit
> が at_exit でテストを実行してしまうのを回避するためなんだろうと思います。

それなら、test/unit/testcase がインターフェイス「じゃないとまずい」
のではないでしょうか。test/unit でテストを実行してしまわずに TestCase
クラスを得るには test/unit/testcase を require しなければいけない
わけですよね。それで test/unit/testcase がインターフェイスではない
と言われてしまったら、回避方法がないですよね。そうすると、現実的には
作者はそっちをインターフェイスにするしかないと思います。

それで作者が使うなと言ったとしても、一つしか手段がないのなら「作者は
サポートしないって言ってるけどこれしかないんでいちおう書いときました
あとは自己責任でよろしく」と書いとくあたりが落とし所でしょう。


> で、しつこいようですが、思いついた問題点がひとつあります。
> 
> webrick と webrick/cgi はともに webrick/httprequest を require 
> しています。もし、webrick の作者が、「webrick/httprequest は公開を目的としていない」と
> 言ったとします。このとき、リファレンスにはどのように書けば良いでしょうか。
> webrick.rd と webrick/cgi.rd に「require webrick/httprequest」とは
> 書けないわけですよね。

いえ。ライブラリは分けて、require も書いて、そのうえで、そのライブラリ
のドキュメントに「このライブラリは内部用なので require するな」と書い
てください。提供元ライブラリが 1 つに決まらないとデータベースの設計上
非常に困るので、そこは多少問題があっても入れてしまいます。

そういうライブラリが (自動リンクとかで) いろんなところに露出してしまう
可能性はありますが、内部用ライブラリが自動計算でルートに出てくることは
現実的には少ないので、さほど大きな問題にはならないと考えています。また
実際にやってみて大きな問題になるようなら、ライブラリのエントリに非公開
属性を追加して対応します。

# そういえば net/protocol って……うあ、入れてなかったかー

--
青木峰郎

--
ML: ruby-reference-manual@m...
使い方: http://QuickML.com/

[前][次][番号順一覧][スレッド一覧]

       278 2007-01-06 14:26 [don@n...            ] requireするライブラリの存在について     
       279 2007-01-06 14:31 ┗[aamine@l...         ]                                       
       280 2007-01-06 14:46  ┣[don@n...            ]                                     
       283 2007-01-06 16:51  ┗[sheepman@s...       ]                                     
       285 2007-01-07 01:38   ┗[aamine@l...         ]                                   
       286 2007-01-07 03:14    ┣[aamine@l...         ]                                 
       291 2007-01-07 04:57    ┃┗[don@n...            ]                               
       297 2007-01-07 07:00    ┃ ┗[aamine@l...         ]                             
       302 2007-01-07 08:52    ┃  ┗[don@n...            ]                           
       287 2007-01-07 03:52    ┣[aamine@l...         ]                                 
       288 2007-01-07 04:24    ┃┗[sheepman@s...       ]                               
       294 2007-01-07 06:37    ┃ ┗[aamine@l...         ]                             
       300 2007-01-07 07:17    ┃  ┣[okkez000@g...       ]                           
       303 2007-01-07 08:54    ┃  ┣[don@n...            ]                           
       309 2007-01-08 13:40    ┃  ┗[sheepman@s...       ]                           
->     310 2007-01-12 14:31    ┃   ┗[aamine@l...         ]                         
       311 2007-01-12 15:55    ┃    ┗[sheepman@s...       ]                       
       292 2007-01-07 05:00    ┣[moriq@m...          ] tkextlib setup.rb (Re: requireするライブラリの存在について)
       298 2007-01-07 07:00    ┃┗[aamine@l...         ] Re: tkextlib setup.rb         
       293 2007-01-07 05:20    ┗[don@n...            ]