Silverline を試してみました

昨年のRails Conference 2008 でデモが行われた Ruby on Rails のプラグインである Silverline を試してみました。このプラグインは、RoR 上で Silverlight アプリを生成するためのものです。Web上でのデモも確認することができます。この環境を構築するの使用したのは、以下のものになります。

  1. One Click Ruby Installer  1.8.6-27 RC2
  2. Ruby on Rails 2.0.2
    gem install rails --version 2.0.2 --include-dependencyでインストール
  3. Silverline
  4. Silverline-Demos
  5. sqlite3-ruby 1.2.4
  6. SQLite 3.6.11

Ruby on Rails をgemでインストールした時に問題になったのが、proxy設定です。これには、「--http-proxy https://<サーバのIPアドレス>:<ポート名>」オプションを指定することで対応しました。必要なモジュールのインストールが完了したという前提で、Silverline-demosに含まれるサンプルを動作させた方法を以下に記述します。

  1. 新規のRailsアプリケーションを作成する
    コマンド「rails new-silverline」を使って新規のrailsアプリケーションを作成します。

  2. 以下はrailsの環境設定です

     config\database.ymlファイル
    development:
      adapter: sqlite3
      encoding: utf-8     # 追加
      database: db/development.sqlite3
      timeout: 5000
    
     config\environment.rbファイル
    
    Rails::Initializer.run do |config|
      #
      :略
      :
      # 以下を追加
      config.action_controller.default_charset='UTF-8'
    end
    
  3. Silverlineプラグインのインストール
    gitを使ってcloneしたsilverlineフォルダを vendor\pluginsフォルダへコピーします。

  4. app\controlers\client_controller.rbを準備
    silverline-demos\app\controlers\client_controller.rbをコピーします。この理由は、silverlineプラグインがclient_controller.rbをチェックするためです。

  5. app\views\layouts\client.html.erbを準備
    silverline-demos\app\views\layouts\client.html.erb をコピーします。これが、先程のコントローラーに対するビューになります。
    この時点で「ruby script/server」でサーバーを起動して、https://localhost:3000/clientへ アクセスすることで動作を確認することができます。「Show Time」をクリックすることで、時刻を取得した新しいページがレンダリングされると思います。

  6. 私の場合は、public\silverline.html(demosで提供されるindex.html)とpublic\clientaccesspolicy.xmlを準備しました。
    両方ともsilverline-demos\publicにあります。

ここまでで、本当に基本的なSilverlightアプリケーションが動作しました。UIとしては、HTMLでコードとしてはIronRubyというものです。この動きの延長として、Read Evalute Print Loop(略してrepl、Web上のコンソール)のサンプルとして「TryRuby」があります。このTryRuby環境の作り方を以下を記述します。

  1. 必要なファイルをsilverline-demosからコピーします。
    app\controllers\tryruby_controller.rb
    app\helpers\tryruby_helper.rb
    app\views\layouts\tryruby.html.erb
    app\views\tryruby(_evalute.rb、index.html.erb)
    app\public\images(loading2.gif、loading.net.gif)
    app\public\javascripts(scrolling.js)
    app\public\stylesheets(error.css)

  2. index.html.erbの11行目を以下のように修正します
    シングルクオーテーションが抜けているためです

     <a href="javascript:void(0)" mce_href="javascript:void(0)" id="next" onclick="alert('next')">
    
  3.  config\route.rb に JSON のマップを追加します
    map.connect "tryruby/instructions.:format",
     :controller => 'tryruby', :action => 'instructions'
    
    これで https://localhost:3000/tryrubyへアクセスすることで動作を確認
    
  4.  することができます。
    
 このTryRubyサンプルは、

起動時にSilverlightからRoRのtryruby\instructionsへリクエストします。そして、返ってきたJSON形式のデータを使って、操作のガイドを表示するようになっています。

silverline-demos自体を動作させるためには、以下の2つの操作が必要になります。

  1. 「raike db:migrate」コマンドでsqlliteの環境を作成する。
    これは、postsというサンプルがDBを使用するためです。
  2. vender\plugins\silverlineフォルダへ、silverlineプラグインの内容をコピーする。

他にも動作のおかしな所もありますが、基本的な動作を以上の操作で確認することができます。これが、Ruby on Railsに対するプラグインであるsilverlineの動作になります。

silverlineが行っている動作は、2つあります。

  1. サーバー側で必要なコンテンツを生成すると同時にclient.xapを生成して、コンテンツをブラウザに返す
  2. クライアント側のlclient.xapに含まれたIronRubyスクリプトを使って、XAMLやJSONへのリクエストをサーバーへ投げること。

これらの動きを行うために、コントローラーやビュー(サーバー側とSilverlight側)を提供しているのがSilverlineとなります。