青山です。

Tue, Feb 02, 1999 at 07:53:45AM +0900 において
IKARASHI Akira さん曰く:

> それはそうなのですが、一般利用者(?)が多いと思われるライブラリなので、
> 利用者が使用する必要のないメソッドはprivate にして隠したほうが、
> 混乱がないのではないでしょうか? 
> 以前書いたように、単体で利用する必要がなければ、ですが。
> # 現在はドキュメントがないためソースを読む必要があり、
> # どちらでも同じことなのですが。

なるほど。ちょっと感覚が逆のようですね。私は CGI.header が主で
CGI.message が隠れ機能だと思っています。CGI.message のような機能は本来
は個別で対応すべきだと思いますし、現在まで誰もドキュメントを用意してい
ないのは、やはり隠れ機能的存在という意識がどこかにあったからだと思います。

ちなみに、それなりに広く使われていると思われる CGI.pm でも CGI.message
のような機能はなく、同様の事を記述するとこんな感じになります。

#!/usr/bin/perl
use CGI;
$query = new CGI;
print
  $query->header,
  $query->start_html("title"),
  $query->p("message"),
  $query->end_html;

私はこれで十分に簡潔であると感じますし、また、これ以上の簡略化はライブ
ラリではすべきで無いと思います。(実際、CGI.pm に無いという事からも、こ
の感覚は一般的だと思われますし。)

という事で、CGI.rb では CGI.message には眠ってもらって、start_html, p,
end_html のような機能を入れるというのはいかがでしょうか。(HTML の生成
は大きくなりますから、cgi-lib.rb に入る事は無いでしょう。)

> あと、ついでといってはなんですが、JavaScriptなどを利用する
> CGIプログラムやMETAなど、<head></head>の中に
> <title></title>以外を記入したい場合は多いと思います。

同じく例として CGI.pm での記述をあげます。

#!/usr/bin/perl
use CGI;
$query = new CGI;
print
  $query->header,
  $query->start_html(-title  => 'title',
                     -meta   => {'name' => 'content'},
                     -script => <<END_SCRIPT),
script
END_SCRIPT
  $query->end_html;

こちらも十分に簡潔であり、1つのメソッドに押し込める必要は無いと感じら
れます。

CGI.rb が無い現在ではちょっと不便かもしれませんが、あまり詰め込んだメ
ソッドを追加せずに、cgi-lib.rb の段階では次のような感じではいかがでしょ
うか。

print CGI.header
print <<END_HTML
<HTML>
  適当な内容
</HTML>
END_HTML

HTML の生成については CGI.rb または、html-gen.rb へ期待するという事で。


-- 
青山 和光 Wakou Aoyama <wakou / fsinet.or.jp>