第7回 2003/1/21
復刻第37弾!!3年半まえ なんか連番が?? #006 の次が #007 でなく #008に??
まいいか
━━━━━━━━━━━━━━━━━━━━━━ 2003.01.21 Vol.659 ━━━━━━ □■□ ■□■□■□■□■ 日刊「WEBのツボ!!」 □■□ http://www.soho-union.com/ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 配信部数 2987部 【○】本日のお題 「システムはオブジェクト指向、そしてRubyで」(#008) ━━━━ 福井修@Fsys オブジェクト指向とRuby の時間です。本年も 「オープン&スタンダード」 Linux,Ruby/Java,PostgreSQL,XML... でよろしくお付き合いの程を。 旬の話題 WebSphere,Eclipse,MDA..から ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ WebSphere AS アナウンスメント テクニカル・ワークショップ−大阪開催#1− ────────────────────────────────────── 【日時】1月16日(木)9:30〜17:30【場所】日本アイ・ビー・エム 大阪事業所 3階 【内容】・WebSphere V5 概説 ・System Management ・Servlet2.3/JSP1.2/HTTP Session ・EJB2.0 ・WAS Workload Management ・Performance ────────────────────────────────────── 行ってきました。大規模サイト構築(億〜)には、よさげですね。 Workload Managementあたりの 内容はなかなかです。 IBMは、WebSphere V5 に力が 入っています。いろいろ勉強になります。 ■ WebSphere Business Center http://www-6.ibm.com/jp/software/websphere/ ■ e-ビジネスは「オープン」へ向かう http://www-6.ibm.com/jp/software/websphere/campaign/wv5/ とか 良いですね。IBMが オープン を支持すると世間(Late Majority)も認知します。 IBMといえば『 Eclipse 』。Javaなどの統合開発環境決定版 (オープンソース) http://www.eclipse.org/ 以前(もう1年以上経つのですねぇ 早い)下記記事があって ほー と思った記憶は あったのですがこのIBMの統合プラットフォームが「 eclipse 」で、日本語版も昨年 出まして、使った人の評判が良くて、私も環境構築して使ってみました。 ■ IBM、オープンソース団体に4,000万ドル相当のソフトウェアを寄付 2001/11/06 http://www.idg.co.jp/lw/back/200111/20011106_01_news.html 『すばらしい』の一言です。WebSphereもEclipseを基盤に開発されているそうですし。 マイクロソフトの .NET との競争が前提にあるのでしょうが、このようなすごい環境 が 無償で、入手できるのは、よい時代になったものです。 なおこの eclipse はオープンソースなので、様々な付加モジュールも開発されてい てPHPも使えるそうです。もちろんRubyも使えますね。 ・ Eclipsプラグイン http://w3.cube-web.net/eclipse/index.php?%5B%5BRuby%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3%5D%5D ・ Rubyプラグイン http://sourceforge.net/projects/rubyeclipse ・ eclipse の紹介記事 http://bitarts.jp/tech/etc/eclipse.html ・ eclipseを使ってみよう http://muimi.com/j/eclipse/ ・ 富士通も『Eclipse.org』にボードメンバーとして参画 http://pr.fujitsu.com/jp/news/2002/04/10.html 〜モデリングに向けた態勢を整えるIBM〜開発を簡略化するEclipse2.0のMDAサポート http://www.atmarkit.co.jp/news/200209/21/ibm.html 「..EMFこそが、WebサービスやUMLおよびXMLの普及を加速する..」 注)EMF(Eclipse Modeling Framework)と えらい 力 が入っているのです。 ・ MDA Model Driven Architecture(モデル駆動型アーキテクチャ) http://www.omgj.org/technology/mda/ (補足)eclipse とは、日食、日蝕 という意味で、この命名には、 Javaに関してサンマイクロシステム(=SUN 太陽) を隠しても という 暗喩 が込められていそうです。 前置きが長くなりましたが、本題です。Ruby CGIの続きです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■■ Ruby CGI 入門 その3 ────────────────────────────────────── 前回 http://www.melma.com/mag/02/m00020302/a00000427.html eRuby(embedded Ruby埋め込み型Ruby)を使いました。その続きです。 今回は eRuby を使って端末振り分けをやってみましょう。 ────────────────────────────────────── ■ eRuby ────────────────────────────────────── ・ まず動作環境を確認します 年末に Rubyは 1.6.8 へのバージョンアップがありましたので、 http://arton.hp.infoseek.co.jp/ より ActiveRuby.msi をダウンロードし、既に Rubyがインストール済みなら一旦 旧バージョンをremoveし、再度.msiファイルをダブルクリックしインストールしま す。 環境整備は、 http://www.melma.com/mag/02/m00020302/a00000350.html 参照 但し PATH の設定記述が漏れていましたので、PATHにC:\Program Files\RUBY\BIN; (デフォルトの場合)も忘れずに追加します。 DOSのコマンドプロンプトで eruby --version と入力します。 c:\> eruby --version ruby 1.6.8 (2002-12-24) [i586-mswin32] eRuby version 0.1.3 などと反応すれば、OKです。 Apacheの設定は、前回の設定を良く確認して下さい。 ────────────────────────────────────── ■ まず eRuby で端末判定 ────────────────────────────────────── ・ 前回 環境変数を出力しましたが、その応用例でCGIの環境変数HTTP_USER_AGENTを 読んで端末判定してみましょう。 1) index.rhtml ファイル設置場所(例 d:\apache2\cgi-bin)に index.rhtml を作成 index.rhtml ↓ #!c:\program files\ruby\bin\eruby -Ks -C SHIFT_JIS <% require 'cgi' cgi = CGI.new if /MSIE/=~ENV['HTTP_USER_AGENT'] msg = 'あなたはIEをお使いですね' elsif /DoCoMo/=~ENV['HTTP_USER_AGENT'] msg = 'あなたはDoCoMoをお使いですね' elsif /Netscape/=~ENV['HTTP_USER_AGENT'] msg = 'あなたはNetscapeをお使いですね' else msg = 'あなたがお使いの端末は、珍しいです' end %> <%=msg%> この/../で囲まれた文字列(正規表現ですが)の中に、'J-PHONE'や'PDXGW'...をい ろいろ入れては、各種多様な端末を判定することができる訳です。 まあ いろいろありすぎて、どのレベルまでやるかは、ニーズ次第ですが。 2) IEから http://localhost/cgi-bin/index.rhtml をリクエスト あなたはIEをお使いですね と出力されたらOK 3) Netscapeから http://localhost/cgi-bin/index.rhtml をリクエスト あなたはNetscapeをお使いですね と出力されたらOK 4) もしRuby動作マシンがグローバルアドレスを保持し、外部からアクセス可能なら http://グローバルアドレス/cgi-bin/index.rhtml をリクエスト あなたはDoCoMoをお使いですね と出力されたらOK ────────────────────────────────────── ■ eRuby で端末振り分け ────────────────────────────────────── ・ 端末判定ができれば、あとは個別処理を作り込めば良いですし 端末別にファイル を分ければ、redirect で、そのファイルに飛ばしてやることももちろんできます。 例えば CGIクラスに以下のようなメソッドを追加して class CGI def script_absolute_uri host = server_name port = server_port host = host + ":#{port}" unless port == 80 protocol = server_protocol.split('/', 2)[0] protocol.downcase! protocol + '://' + host + script_name end def script_absolute_uri_base script_absolute_uri.gsub(/[^\/]*\z/, '') end def redirect(uri) if defined? ERuby then ERuby.noheader = true Kernel.print header('status' => 'REDIRECT', 'Location' => script_absolute_uri_base + uri) else out('status' => 'REDIRECT', 'Location' => script_absolute_uri_base + uri) { "" } end end end 処理の区別を判定後、CGIクラスのインスタンスcgiで、redirectメソッド を呼び出してやれば良いわけです。 : cgi.redirect(uri) : 変数 uri には、所定のuri 例えば'http://fsys.net/webtubo/imode/'や 'http://fsys.net/webtubo/ie/'とか'http://fsys.net/webtubo/nn/'とかの 文字列を指すようにしておきます。 --<補足解説>---------------------------------------------------------------- 文字列のマッチングには、正規表現が便利です。 正規表現と文字列がマッチするか調べるには、「=~」 というメソッドがあり 正規表現 =~ 文字列 という形で使います。 ・ Ruby正規表現ユーザガイド http://www.ruby-lang.org/ja/uguide/uguide05.html ・ Rubyチュートリアル正規表現 http://www.ruby-lang.org/ja/20020314.html --補足解説>--------------------------------------------------------------- 【プロフィール】 福井 修 ( FUKUI Osamu )o-fukui@po.iijnet.or.jp 福井システムリサーチ http://fsys.net/ 主幹。システム構築歴25年。 日本リヌクス協会、神戸商工会議所、情報処理学会 会員 関西ソーホ・デジタルコンテンツ事業協同組合員 デジタルハリウッド三宮校 Java講師