Spring.NET フレームワーク の新バージョンである version 1.3 が先頃リリースされた。InfoQ ではプロジェクトの創設者でリーダでもある Mark Pollack 氏に,同プロジェクトの詳細と今回導入された新機能,そして新プロジェクト Spring Integration.NET の詳細などを聞いた。
Pollack 氏によれば,今回のバージョンには中心となる4つの新機能がある。
- Microsoft Test Framework との統合 - 既存の NUnit サポートと同じように,Microsoft Test フレームワーク内のテストクラスに対しても依存性注入(dependency injection) とトランザクション管理が可能になった。
- TIBCO EMS のサポート - 通常の C# オブジェクト (Plain Old C# Object / POCO) をベースとした TIBCO EMS メッセージング プログラミングモデルを提供して,生産性を向上するためのクラスがいくつか追加された - これは Spring Java における JMS サポートに相当し,既存の ActiveMQ や MSMQ に対するサポートを補完するものだ。
- NVelocity サポートの拡張 - NVelocity エンジンの設定方法が大幅に簡略化された。
- Visual Studio.NET ソリューションテンプレート - クラスライブラリ,ADO.NET アプリケーションライブラリ,NHibernate アプリケーションライブラリ,Spring ベースのWeb アプリケーションへの Spring.NET サポートが,VS.NET 2008 を対象として提供される。同時に ReSharper タイプ補完やテンプレートのサポートも提供される。
完成資料 と 包括的な変更ログ も入手可能である。なお Spring 1.3 リリースは暫定的な更新ではあるが,内部 API を使用した緊密な処理を行っている場合には,非互換的な変更 がいくつか存在することにも注意が必要だ。
VS.NET ソリューションテンプレートに関して,Pollack 氏は詳細を次のように説明している。テンプレートはそれぞれ,"main" ビジネスロジックプロジェクトとテストプロジェクト,その他複数のプロジェクトによって構成されている。先にあげたソリューションに対して,Spring.NET を使用するための適切なコンフィギュレーションの雛形が提供される。さらに ReShaper テンプレートも提供されている。これは数多くの共通的なコード作成と,bean タイプ補完や bean 定義へのプロパティ追加などのコンフィギュレーション作業を容易にするものだ。
Pollack 氏は,他の .NET フレームワークと Spring.NET との比較についても言及している。
- 依存性注入 (Dependency Injection / DI) コンテナ以上のものであること - Spring.NET は Castle などの DI コンテナとよく比較される。しかし Spring.NET は,データアクセス,Web 開発,統合化テストなどアプリケーション全体に適応できる広範囲の API を備えた,真のアプリケーションフレームワークである。
- ASP.NET フレームワーク - Spring.NET の ASP.NET フレームワークは MVC ベースの ASP.NET ではなく,結果的に生産性を向上させるものだ - DI や Spring.NET を見つけ出した新規ユーザの大半が,ASP.NET に関する検索結果からそこにたどり着いている。
- メッセージ指向ミドルウェアの統合 - Apache ActiveMQ や TIBCO EMS,MSMQ などとの統合により低レベルのスレッド安全性の問題が解決されていること,POCO ベースのプログラムモデルが採用されていること。この2つによって,フレームワークを使用する開発作業の負荷が軽減されている。
- アスペクト指向プログラミング (Aspect-Oriented Programming / AOP) - Spring.NET は,pointcuts や advice といったコンセプトを含む,広範な AOP フレームワーク を提供している。また ロギング,例外翻訳(exception translation),パラメータ検査(parameter validation),キャッシング,オペレーションの自動リトライ などの 実践的な advice 実装 も提供されている。
- ADO.NET ライブラリ - ADO.NET ヘルパライブラリ の提供するテンプレートベースのプログラムモデルにより,大量の定型的なコードの作成が不要になる。これによって ADO.NET データソースに関する作業が抽象化,単純化される。
- 式言語 (Expression Language) - オブジェクトグラフのクエリと操作を行うために,ランタイムにおいて使用可能な 式言語 が提供されている。
- 総合テスト (Integration Testing) - データアクセスなどの機能に関する 総合テスト をサポートする。
- モジュール性 - 各機能が それぞれの DLL に分割されている ため,開発に必要なものを選択して使用することが可能である。フレームワーク全体の使用を強要されることはない。
- 企業のサポート - Spring.NET は VMWare によって先日買収された,SpringSource がサポートしている。大手企業によってサポートされるということは,企業が Spring.NET を採用する戦略的決定を行う上でのひとつのファクタとなり得る。
- コードベースのコンテナコンフィギュレーション (予定) - Castle では XML ベースと "タイプ・マッピング" API の2形式のコンフィギュレーションがサポートされているが,現在の Spring.NET で使用可能なのは XML ベースのみである。Spring.NET の次期リリースでは Spring JavaConfig (Spring 3.0 で導入された) と同じ形式のコードベースコンフィギュレーションが導入される予定である。
数多くの Spring.NET ドキュメント,資料の充実したさまざまな サンプルアプリケーション もある。
Spring.NET の将来プランに関する質問に対して,Pollack 氏は次のように答えている。
将来的なプランとして Spring.NET 2.0 の開発と,ユーザからのフィードバックに基づいてその他の部分を修正するためのブランチアウトの2つを考えています。Kenneth Xu 氏のおかげで .NET 用の Spring スレッディング処理は大きく進歩しました。カスタムスレッドプール,PriorityQueue,IFuture<T> など,Java の 'util.concurrent.' パッケージの機能を実現する汎用スレッディングユーティリティが用意されています。 また 'util.concurrent' 以外では,.NET 2.0 の Contributors で使用可能な .NET 4.0 Parallel クラスが,Spring Security の .NET バージョンでも動作します。さらに Andreas Dohring 氏による Spring Integration for .NET も順調に進んでいます。
私たちにとって最も重要な Spring.NET 2.0 の機能のひとつは,DI コンテナのコードベース・コンフィギュレーションのオプションです。また,より一般的なテーマとしては,近々リリースされる Spring Java 3.0 のコア DI コンテナコードとの整合性確保があります。これは DIを属性ベースで設定する方法を提供するということの他に,現状ではおもに Spring 自体の内部で使用されている generics を Spring API においても活用する,という意味もあります。他の分野では,最低限でも DI に関しては ASP.NET MVC と統合すること,Spring.NET ベースのアプリケーションのモニタと操作管理を行う能力を充実すること,などがあります。Visual Studio 内へのツールとしての組み込みの要望もたくさん受けています。どのようなものになるかは,Spring Java の Eclipse プラグインを見て頂ければよいでしょう。ただし機能の提供に関して,現時点で約束はできません。その他 Spring.NET と Spring Java の相互運用性をより簡単に実現するための方法として,メッセージング,Webサービス,REST などの分散技術などにも注目しています。
マイルストーンとリリース候補は 2010年第1ないし第2四半期,最終リリースはその直後に予定されている。Spring.NET と Spring Java にはコードベースの構造に類似性があるため,新しい機能の移植やリファクタリングは (時間はかかるものの) 容易である。Spring Integration.NET の初期リリースと規模についても話を聞いた。
私たちが注目しているのは,Spring Java プロジェクトが対象とするのと同じ中心的分野,すなわち,有名な エンタープライズ統合パターン (Enterprise Integration Patterns) をサポートするプログラミングモデルの提供なのです。Spring ベースのアプリケーション内に組み込まれたメッセージバスとして動作し,アダプタを通じて外部システムと統合されるものを提供します。Spring にも期待されているように,POCO ベースのプログラミングモデルを用意します。メンテナンス,テスト可能なコードを作成するために,この点は重要です。
最初のリリースで提供予定のアダプタは,ファイル,メッセージング,Eメール,Webサービスなどで,現在の Spring Integration 1.0.3 リリースのものと同じです。しかし私たちは,Windows イベントログや WCF P2P チャネルなど,より .NET 特有のアダプタも提供する予定でいます。最初のリリースが完了したら,lambda 式や拡張メソッド,.NET 4.0 で追加される機能など,.NET 特有のフレームワーク機能を追加するつもりです。
さらに詳細を知りたいのであれば,InfoQ が最近行った Mark Pollack 氏とのインタビュー を見て欲しい。Spring.NET 1.3 と 2.0 に関して詳しく論じられている。