はじめに
SilverlightとIronRubyはMicrosoftが開発した次世代Webプラットフォーム技術です。Microsoftといえば.NET環境、というイメージが強いので普段Ruby on Railsで開発している方にとってはなじみが薄いかもしれません。
しかし、SilverlightとIronRubyを使った開発では.NET環境に依存せずに開発することも可能で、より多様なインターフェイスを持ったWebアプリケーション(RIA)を作りやすくなっています。
Ruby on Railsで開発したWebシステムにSilverlightの持つ機能を組み込むことで、より進んだWebアプリケーションを開発できるのではないかと期待しています。
今回は、SilverlightとIronRubyについて簡単に紹介を行ったあと、Ruby on Rails上にSilverlightの開発環境を構築し、簡単なアプリケーションの作成を行います。
SilverlightとIronRuby
Silverlightについて
Silverlightは2007年にリリースされたプラットフォームで、現時点での最新版は2009年7月20日にリリースされたバージョン3.0です。
Silverlightを非常にシンプルに言ってしまうと、Flashの対抗技術です。Silverlightアプリケーションを動かすためにはSilverlightを含むページにアクセスして、ブラウザにアドオンをインストールします。この手順はflashとほとんど同じです。また、提供される機能も複雑な図形やアニメーションなどFlashとの共通項は多いです。動画サポートなどSilverlightが得意としている機能もあるのですが、完成したアプリケーションの多くはFlashアプリケーションに近いといえるでしょう。
しかし、基盤となる技術やアプリケーションの開発スタイルという点ではかなり異なります。技術面で最も特徴的なのはSilverlightが多くの言語での開発を可能にしている点です。Flashでは基本的にActionScriptで開発を行うのに対して、SilverlightではMicrosoftが提供しているVisualBasicの他、今回紹介するRubyやPythonでの開発もサポートしています。
これはDynamic Language Runtime(DLR)技術を基盤として実現しています。以下の図のようにSilverlightアプリケーションをさまざまな言語で記述されたコードで動かすことができます。
また、SilverlightではUIに関する情報とUIを制御するコードが分離されています。
UIに関する情報はXAMLというXMLフォーマットで記述されます。
制御コードはSilverlightでは「マネージコード」と呼ばれ、先述したようにさまざまな言語で記述することが可能です。XAMLとマネージコードの関係はちょうどHTMLとJavaScriptと同じような関係と考えればわかりやすいでしょう。
以下の図のXAMLとHTMLがそれぞれインターフェイスを定義し、JavaScriptとマネージコードがそれぞれのインターフェイスを制御します。
また、SilverlightのマネージコードはHTMLの要素を直接操作したり、JavaScriptの関数を叩くような処理もできます。これは点線で表現しています。
gihyo.jp上にSilverlightを紹介する記事が掲載されているので、そちらも参考にしてください。
IronRubyについて
IronRubyはSilverlight上でRubyを動かすためのインタプリタです。一般的に配布されているRubyをそのままSilverlight上で動かすことはできないため、別のRuby処理系として開発されています。
類似コンセプトのプロダクトとして、JRubyをイメージするとわかりやすいかもしれません。
IronRubyはオープンソースで開発されているので、コードを参照することも可能です。
IronRubyを動かす
本稿ではIronRubyをSilverlight上で動かすことがメインになりますが、IronRubyはRubyの処理系なので単独で動かすこともできます。まず動作確認をしてみましょう。
インストールと動作確認
インストールは、以下の手順で実行してください。
- IronRubyのダウンロードページからダウンロードする
- zipファイルを展開(なるべくわかりやすいディレクトリがいいでしょう)
- コマンドプロンプトを開く
- [スタート]⇒[プログラム]⇒[アクセサリ]⇒[コマンドプロンプト]
- [スタート]⇒[ファイル名を指定して実行]⇒cmdと入力
- IronRubyを展開したディレクトリに移動
- IronRubyを実行
これでIronRubyの実行準備は完了です。
Rubyが実行できるか確認してみましょう。
IronRubyでSilverlightを動かす
次にSilverlight上でIronRubyを動かす実験をしてみましょう。
Chiron.exeを実行するとWebサーバとブラウザが立ち上がります。samplesのディレクトリをたどって、samples\***\ruby\index.htmlを開くとサンプルが表示されます。
Silverlightではアプリケーションの配布形式としてxapという形式を使います(flashでいうところのswfに相当します)。Chiron.exeはxapファイルを動的に生成してブラウザに表示しています。xapパッケージの中にはxaml、Rubyのマネージコード、IronRubyを処理するためのライブラリなどが含まれています。app以下でソースコードを見ることができるので、いろいろ値を変えてみて動作を確認することもできます。
おまけ:IronRubyでRuby on Railsを動かす
実はRuby on RailsをIronRuby上で動かすことも可能です。……が、これは今回の記事の趣旨からは外れるので省略します。
興味のある方は荒井省三氏の記事をご覧ください。
Ruby on Rails上にSilverlight開発環境を作る
さて、いよいよRuby on Rails上にSilverlightアプリケーションの開発環境を作ります。まずはRuby on Railsアプリケーションを用意してください。
プラットフォームは何でも構いません。普段Ruby on Railsを利用している環境をご利用ください。
SilverStarプラグイン
Ruby on RailsでSilverlightアプリケーションを作るには、拙作のプラグインを導入すると便利です。プラグインの導入には以下が必要です。
- git環境(githubにソースがあるので)
- rubyzip(gem install rubyzipでインストールできます)
これでSilverlightアプリケーションの開発準備はOKです。
ここで、プラグインが作成するファイル、開発者が作成する必要があるファイルについてそれぞれ簡単に説明します。詳しい使い方については後述します。
- 1. RAILS_ROOT/app/views/*.xaml.erb
- Silverlightのインターフェイスをxaml形式で記述します。ERBによってレンダリングされるので、通常のviewと同様にコードを埋め込んで実行することができます。
- 2. RAILS_ROOT/app/silverlight/*.rb
- Silverlightのマネージコードです。このコードはSilverlightのxapパッケージの一部としてブラウザ上で実行するため、ここに記述するRubyのコードはSilverlightライブラリを使って書きます。
- 3. RAILS_ROOT/public/resources/
- 画像や動画を置くためのディレクトリです。
- 4. RAILS_ROOT/lib/silverlight.rb
- プラグインが自動的に生成します。2. のマネージコードを記述するのに便利な関数が定義されています。
- 5. RAILS_ROOT/lib/*.rb
- 自分でライブラリを書きたい場合はここにファイルを作成すると、Silverlightの実行データを作成するときに同時に取り込まれます。
Hello! Silverlight
実際に動く単純なSilverlightアプリケーションを作ってみます。
controllerを定義
アプリケーションに必要なコントローラを定義しましょう。
$ ./script/generate controller top index
$ ./script/generate controller silverlight
Silverlightの配布ファイルとHTMLは別々になのでコントローラを分けています。次にapp/controller/silverlight_controller.rbを編集します。
render_silverlightでSilverlightのxamlおよびxapのレンダリングを実行します。:scriptは呼び出すマネージコードの指定です。上の例ではRAILS_ROOT/app/silverlight/test.rbをマネージコードとして利用します。
xamlを作成
次にxamlを作成します。xamlの記法についてはこちらのページをご覧ください。ここではルート要素を描画領域を表現するCanvasとして、TextBlockを一つだけ作ります。
ここで、render_silverlightが動作しているかどうか確認するために、http://[host]/silverlight/test/1.xamlにアクセスしてみてください。上記のxamlが表示される(orダウンロードできる)はずです。
マネージコードを確認
次にマネージコードであるRAILS_ROOT/app/silverlight/test.rbを見てみます。以下の雛形が用意されています。これはこのままでも動作するので今回はそのままにしておきます。
HTMLタグを埋め込む
最後に呼び出し側のHTMLにSilverlightを呼び出すタグを埋め込みます。先ほど作成したRAILS_ROOT/app/views/top/index.html.erbを下記に置き換えましょう。
これで作業完了です。すべての作業がRails上で完結しています。アクセスしてみましょう。
Silverlight読み込み画面の後、以下が表示されればOKです。
次回について
Silverlightを操作するための詳しいリファレンスはこちらにあります。
ここにはRubyのサンプルコードが無く、どのオブジェクトがどの名前空間に定義されているのか
探すのに多少時間がかかるかもしれません。
次回は.NET FrameworkのライブラリをRubyから利用してSilverlightアプリケーションに図形、アニメーションなどさまざまな機能を追加していきます。