第6回 2002/12/05

復刻第36弾!!4年まえ

━━━━━━━━━━━━━━━━━━━━━━ 2002.12.05 Vol.631 ━━━━━━
 □■□
 ■□■□■□■□■ 日刊「WEBのツボ!!」
 □■□                      http://www.soho-union.com/
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
                           配信部数 2940部

【○】本日のお題 「システムはオブジェクト指向、そしてRubyで」(#006) ━━━━
                                                                 福井修@Fsys

 あっという間に12月です。今年最後になりましたが、オブジェクト指向Ruby の
時間です。「オブジェクト指向」使ってますかぁ 「Ruby」使ってますかぁ

旬の話題から
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ 『関西オープンソース+フリーウェア2002』21世紀の情報社会の姿がここにある
──────────────────────────────────────
  http://of.good-day.net/ 
  日時:12月6日(金)、7日(土) 10:00〜19:00
  場所:大阪産業創造館3Fマーケットプラザ
  内容:インターネット社会を情報共有をキーワードに展望する。
        セミナー、討論、ステージ、ブース展示等 参加自由。
        未来は自分で創造する、ここから元気な関西が動きだす。
         気軽に、ふらりと来場し未来社会を共有しましょう。
  問合:関西オープンソース+フリーウェア2002事務局 TEL 06-4796-6120
  主催:関西オープンソース+フリーウェア2002実行委員会
  後援:大阪市大阪府京都市、神戸市、経済産業省大阪商工会議所
        日本 UNIX ユーザ会 (jus)、ソフトウェア技術者協会
──────────────────────────────────────
というイベントが開催されます。注目して頂きたいのは 12月7日(土)15:00〜16:00 
の枠でテーマ『 Lightweight Languages を語り合う 』
「 広く盛り上がって、Ruby を中心に まつもとゆきひろさんを囲んで 
  Ruby 以外の PerlPHP,Python..な方とも交流できれば..  」
という企画で 私 も参画しています。よろしければ、皆様是非どうぞご参加下さい。

また 電子政府に関わる話で「オープンソース」が話題になっています。
・ 電子政府の基本ソフト、脱ウィンドウズへ 公開型に転換
http://www.asahi.com/tech/asahinews/K2002111600088.html

まあ マイクロソフトの反論もありますが、欧州や中国ではオープンソースが当然と
なっていますから、時代の流れでしょう。

これについても12月6日(金)17:00〜19:00『フリーソフトウェアと政府/自治体』で討
論会があり、三菱総研の比屋根一雄主任研究員やKNOPPIXで有名な独立行政法人 産業
技術総合研究所 須崎有康氏も おみえになります。おもしろそうです。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ KNOPPIX: CDのみでブート可能な Linux ディストリビューション
──────────────────────────────────────
http://www.aist.go.jp/aist_j/topics/to2002/to20021001/to20021001.html

ノートパソコンで、Windowsを使っている場合(私もそうですが)、Linuxを使うには
パーティションを切ってDualブートにしたり、VMWareなどを使ったりしないといけな
い敷居があったのですが、このKNOPPIXだと、CDブートするだけで、(ハードがサポー
ト範囲だと)見事に、一発でLinuxが立ち上がります。DHCP環境下ではネットワーク
も自動認識ですぐにつながりますからブラウザもすぐに使えます。

Photshopに匹敵するGimpもすぐにつかえますし、OpenOfficeもすぐに使えるのです。
これを独立行政法人(税金でまかなわれている)がお墨付きで提供してくれているの
ですから、利用しない手はありません。

このCDを入手するには、ダウンロードして700MBのCD-Rで焼くか、どこかで手に入れ
る必要があります。LinuxMagagine12月号に付録でついているので、それがたぶん
てっとり早いでしょう。(12月7日には2003年1月号が発売されてしまいますが^^;)

なお元のWindows環境への書込は、制限されているので安心して試せるのですが、書
込む(ファイルを保存したりする)ためには、操作が必要なので面倒 という諸刃の剣
なところはあります。

かなり前置きが長くなりましたが、本題です。Ruby CGIの続きです。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■■   Ruby CGI 入門 その2
──────────────────────────────────────
前回http://www.melma.com/mag/02/m00020302/a00000401.html WindowsにてApache2
をインストールしRubyCGIの第一歩をやりました。その続きです。

動的なHTMLを作成する場合、
1) perlによる CGI
2) マイクロソフトASP(ActiveServerPages)
3) PHP 
4) Java (Servlet/JSP/EJB..)
などの手段があります。これは、次の方式に分けられます。
perlServletのようにプログラムで、タグも含めてhtmlファイルを編集する方式と
ASP,JSP,PHPのように htmlファイルのタグのなかにプログラムを埋め込む方式があり
ます。
プログラムで、タグも含めて編集する方式は、デザイナとの分業が困難なので、後者
のタグの中にプログラムを埋め込む方式の方が、現在主流になっています。
Ruby は、前者の方式も後者の方式もサポートしています。
後者の方式を採用する場合には、eRuby (embedded Ruby 埋め込み型Ruby)を使います。

今回は 前回の復習も含めながら eRuby を使ってみましょう。
──────────────────────────────────────
■ eRuby
──────────────────────────────────────
・ まず動作環境を確認します
  ActiveRuby.msiをダウンロードして.msiファイルをクリックしてインストールした
  場合には既に eRuby も準備完了です。
 (環境整備は、 http://www.melma.com/mag/02/m00020302/a00000350.html 参照)

   DOSコマンドプロンプトで eruby --version と入力します。

  c:\> eruby --version
  ruby 1.6.7 (2002-03-01) [i586-mswin32]
  eRuby version 0.1.3

   などと反応すれば、OKです。

 早速 例を動かしてみましょう。

・ その前に、Apacheの設定に追加です。
  eRuby での Ruby埋め込みファイルは、慣用的に拡張子は .rhtml とすることが多
  いです。eRuby作者の 前田さん(http://www.modruby.net/)の事例など。
  
  httpd.conf に .rhtml も CGIファイル扱いすることを指示

      AddHandler cgi-script .rb .rhtml

・ Apacheの再起動を忘れずに。
    スタートメニューから、
    Apache httpd Server → Restart Apache in Console

・ 作業用フォルダ作成
  Apacheのインストールされているドライブがc: なら c:\tmp d: なら d:\tmpフォ
  ルダを作成します。(無いとエラーになります^^;)

・ はじめの一歩は、文字列出力で

 1) ファイル設置場所(例 d:\apache2\cgi-bin)に kansaiof.rhtml を作成
  定義した文字列を、outという変数で指して、タグ内で出力します。
  kansaiof.rhtml ↓
  #!c:\program files\ruby\bin\eruby -Ks -C SHIFT_JIS
  <% out = '12月6,7日は、関西オープンソース+フリーソフト2002' %>
  
  <%= out %>
  

 2) ブラウザから http://localhost/cgi-bin/kansaiof.rhtml をリクエスト

   12月6,7日は、関西オープンソース+フリーソフト2002

   と正しく日本語も表示されます。

──────────────────────────────────────
■ コマンドラインcgi、eRuby で環境変数を出力
──────────────────────────────────────
・ 応用例として 環境変数 を出力、表示してみましょう。

 1) まずは コマンドライン版(cgi動作ではありません)
  ファイル設置場所(例 c:\ )に env.rb を作成
  env.rb ↓
  ENV.each do |name,value|
    puts name + ' : ' + value
  end

 2) コマンドラインから 実行
  c:\> ruby env.rb

  ALLUSERSPROFILE : C:\Documents and Settings\All Users
  APPDATA : C:\Documents and Settings\fukui\Application Data
    :

 3) 次にcgiの .rb版
  ファイル設置場所(例 d:\apache2\cgi-bin)に envcgi.rb を作成
  envcgi.rb ↓
  #!c:\program files\ruby\bin\ruby -Ks
  print "Content-type: text/html\n\n"
  print ""
  ENV.each do |name,value|
    puts name + ' : ' + value + '
' end print "" 4) ブラウザから http://localhost/cgi-bin/envcgi.rb をリクエスト HTTP_ACCEPT : image/gif, image/x-xbitmap, image/jpeg, .. HTTP_ACCEPT_LANGUAGE : ja,en;q=0.5 HTTP_ACCEPT_ENCODING : gzip, deflate : などが出力されたらOK 5) さらに eRubyの .rhtml版 ファイル設置場所(例 d:\apache2\cgi-bin)に env.rhtml を作成 env.rhtml ↓ #!c:\program files\ruby\bin\eruby -Ks -C SHIFT_JIS <%= ENV.each do |name,value| puts name + ' : ' + value + '
' end %> 6) ブラウザから http://localhost/cgi-bin/env.rhtml をリクエスト HTTP_ACCEPT : image/gif, image/x-xbitmap, image/jpeg, .. HTTP_ACCEPT_LANGUAGE : ja,en;q=0.5 HTTP_ACCEPT_ENCODING : gzip, deflate : など同様に出力されたらOK --<補足解説>---------------------------------------------------------------- ENV.each do |name,value| puts name + ' : ' + value end この3行には、Ruby らしさ が詰まっています。要素を順番にみてみましょう。 [1] 組み込み定数 ENV : Rubyには組み込み定数と呼ばれる定数があります。ENVはそのうちの ひとつで、環境変数をハッシュで保持します。 [2] ハッシュ(または連想配列) { hoge => valuehoge, fuga => valuefuga ... } ハッシュ式は、{ } で囲まれて、「キー」と「値」を => でつなげたものを カンマで区切られた並びで指定します。 ex.1) lang_estimation = { "Ruby"=>"elegant", "Java"=>"complex", "VB"=>"poor" } p lang_estimation["Ruby"] #=> "elegant" ハッシュは、キーから値を巧妙なアルゴリズムで高速に検索できます [3] 配列 (インデックスのついたオブジェクトの集まり) [ "hoge", "fuga".. ] 配列式は、[ ] で囲まれて、カンマで区切られた式の並びです。 ex.2) lang_array = ["Ruby","Java","VB"] p lang_array[0] #=> "Ruby" [4] イテレータ (繰り返しの為のメソッド) .each は、 eachメソッドです。これはその名のとおり繰り返しを行うためのメ ソッドです。 eachメソッドは、イテレータの代表で、配列やハッシュと供に使われます。 オブジェクト.each do | 変数 | 繰り返したい処理 end この環境変数の例では、オブジェクトは ENV という組み込み変数名で指定 (定義)された実体です。 ENV.each do |name,value| puts name + ' : ' + value end 繰り返しますが ENV は組み込み変数で 変数名と値のペアをハッシュで保持した オブジェクトです。 ここで イテレータeachメソッドを使うと、ハッシュの各要素に対して繰り返し、 操作することができます。 ここでは、ENV オブジェクトの変数名と値のペアを順番に取り出して、変数 name と value にセットしてくれます。 そして繰り返しの処理 puts name + ' : ' + value で 文字列 name に ':' をつなげて さらに 文字列 value もつなげて puts しているわけです。 ----------------------------------------------------------------- 【プロフィール】 福井 修 ( FUKUI Osamu )o-fukui@po.iijnet.or.jp 福井システムリサーチ http://fsys.net/ 主幹。システム構築歴25年。 日本リヌクス協会、神戸商工会議所情報処理学会 会員 関西ソーホ・デジタルコンテンツ事業協同組合デジタルハリウッド三宮校 Java講師