From: TN Date: 2002-05-12T11:12:35+09:00 Subject: [ruby-list:35057] Re: ruby_lib/html/  にょにょると申します。(ここハンドル投稿ダメなのでしょうか?ダメなら本 名名乗ります) 今現在趣味でRubyでCGIを書いている最中で、非常にタイムリーな話題なので投 稿します。Rubyのレベルは初心者から毛が抜けた程度です(?)。 >青山です。 > >1.7 以降の話しですが、CGI, HTML について、どのようなインターフェイスが >使いやすいか、という話しでもあるので、-dev ではなく、より一般的な -list >に送ります。 > >ようやく cgi.rb の見直しに取り掛かりました。そして、まず、最大の課題で >ある HTML 生成機能の分離を行ってみました。これにより、インスタンス生成 >時にメソッドの生成を行う、という処理から逃れ、require による使い分けが >可能になり、mod_ruby 上ではより高速になったと思われます。 > ># ruby_lib/cgi.rb ># ruby_lib/html/common.rb # form 等、html3,4 共通の拡張部分。直接は利用し >ない。 ># ruby_lib/html/html3.rb ># ruby_lib/html/html4.rb ># ruby_lib/html/html4tr.rb ># ruby_lib/html/html4fr.rb > >この段階で一度出そうかと思ったのですが、ruby_lib/html/ の追加という事 >になるので、そうなると、HTML 生成ライブラリも、単に cgi.rb から分離し >た物ではなく、見直した物の方が良さそうに思えました。 > >そこで、各MLなどを見直してみましたが、やはり、オブジェクト指向、という >より、現在の String ベースというか、コードから容易に HTML ソースを想像 >できる、というインターフェイスが扱いやすそうなので、次のようなタイプを >試しています。 > >require "html/html3" >html = HTML::Html3.new >html.html() do > html.head{ html.title{"TITLE"} } > html.body() do > html.h1{"head 1"} > html.p() do > "paragraph" > end > html.form() do > html.textarea("field_name") > html.br > html.submit > end > end >end > >require "cgi" >cgi = CGI.new >cgi.out(html) # あるいは cgi.out(html.to_s) > >いかがでしょうか? > 僕はよいと思います。なぜこうなってなかったのかと思うほどです^^;。 HMTLを生成するという責務を、CGIが負うのはヘンだなとは思ってました。 ところでセッション管理はどのようになるのでしょうか? >cgi.out(html) # あるいは cgi.out(html.to_s) のところで何かしていることはわかるのですが、cookieが使えない場合はどのよ うな実装になるのでしょうか?この場合、formからhiddenフィールドかなにかで セッションIDを送信する必要があると思うのですが、もしcgi.out(html.to_s)と いう呼び出し方法をとっていたら、小細工を仕掛けるのが面倒な気がします。 >そして、これを 1.7 系に追加する場合、 > >1. この新たな HTML 生成ライブラリを 1.7 系に追加する。cgi.rb は現在のまま。 >2. 1.7 系に追加し、さらに cgi.rb も新版にする。 >3. 現在の cgi.rb 互換の HTML 生成機能にして追加する。 > >どれが良さそうでしょうか? > >1. の場合には、HTML 生成機能がだぶって提供されるため、ファイルサイズに >無駄ができるという問題があります。2. の場合には、互換性の問題がありま >す。3. の場合には、せっかく HTML 関連ライブラリを追加するのに、機能は >同じ、と、面白みが無い? > >1. でのダブる量は、cgi.rb の大部分となるので、約30k ぐらいになります。 > ある程度の規模になったら、eRubyやERb、html-templateを使うと思いますし、 それを使うと速度が気になるという方は、ヒアドキュメントで直接HTMLを埋め込 んでいると思います(その意味でHTMLの生成機能は位置付けは微妙だと思います。 確かにHMTLをRubyで書けるのは、かっこいいのですが)。 ので、その人たちにとっては読み込みにかかる時間が短縮される2や3のアプ ローチがよいと思います。(このあたりは青山さんは熟考しておられるとは思い ますが) ちなみに僕は、簡易掲示板というかなり小規模なものを開発しているのに、ERb を使ってます。(オーバースペック^^;) ので、僕個人の意見としては、クラス設計がよりスマートになっている(と僕は 思う)2を支持させてもらいます。(僕にはどの選択肢もデメリットがないので、 好き放題言ってます) ところで、XHTML 1.0, 1.1, Basicはサポートするのでしょうか? 以下独り言: 僕はそれよりもJSPのTaglibのような機能がERb(やERuby)に追加されないかな、 と思っています。今でも <%=Taglib.form :action=>"bbs.cgi", :method=>"POST"%> のように、似たことはできますけれど、もうちょっとスマートな方法がほしいで す。