第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 以外の PerlやPHP,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 をインストールしRubyでCGIの第一歩をやりました。その続きです。 動的なHTMLを作成する場合、 1) perlによる CGI 2) マイクロソフトのASP(ActiveServerPages) 3) PHP 4) Java (Servlet/JSP/EJB..) などの手段があります。これは、次の方式に分けられます。 perlやServletのようにプログラムで、タグも含めて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講師