IronRuby on Silverlightっておいしいの?
⼋⽊照朗 / terurou株式会社コスモルート
DSTokai / FLOSS桜⼭ / DeLLa.JS / Python東海
はじめに。
資料作りに本気を出しすぎた。だいぶ削ったが・・・。
,. -‐'''''""¨¨¨ヽ (.___,,,... -ァァフ| 本題にはいる前に⾔っておくッ! |i i| }! }} //| |l、{ j} /,,ィ//| 『おれはLTの資料を作っていたと思ったら i|:!ヾ、_ノ/ u {:}//ヘ いつのまにか30分は話せる資料ができていた』 |リ u' } ,ノ _,!V,ハ | /´fト、_{ル{,ィ'eラ , タ人 な… 何を⾔ってるのか わからねーと思うが /' ヾ|宀| {´,)⌒`/ |<ヽトiゝ おれも何をしたのかわからなかった ,゙ / )ヽ iLレ u' | | ヾlトハ〉 |/_/ ハ !ニ⊇ '/:} V:::::ヽ 頭がどうにかなりそうだった… // 二二二7'T'' /u' __ /:::::::/`ヽ /'´r -―一ァ‐゙T´ '"´ /::::/-‐ \ ⾼橋メソッドとか「続きはWebで」だとか / // 广¨´ /' /:::::/´ ̄`ヽ ⌒ヽ そんなチャチなもんじゃあ 断じてねえ ノ ' / ノ:::::`ー-、___/:::::// ヽ }_/`丶 /:::::::::::::::::::::::::: ̄`ー-{:::... イ もっと恐ろしいものの⽚鱗を味わったぜ…
では、⾃⼰紹介します。
� 株式会社コスモルート勤務のRIA屋。� JavaScript, Silverlightが得意。
� 研究開発要員(社内ニート?)� だったはずが、現在はSilverlight案件で 東京に⾶ばされている。
お仕事
� DSTokaiっていう、東海地⽅の メタコミュニティの管理⼈やってます。� いまいち登録⼈数が増えてきてないので 登録お願いします><
個⼈的な活動
� Microsoft Tech Fielders Interview #23� IronPython + Silverlightで業務アプリ
� PHP逆引きレシピ(共著)� おかげさまで増刷!
個⼈的な活動(半分仕事とも)
本題に⼊るまえにちょっと予習しましょう。
簡単に⾔えば、Microsoft版のFlash。
Silverlight?
� Flashよりもレンダリングが速い。� .NET FrameworkのサブセットAPIが ⽤意されている。Threadも使⽤できる。� クロスプラットフォームだけど、実際は Windows XP以降+Intel Mac のみ、 Opera以外のモダンブラウザで動作する。
Silverlight?
.NET Framework上で動作するRuby。Microsoftが作ってます。
IronRuby?
� 2009/10時点の最新バージョンは 0.9.1� まだ標準ライブラリが完動しない。
� Silverlight上での動作もサポート。� DLR(Dynamic Language Runtime)と いうステキな機構を利⽤している。
IronRuby?
.NET Framework上で動作する動的⾔語(オレオレ⾔語)を作るための共通基盤。
DLR(Dynamic Language Runtime)?
� コンパイラフレームワークや対話シェル などの機能を提供。� IronRubyの他にIronPython, IronScheme などがDLRを利⽤している。� Silverlight上の動作もDLRのなかの⼈が よきに計らってくれる。
DLR(Dynamic Language Runtime)?
予習ができたのでやっと本題に⼊れます。
時間もないので結論から。IronRuby on Silverlightってどうなのよ?
正直、微妙。
なんで?
微妙な理由(1)
IronRubyが⾃体こなれてない。まだ仕事で使えるレベルではない。
Silverlight配布パッケージ(.xap)のサイズが⾮常に⼤きくなる。例)Hello Worldのファイルサイズ
� C#だと50KBぐらい� IronRubyだと1MB越え
微妙な理由(2)
.xapファイルが肥⼤化する原因はパッケージ内にIronRubyのエンジンを同梱しているため。
これは解決策がありそうなんだけど、まだ調査していない…。
IronRuby(DLR⾔語)からはDataBindingすることができない。けっこう痛い。※がんばればできなくもないが…(後述)
微妙な理由(3)
DataBindingとはViewとModelを連携させるための.NET Frameworkが⽤意している機能のひとつ。
� Modelのプロパティの値が変わると ⾃動でその値がViewに反映される。� Viewで⼊⼒した値が⾃動でModelに 反映される。� 要はView-Model間のGet/Setを ⾃動でやってくれるもの。
DataBindingでできること。
� View定義<TextBox x:Name="NameTextBox"
Value="{Binding Name}" />
� Viewに結合(バインディング)NameTextBox.DataContext = person;
DataBindingのコード例。かなり省略してます。
DataBindingの内部実装はリフレクションでオブジェクトを操作しているだけ。※厳密にはリフレクションじゃないんだけど イメージとして。
リフレクションなので.NET Framework上の静的型(クラス)が必要。
ここで問題となるのが、IronRuby上のオブジェクトと.NET Framework上のオブジェクトが等価ではないこと。
IronRuby上で、Nameというプロパティを持ったPersonクラスを定義したとしても、.NET FrameworkからはIRubyObjectというラップされたオブジェクトにしか⾒えない。
なので、IronRuby上のオブジェクトはそのままBindingすることができない。
別にDataBinding使わなくても単純に代⼊できればプログラムは動くんですが…。代⼊さえできれば…。
Silverlightのけっこうな数のコントロールはDataBindingが必須。
� DataGridの場合、セルを直接操作する ことができない。� バインドしているModelの⽅を操作する 必要がある。
どうしてもIronRubyからDataGridなどを使いたい場合
� C#などでバインドするクラスを⽤意し、 それをIronRubyから参照する� 実⾏時に動的に.NET Frameworkの クラスを⽣成する。� MSIL(.NET マシンコード)の知識が 必要になる。
めんどくさいですね。
散々DISったけど、いいところもありますよ。
いいところ(1)
コンパイルしなくてもいい。
C#なんかで開発する場合だと、細かい修正をして動作確認を繰り返す場合、「F5押す→コンパイル待ち」となるのでそこらへんはムカついてくる。
以上。
今⽇のまとめ。
DLR⾔語でSilverlightをやりたいなら、素直にIronPythonにしとけ。
特別な感情(愛など)がないなら、C#で開発したほうが無難ですよ?はまらないし。
I love DLR.
ご清聴ありがとうございました。
Top Related