第10回 2003/4/
復刻ついに第40弾!!3年ちょいまえ
━━━━━━━━━━━━━━━━━━━━━ 2003.05.09 Vol.737 ━━━━━ □■□ ■□■□■□■□■ 日刊「WEBのツボ!!」 □■□ http://www.soho-union.com/ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 配信部数 2869部 【○】本日のお題 「システムはオブジェクト指向、そしてRubyで」(#010) ━━ 福井修@Fsys 今回も、『オブジェクト指向スクリプト』デュエットに注目です。 「クライアントは Flash ActionScript、サーバサイドは Ruby」というのは、ほ んとうに美しい組み合わせですね。 ■ リッチクライアントもXML連携も Flash で決まり 前回の考察の後、ついつい Flash に注目する日々になっていますが、ますます リッチクライアントは Flash で決まりという確信が深まります。 そしてさらにFlashが良くできていると思う理由が、増強されました。それは、 ActionScriptがXML対応済みだという点です。私はシステム屋さんの視点でXMLに は、2000年の頃から勉強会に参加したり注目していましたが、XML界は、いろい ろ解決すべき課題は多く、思ったよりは歩みは遅々としているように見えます。 ActionScriptで提供されている基本オブジェクトのなかに データ連携の為の 「LoadVars オブジェクト」があります。(稲木さんの4.14/誰でもわかる Flash WEB 最前線(9)で詳細な解説がありました)そして「 XMLオブジェクト 」も燦然 と存在しているのです。 私は、まだ使っていませんが、解説を読むとなかなか良くできている模様です。 ・ XMLSocketチュートリアル http://faces.bascule.co.jp/tutorial/ 補足)ソケット接続とは何? http://hp.vector.co.jp/authors/VA003991/kouza/senior/kouza_socket.html また ソケット通信は、 Ruby のもっとも簡潔さが顕現する場面です。 ソケットのオープンと接続は、次の一行です。 TCPsocket.open(host, service) ファイルIOとほとんど同じ手間で、ソケット通信ができてしまいます。 標準入力とソケットの入力待ちも、次の一行です。 select(reads...) Rubyで XMLを操作するのには昨秋 本も出ています。 ・ Ruby de XML―Rubyで始めるXML http://www.amazon.co.jp/exec/obidos/ASIN/4274065006/249-0049646-6799548 著者の須藤さんは、確か学生さんです(@_@ ・ RubyでXML (NQXML) http://www.nslabs.jp/nqxml.rhtml ◎ B2Bの本命 XML 連携も オブジェクト指向スクリプト で! ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ Ruby/ActionScript連携例 いよいよ サーバサイドは Ruby で クライアントの Flash ActionScriptとの 連携です。 Ruby の CGI そのものについては、過去記事など参考に準備して下さい。 Ruby CGI入門その1 http://www.melma.com/mag/02/m00020302/a00000401.html Ruby CGI入門その2 http://www.melma.com/mag/02/m00020302/a00000427.html Ruby CGI入門その3 http://www.melma.com/mag/02/m00020302/a00000455.html Ruby CGI入門その4 http://www.melma.com/mag/02/m00020302/a00000481.html シンプルに入力枠とボタンと出力枠があるレイアウトを作成し、入力枠に数字 を入力し、ボタンをクリックすると、演算(掛ける2を実行)し結果を返す画 面を作成します。 【ステップ1 クライアントにFlash .swf 配置】 最初のリクエストでクライアントに Flash表示 クライアントブラウザ (IEなど) [今回の例ではsendAndLoad.swf] │ ↑ リクエスト レスポンス ↓ │ WebServer (Apacheなど) │ ↑ 静的html(swfがパブリッシュされた分) [今回の例ではsendAndLoad.html] 【ステップ2 クライアントがFlash上で入力して サーバのRubyが応答】 クライアントブラウザ (IEなど上の .swf (ここでActionScriptが動作)) │ ↑ リクエスト レスポンス ↓ │ WebServer (Apacheなど) │ ↑ CGI呼び出し CGI応答 ↓ │ サーバサイド Rubyスクリプト [今回の例では calccgidata.rb] 1.最初にswfを応答する静的.htmlLoadVarsオブジェクトを使ったデータの送受信 2.メールマガジンでのテキスト文での説明では、なかなか難しいのですが Flash にて 入力枠: 変数 dataIN と命名 出力枠: 変数 dispValue と命名 ボタン: 計算 要求を受け付ける を配置し、.fla を作成後、パブリッシュし .swf および .html を生成。 3.Flash画面上で 「計算」リクエストボタンのアクションに付けられた ActionScript on (release) { // Shift_JIS使用 System.usecodepage = true; // 送信用LoadVarsオブジェクト mySendVars = new LoadVars(); mySendVars.dataIN = dataIN; // 受信用LoadVarsオブジェクト myLoadVars = new LoadVars(); myLoadVars.onLoad = function(success) { dispValue = myLoadVars.dataOUT; } mySendVars.sendAndLoad("calccgidata.rb",myLoadVars,"POST"); } 4.入力に対して計算を行い結果を返すサーバサイドスクリプト#!c:\program files\ruby\bin\ruby -Ks require 'cgi' cgi = CGI.new # リクエスト入力 dataIN = cgi['dataIN'].to_s.to_i # 演算処理 dataOUT = dataIN * 2 # 応答出力 print "Content-type: text/plain\n\n" print "dataOUT=#{dataOUT}" ・ 画面全体がリロードされずに部分更新される。 ・ サーバサイドでは、html については、コーディングしなくて良い。 など LoadVarsオブジェクトは、ほんとにこれからの本命ですね。 なお 「ActionScript+CGIプログラミング」森巧尚著 ソフトバンク ISBN4-7973-2146-6 \2,600 を参考にさせて頂きました。ありがとうございました。 元 perl例 を Ruby に書き直しました。 次回は、本格的にDB連携例を予定します。ではお楽しみに。 【プロフィール】 福井 修 ( FUKUI Osamu )o-fukui@po.iijnet.or.jp 福井システムリサーチ http://fsys.net/ 主幹。システム構築歴25年。 日本リヌクス協会、神戸商工会議所、情報処理学会 会員 関西ソーホ・デジタルコンテンツ事業協同組合員 デジタルハリウッド三宮校 Java講師