2004年2月19日号

━━━━━━━━━━━━━━━━━━━━━ 2004.02.19 Vol.910 ━━━━━
 ■□■□■
 ■□■□■ 日刊「WEBのツボ!」
 □■□■□              http://www.soho-union.com/
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
                             配信部数 3317部
「続 システムはオブジェクト指向 Ruby & Flash」(#003)   
                                                        福井修@Fsys.NET

【○】本日のお題 「Ruby サーバサイドプログラム再入門2」 ━━━━━━━

こんにちは、Fsys福井システムリサーチの福井です。
2月も半ばを過ぎました。日に日に日が長くなっているのを感じる今日この頃で
す。

前回「時刻・文字列操作でプログラム入門」注1)にて時刻出力(文字列操作)につ
いて実例を示しました。やってみてうまくゆきましたでしょうか?

何度も言いますが、Webでは、結局プログラミングを避けて通れません。

JavaScriptが、ひとつの踏み絵になります。クライアントサイドで簡単にプログ
ラミングすることができるので、ここらあたりがとっかかりになって、さらにレ
ベルアップを目指そうとする状況が存在すると思います。

リッチクライアントへは、Flash ActionScript の道を歩むのが有利でしょう。
『オブジェクト指向言語』の世界ではどれかひとつの言語で身につけると、共通
で使える基本概念や使いこなしのコツがあります。山に登るのにいろいろなコー
スがあっても結局同じ高みに至るのと同じです。

Flash ActionScriptには、やはりある敷居が存在していると思います。この敷居
を乗り越えるのに、楽な方法があります。それは、他の言語でオブジェクト指向
プログラミングを身につけることです。

このオブジェクト指向プログラミングに『 Ruby 』が低い敷居と、奥深さを持っ
て門戸を開いています注2)。 Javaを指向するなら溺れないように覚悟を決めて
それも結構でしょう。マイクロソフトの閉じた世界を指向するならVB.NETC#も
いろいろ解説が増えてきているようですしそちらのコースもありでしょう。

オブジェクト指向スクリプト言語のすばらしさに触れ、感動すると病みつきにな
りますので、要注意ですが^^

PerlJavaで躓いた方や、PHPで問題意識を持っておられる方、またプログラム
を今からはじめられる方、VBから VB.NETC#へどう移行しようかと迷っておら
れる方。 一度 Ruby を味わってみて評価してみてはいかがでしょうか。

今回は、サーバサイドで Ruby を使う入門です。いつものように ノートPCで
WindowsXPを使っている環境を想定しますので、どうぞ おつきあい下さい。

Windowsで、慣れたら、Linuxや MacX へも文字コード、改行コード、プログラム
位置情報を変更して、そのまま移行できます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ サーバサイドプログラミングへの準備
────────────────────────────────────
 サーバサイドプログラミングに踏み込むには、WebServerが、動作している環境
を得る必要があります。Windowsでは、WindowsNT/2000,WindowsXP Proffesional
,WindowsServer2003では、IISが提供されます。WindowsXP HomeEditionでは、提
供されていませんし、LinuxやMacXへの適用も念頭におくと、世界標準 Apacheを
使用するのが、有利です。

1) Apacheのインストール

 WindowsでのApacheインストールについては、以前に

2002.10.30 Vol.605「システムはオブジェクト指向、そしてRubyで」(#005)注3)

 にて解説しましたので、そちらを参照してください。なお 当時 2.0.43であっ
 たのが2004.2.17現在では、apache_2.0.48-win32-x86-no_ssl.msi 5.9MB にバ
 ージョンが進んでいます。それ以外は、変わりません。

2) eRubyのインストール

 ApacheRuby の サーバサイドCGIプログラミングは、上記でも触れていますの
 で、今回は、eRubyの話しに重点を置きます。

2002.12.05 Vol.631「システムはオブジェクト指向、そしてRubyで」(#006)注4)

 で一度解説していますが、Rubyのバージョンが 1.6.x から 1.8.x に更新され
 ていますので、eRuby の方も最新版で解説します。
 前の解説の例は、そのまま使えますので、そちらもお試し下さい。

・ ダウンロード
  Ruby ホームページ(http://www.ruby-lang.org/ja/)から辿れるところの
  なかむら(う)さんのサイト
  http://www.dm4lab.to/~usa/ruby/
  の Extension librariesで eruby-1.0.4-i386-mswin32-1.8.zip (75KB) 
  をダウンロードします。

・ 解凍
  ダウンロードした.zipファイルを解凍するとeruby-1.0.4-i386-mswin32-1.8
  フォルダの下にbin,doc,lib,man のフォルダとその中にファイルやさらにフォ
  ルダが生成されます。

・ 設置
  binフォルダの中にeruby.exe ファイルが生成されているのをコピーします。
  コピー先は、c:\Program Files\ruby\bin です。注5)

  erubyの動作には、このファイルさえあればOKです。ちゃんと PATHが通ってい
  ますよね。

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

  c:\> PATH

  PATH=...c:\Program Files\ruby\bin;...
 
  前後省略していますが、PATHにc:\Program Files\ruby\binが含まれていれば
  OKです。
 
・ Apacheの設定追加
  eRuby での Ruby埋め込みファイルは、拡張子は .rhtml とすることが慣用な
  ので httpd.conf に .rbや.rhtml も CGIファイル扱いすることを指示

      AddHandler cgi-script .rb .rhtml

・ Apacheの再起動
    スタートメニューから、
    Apache httpd Server → Restart Apache in Console

・ 動作確認
   DOSコマンドプロンプトで eruby --version と入力します。

  c:\> eruby --version
  ruby 1.8.1 (2003-12-25) [i386-mswin32]
  eRuby version 1.0.4

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ eRubyサーバサイドプログラミング 再入門
────────────────────────────────────
 では、実際にプログラムして動作させてみましょう。
 前回でテーマとした時刻表示を、サーバサイドプログラミングでトライします。

 1) ファイル設置場所(例 d:\apache2\cgi-bin)に date0.rhtml を作成
  
#!c:\program files\ruby\bin\eruby -Ks -C Shift_JIS

<%= Time.now %>


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

  Tue Feb 17 21:07:12 東京 (標準時) 2004 
  
   などと表示されます。
  簡単に オブジェクト指向サーバサイドプログラミングできますね :-)

 3) 前回の例と同様 文字列を若干編集してみましょう。
    ファイル設置場所(例 d:\apache2\cgi-bin)に date1.rhtml を作成

#!c:\program files\ruby\bin\eruby -Ks -C Shift_JIS
<%
t = Time.now                              # 現在時刻のTimeオブジェクト
n = ['日','月','火','水','木','金','土']  # 曜日の配列
%>

<%= t.strftime("%Y/%m/%d %H:%M:%S") %>

<%="#{t.year}年#{t.mon}月#{t.day}日(#{n[t.wday]}曜日) "%> <%="#{t.hour}時#{t.min}分#{t.sec}秒 JST"%> 4) ブラウザから http://localhost/cgi-bin/date1.rhtml をリクエスト 2004/02/17 21:33:15 2004年2月17日(火曜日) 21時33分15秒 JST などと表示されます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ サーバサイドとクライアントサイドプログラムの組合せ ──────────────────────────────────── では、次に サーバサイドとクライアントサイドのプログラムを組合せてみまし ょう。前回の JavaScriptを使い回します。 1) ファイル設置場所(例 d:\apache2\cgi-bin)に date2.rhtml を作成 #!c:\program files\ruby\bin\eruby -Ks -C Shift_JIS <% t = Time.now # 現在時刻のTimeオブジェクト n = ['日','月','火','水','木','金','土'] # 曜日の配列 %> 1.サーバサイドプログラム実行での編集結果 <%= t.strftime("%Y/%m/%d %H:%M:%S") %>
<%="#{t.year}年#{t.mon}月#{t.day}日(#{n[t.wday]}曜日) "%> <%="#{t.hour}時#{t.min}分#{t.sec}秒 JST"%> 2.クライアントサイド(ブラウザ内)での編集結果 2) ブラウザから http://localhost/cgi-bin/date2.rhtml をリクエスト 1.サーバサイドプログラム実行での編集結果 2004/02/17 22:38:20 2004年2月17日(火曜日) 22時38分20秒 JST 2.クライアントサイド(ブラウザ内)での編集結果 2004/2/17 22:38:20 2004年2月17日(火曜日) 22時38分20秒 などと表示されます。 3) サーバサイドとクライアントサイドで別の時計の時刻であることを確認 ブラウザから http://ns1.fsys.net/cgi-bin/date2.rb をリクエストします。 ここに Linux Server上で動作するように文字コード、改行コード、eruby位置 を変えたスクリプトを配置しています。 (拡張子が.rb なのは、文字コードが違う分を意識する為です。.rhtmlでもOK) 1.サーバサイドプログラム実行での編集結果 2004/02/17 22:35:07 2004年2月17日(火曜日) 22時35分7秒 JST 2.クライアントサイド(ブラウザ内)での編集結果 2004/2/17 22:40:26 2004年2月17日(火曜日) 22時40分26秒 などと表示されます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ まとめ ──────────────────────────────────── 今回は Rubyでのサーバサイドスクリプトの再入門とクライアントサイドスクリ プトJavaScriptとの組合せを解説しました。 ノートPCで、どんどん習熟することができますので、お手軽にどうぞお試しを。 サーバサイドの Ruby とクライアントサイドの JavaScript との対比で、言語仕 様の差によって 記述に微妙な差が生ずるところに注目してみて下さい。 『簡潔さ』は、表現の違いとして現れますがそれは『美しさ』の差になります。 PerlJavaも比較して評価するのが良いでしょう。どの言語を使いたいかは自然 に身体が反応します。 同じことを実現するなら、簡潔ですっきりしている方が絶対に気分が良いです。 次回は、サーバサイドプログラミングをさらに進めてゆきます。お楽しみに。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ※ 注釈、資料、参考情報 ──────────────────────────────────── 注1) 続 システムはオブジェクト指向 Ruby & Flash (#002) 「人にやさしいプログラミング言語」 誤記訂正後 http://ns1.fsys.net/tubo/webtubo20040205.txt 改訂前 http://www.melma.com/mag/02/m00020302/a00000697.html 注2) まつもとゆきひろ氏の「プログラミング言語論」 【前編】(1) 2004/01/06 http://itpro.nikkeibp.co.jp/members/NBY/techsquare/20031224/1/ 【前編】(2) 2004/01/07 http://itpro.nikkeibp.co.jp/members/NBY/techsquare/20031224/2/ 【前編】(3) 2004/01/08 http://itpro.nikkeibp.co.jp/members/NBY/techsquare/20031224/3/ 【後編】(1) 2004/02/02 http://itpro.nikkeibp.co.jp/members/NBY/techsquare/20040129/1/ 【後編】(2) 2004/02/03 http://itpro.nikkeibp.co.jp/members/NBY/techsquare/20040129/2/ 【後編】(3) 2004/02/04 http://itpro.nikkeibp.co.jp/members/NBY/techsquare/20040129/3/ 注3) 2002.10.30 Vol.605「システムはオブジェクト指向、そしてRubyで」(#005) http://www.melma.com/mag/02/m00020302/a00000401.html 注4) 2002.12.05 Vol.631「システムはオブジェクト指向、そしてRubyで」(#006) http://www.melma.com/mag/02/m00020302/a00000427.html 注5) 続 システムはオブジェクト指向 Ruby & Flash (#001) http://www.melma.com/mag/02/m00020302/a00000690.html 【プロフィール&近況】 事務所を引っ越しました。 JR神戸駅 北東5分 高速神戸駅 北東3分 湊川神社神戸地方裁判所正面 ■ 新住所 650-0016 神戸市中央区橘通2−3−12 橘ビル302号 ■ TEL/FAX 078-341-5346 ■ 場所地図 http://map.yahoo.co.jp/pl?nl=34.40.47.844&el=135.10.55.519&la=1&sc=3&CE.x=143&CE.y=301 です。近くにいらっしゃったら、お寄り下さい。 どなたか良い看板屋さんをご存じでしたら是非紹介してください^^ 福井 修 ( FUKUI Osamu )o-fukui@po.iijnet.or.jp 福井システムリサーチ http://fsys.net/ 主幹。システム構築歴27年。 システム構築エキスパート 日本Linux協会、神戸商工会議所情報処理学会、関西IT共同体 会員 関西ソーホ・デジタルコンテンツ事業協同組合デジタルハリウッド神戸校 Java講師
<