IronRuby(リンク)を使っている開発者を対象として、Ruby on Railsに似たエクスペリエンスでアプリケーションを書くという新プロジェクトが始まった。このプロジェクトはIronNailsと呼ばれ、開発者は今日から試すことができる。
IronNails(リンク)を開発したのはデベロッパ兼ライターのIvan Porto Carrero氏(リンク)で、Rubyのファンである。彼は他のデベロッパによる使用や、さらなる開発を促進するように、ソースを公開した(リンク)。彼の説明によるとIronNailsは、「IronRubyとWPF/Silverlight向けのRails似の開発」だそうだ。InfoQはPorto Carrero氏と情報交換し、IronNailsについて教えてもらう機会を得た。
Porto Carrero氏にとってIronNailsは何なのかを尋ねた。
IronNailsは、Railsスタイルの開発をWPFとSilverlightにもたらす、IronRubyに特化したgemになるはずです。つまり、ジェネレーター、コンソールをスタートさせるための類似スクリプト、プラグインフレームワークなどを備えることになります。同時に、レイアウト向けにBlendやIllustratorのような既存ツールを最大限活用できるようにもしたいと思っています。Blendは、GUIのデザインやGUIに双方向性を加えることを目的に、特にデザイナー向けに設計されたツールです。とは言っても、任意のXAMLファイルや、XAML DSLを使うだけでも、viewを作成できるようにもなるはずです。
理想としているのは、一連の動作を予め定義することにより、デザイナーがBlendなどのツールにそうした動作をドラッグ&ドロップできるようにすることです。動作には左クリックや右クリック、徘徊(入る/去る)、…などがあり得ます。作業を続ける開発者は次に、その動作を指定のコマンドに関連づけることができ、コマンドはコントローラアクションにリンクします。このすべてを付加プロパティ(依存性オブジェクト)を使ってWPFで実現できます。ただ、作業量が非常に多くなります :) 。
このプロジェクトは非常に興味深く、まだリリースされていないIronRubyと一緒に使うよう記述されているが、このフレームワークを作ることになった元々のきっかけを尋ねた。
現在私は、Manningから出版する書籍『IronRuby in Action』に取り組んでいるのですが、IronRubyとWPF を一緒に使える方法を探究しているうちに、このフレームワークが頭に浮かび、非常に優れたアイデアのように思えたのです。
Mac上でインタフェースビルダーとruby cocoaを使って少々実験したのですが、このRucolaプロジェクトが見せたフローが気に入りました。RucolaはIronNailsと同じことを目指していますが、cocoa向けです。cocoaによるviewの考え方はMicrosoftの考え方と異なるため、 IronNailsで使っている概念が異なる理由もそこからきています。しかし、Eloyがこの記事を読んだときのために申し上げておきますが、この方法を私に教えてくれたのはEloyです。e-editorやTextmate、その他お好みのあらゆるエディタを使って効率的に開発できるようになるはずです。Test::UnitやRSpecとうまく統合するはずで、RailsフレームワークがWeb開発で解決するのと同じ問題を解決することを目指しています。
Web開発ではMVCパターンが気に入っており、私のほとんどのプロジェクトと相性が良いと分かったので、WPFとSilverlight開発向けにMVCパターンを利用する方法を作りたかったのです。
どんな新しいツールやフレームワークでも、制作者が定義することが多いが、コミュニティはそのツールをまったく別物ととらえることがある。IronNailsで意図している利用法を定義すると、どうなるのか。
あなたがぴったり、とお考えになるどんなふうにでも、です。 :) けれども、デザインやレイアウトの場合は、私見ですが、ビジュアル要素の作業用には、そのために設計されたツールを使った方が賢明なので、その作業にベストのツールを使えるようにするべきだと考えます。目下の仕事がコーディングなら、エディタで十分の人も、もう少し重量級のIDEが必要な人もいるでしょう。最終的にはIronNails < >ができるようになっているはずで、それによりアプリケーションの骨組みが手に入ります。その後はコマンドラインのgenerateコマンドを使って、controllerやmodel、さらにはviewさえ生成できます。新規作成されたviewはデザインツール向けにcsprojファイルに追加されるので、デザイナーはコンテンツの追加を開始できます。すでに申し上げたように、デザイナーはいかなる要素の動作も定義することができ、開発者はそれを指定アクションにリダイレクトできます。さらにデザイナーは、好みのツールを使ってストーリーボードなどを作成できます。
フレームワークには予め決められたフォルダがあり、その中でスキンを探します。スキンにはアプリケーション用のテンプレートが入っています。viewにはdataboundコントロールと一般的なレイアウトが入っていますが、考え方はつまり、コンテンツをテンプレートとスキン・ファイル(リソースディクショナリ)に分けるということです。こうしておけば、コンテンツとレイアウトをすっきり分離でき、簡単に新しいスキンを作成したり、異なる方法でデータをビジュアル化したりできます。
IronNailsはIronRubyやWPF/Silverlightに機能を追加するツールだが、付加される価値についてはどうか。
WPFで人気を博しているらしい、Model - ViewModel - View - Controllerパターンを実装します。XAMLからコードをデカップルする、ベストプラクティスとみなされているコンセプトの上に構築しています。ViewModelがコマンドの提供からviewとcontroller間のリンクまでを担当してくれるので、事実上すべてのケースで、裏でコードをさわる必要はありません。
Rails開発者にお馴染みのエクスペリエンスを提供することにより、このすべてを行います。メタプログラミングを使ってview modelを生成し、controllerで定めるオブジェクトにバインドできるようにします。自分でview modelを定義して、カスタマイズした動作を追加できますが、必ずそうしなければならない、というわけではありません。従うべきネーミング規定はありますが、規定に従えばうまく機能するはずです。非常に検査しやすい開発方法を可能にし、人気の高いRubyの検査フレームワークと緊密に統合します。
MicrosoftによるとIronRubyのリリースは2009年第1四半期になるそうだ。終わらせなければならない作業がたくさん残っているため、IronNailsの完成はもう少し待たなければならない。将来のIronNailsについてPorto Carrero氏の考えは次のとおりである。:
IronRubyに欠けている機能があるため、現時点では自分の望むところまでIronNailsを持っていくことができません。IronRubyに実装される機能が増えるにつれて、C#からさらに多くのものをRubyのコードベースへ移行できます。今のところXAMLで純粋なDLRオブジェクトにはバインドできませんが、将来は可能になるでしょう。コードベースには現在、ハックとワークアラウンドが多少施されていますが、こうしたものに対するサポートがIronRubyに追加されれば、なくなるでしょう。
先に申し上げたとおり、IronNailsはIronRubyに関する本のために書いたものですが、私の手を離れてもいいのではないかと思っています。コミュニティが興味を持てば、このプロジェクトは進化を続け、言語やフレームワークと歩調を合わせて進歩していくでしょう。
オープンソース・プロジェクトなので、外部の開発者が手を差し伸べる余地があり、Porto Carrero氏も助けが欲しいと言っている。
IronNailsはGitHubでホストしています(リンク)。GitHub のフォークしてプッシュするシステムを介してパッチを提出するだけで、プロジェクトに参加できます。あるいはGitHubのユーザ名を電子メール(リンク)で送っていただければ、プロジェクトに追加します。Lighthouseのプロジェクト(リンク) もあり、そちらではチケットを提出可能です。コードやドキュメンテーション、テストなど、様々な手助けをいただきたいと思っています。
本の執筆が終わるまで、プロジェクトではコード書きに積極参加できないと思います。ひと月に割ける時間はわずか2時間ほどと少ないので、もう少しプロジェクトに時間を割けるようになるまで、プロジェクトを生かしておいてもらえるよう、コミュニティの力を頼りにしています。
IronNailsについての詳細はPorto Carrero氏のブログ(リンク)でみることができ、また、Githubからのダウンロード(リンク)も可能である。
原文はこちらです: