アンケートご協力のお願いgihyo.jpでは,2010年度に向けて豪華プレゼントが当たる読者属性アンケートを実施しております。ご協力ください。

gihyo.jp » DEVELOPER STAGE » 連載 » Ruby Freaks Lounge » 第18回 Ruby on Railsで開発するSilverlightアプリケーション

Ruby Freaks Lounge

第18回 Ruby on Railsで開発するSilverlightアプリケーション

前回のおさらい

前回記事はSilverlight,IronRubyの基本的な概念の説明と開発環境の紹介,動作確認までを行いました。今回は前回記事の最後で作成したHello Silverlightアプリケーションに簡単な修正を行い,基本的な機能を紹介していきます。

箇条書きで簡単にセットアップの手順をおさらいします。

  1. Ruby/Rails環境を準備(要rubyzipモジュール)
  2. SilverStarプラグインをインストール
  3. ./script/generate silverlight [name]を実行
  4. viewにインターフェイス要素を記述(拡張子xaml)
  5. controllerでrender_silverlightを行う
  6. app/silverlight/xxxx.rbにrubyでマネージコード(制御コード)を記述
  7. http://[host]/[path].xapにアクセスしてみる

準備

前回示したサンプルではrubyのマネージコードにバグがあっても真っ白になるだけです。この後の内容を読者の方に試していただくにあたって,デバッグの必要があります。Silverlightの呼び出し元になるHTMLを以下のように変更してください。

<div id='errorLocation'></div>
<object data="data:application/x-silverlight," type="application/x-silverlight-2" width="600px" height="400px">
  <param name="initParams" value="debug=true, reportErrors=errorLocation" />
  <param name="source" value="/silverlight/test/1.xap"/>
</object>

これで,もしrubyのマネージコードやXAMLの文法エラーがあった場合,errorLocationで示されたHTML要素にエラーメッセージが表示されます。

Silverlightアプリを作ってみる

この節ではSilverlightアプリの開発における基本的な要素について解説を行い,より詳しく知りたい方のためにリファレンスへのリンクを紹介します。

インターフェイス要素へのアクセス

Silverlightのインターフェイス要素には領域(Canvas),矩形(Rectangle),楕円(Elipse),画像(Image)などさまざまな要素があります。

まずは最も基本的な以下の処理を行います。

  1. UI要素に名前をつける
  2. 1.でつけた名前を使ってUI要素を呼び出す
  3. UI要素の属性を変更する

UI要素に名前をつけるには,x:Nameという属性を設定する必要があります。

<Canvas
    x:Class="System.Windows.Controls.Canvas"
    xmlns="http://schemas.microsoft.com/client/2007"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Width="600" Height="460"
    Background="White"
    x:Name="root">
  <TextBlock x:Name="hello" Text="Hello! Silverlight!!" FontSize="64" />
</Canvas>

そして,マネージコードを以下のように変更します。

require "lib/silverlight"
require "mscorlib"

class App < SilverlightApplication
  use_xaml(:type => Canvas, :name => "app")

  def initialize
    hello.text = "Hello! IronRuby!!"
  end
end

$app = App.new

これで最初に表示される文字が「Hello! IronRuby!!」に変わります。

図1 

図1 

要素名をそのままメソッドにしてアクセスすることが可能です(これはプラグインの動作です)。hello.text="..."はhelloという名前が設定された要素のtext属性を置き換えています。Silverlight+IronRubyの環境ではhello.textはhello.Textとしても同じです。また,属性の指定ではobject.method_nameとobject.MethodNameは等価です。この記事ではobject.method_nameの形式を使います(※1)。

※1
XAMLでは「Text」及び「PropertyName」の記述しか許されません。
require "lib/silverlight"
require "mscorlib"

class App < SilverlightApplication
  use_xaml(:type => Canvas, :name => "app")

  def initialize
    name = "he" + "llo"
    _(name).text = "Hello! IronRuby!!"
  end
end

$app = App.new

上記は変数名を名前としてアクセスしています。これは最初の例と同じ挙動になります。

Silverlightで頻繁に使われる要素とリファレンスへのリンクをここで紹介します。リファレンスにあるサンプルコードはVB及びC#のものしかありません。しかし,ライブラリは共通ですので,クラス名,プロパティ名,メソッド名は同じものが使えます。適宜読み替えて活用してください。

イベントハンドラ

クリック,ドラッグ&ドロップ,キーボードなどのユーザ入力を処理するためには イベントハンドラを利用します。イベントハンドラはマネージコードのどこでも設定することができます。

require "lib/silverlight"
require "mscorlib"

class App < SilverlightApplication
  use_xaml(:type => Canvas, :name => "app")

  def initialize
    hello.mouse_left_button_down do |s, e|
      s.text = "Click! Silverlight!"
    end

    root.key_down do |s, e|
      hello.text = "Key pushed!" if e.Key = Input::Key.enter
    end
  end
end

$app = App.new

上記の太字部分がハンドラの記述です。これを実行すると,クリックと[enter]キーの入力で文字が変化します。

イベントハンドラに渡される2つの引数s, eのsはイベントを発生させたオブジェクト,eはイベントの引数(クリックした座標やキーの種類)です。eの内容はイベントの種類によって変わります。

入力に関するクラス(KeyEventArgsクラス,Key列挙体など)は,System.Windows.Input名前空間に含まれています。

著者プロフィール

今村庄一(いまむらしょういち)

株式会社ドリコム所属。メイン業務は自社Webサービスの開発だが,プログラミングコンテストの運営,全文検索エンジンの研究やSilverlightでの開発などいろいろ手を出している。

コメント

コメントの記入

パスサポ

多数の情報処理技術者試験対策書籍の発行実績を誇る技術評論社がお届けする,資格試験合格サイト「めざせ! 情報処理試験 パスサポ」が開設されました。

ピックアップ

サクセスストーリーに続く,快適サーバー運用管理のヒント!

データの増大,煩雑な管理,システムダウン,セキュリティなど,迫りくる課題からシステム管理者の負担を軽くするポイントを解説します。

gihyo.jp インフラエンジニア情報局

ネットワークやITにかかわるあらゆる業種で必要とされるインフラエンジニアに向けた技術情報や心構え,その魅力について多角的に紹介。

テストエンジニア ステーション

いま,ITに関わるあらゆる開発業務で注目されつつあるテスト系エンジニアをターゲットにしたコンテンツサイトを展開します。

一行クイックアンケート

gihyo.jpで取り上げてほしいネタは?

※検索はページ右上の検索ボックスをご利用ください。

その他の連載

キーパーソンが見るWeb業界

本連載はWeb Site Expert/gihyo.jpとの連動企画です。阿部淳也, 長谷川敦士, 森田雄のお三方による,Web業界をテーマにした座談会です。

きたみりゅうじの聞かせて珍プレー

ソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。みなさんからの投稿もお待ちしてます!

ActionScript 3.0で始めるオブジェクト指向スクリプティング

野中文雄氏が,簡単なスクリプトは書いたことがあるという初級者を対象に,ActionScript 3.0の基本からクラス定義までを解説します。

まだ間に合う「ITパスポート」受験対策 原山先生の短期合格塾

この連載では,4月18日のITパスポート試験の受験に向けて,短い期間で効率良く受験対策を行う方法や,確実に得点するための裏ワザなどを伝授していきます。

Ubuntu Weekly Recipe

Ubuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。

C/C++プログラマのためのDTrace入門

よくカーネルのチューニングや解析で活用されるDTraceですが,実はユーザプログラムの開発においても非常に有用です。連載ではC/C++プログラマやテストに関わる方向けにDTraceの使い方を解説します。

Blogopolisから学ぶ計算幾何

計算幾何学は,図形に関するアルゴリズムを研究するコンピュータサイエンスの一分野です。本連載では,ビジュアルブログ検索エンジン「Blogopolis」で採用されている計算幾何のアプローチを例に取り上げながら,計算幾何の初歩を実践的に学習します。

検索エンジンはいかにして動くのか?

本連載では, 今や誰もが利用している検索エンジンの中身を,全体の仕組みやデータ構造,アルゴリズムから分散インデックスまで,最近の研究事例も交えて紹介します。

連載一覧

gihyo.jp

  • DEVELOPER STAGE
  • ADMINISTRATOR STAGE
  • WEB+DESIGN STAGE
  • LIFESTYLE STAGE
  • SCIENCE STAGE
  • NEWS & REPORT

書籍案内

  • 新刊書籍
  • 書籍ジャンル一覧
  • 書籍シリーズ一覧
  • 新刊ピックアップ
  • ロングセラー
  • 電脳会議

定期刊行物一覧

  • Software Design
  • WEB+DB PRESS
  • Web Site Expert
  • 組込みプレス