連載:Reactive Extensions(Rx)入門

第1回 Reactive Extensionsの概要と利用方法

河合 宜文
2011/11/01

Page1 Page2

インストール方法

 RxをローカルPC上にインストールするには、Reactive Extensions(Rx)のページ・トップにある[Get it]リンクからインストーラをダウンロードしてセットアップを実行するか、もしくはNuGet経由でのアセンブリ参照が可能だ*3(これらのインストール手順は割愛)。Rxはインストーラ版、NuGet版ともに、Stable(安定)版とExperimental(実験)版の2つが用意されている。

 Stable版は今後もメソッド名に変更がないもののみであり、Experimental版はStable版と同様のメソッドのほかに、実験的なメソッドが追加されている。例えばC# 5.0の新機能であるawait構文への対応や、再帰的にたどるExpandメソッドなどはExperimental版にしか入っていない。Experimental版にしか入っていないメソッドには、ExperimentalAttribute(属性)が付加されているため、Visual Studio上でのメタデータの表示などでも判別することが可能だ。Experimental版の利用に際しては、それらExperimentalAttributeの付加されているメソッドは、将来的にはなくなったり、名前が変わったり、引数の順序が変わったりする可能性があることに留意しよう。

 なお、Experimental版には、現在、Developer Preview(開発者プレビュー)版である.NET Framework 4.5やWinRT(=Windows 8での新しいアプリケーション実行環境)に対応したアセンブリも含まれている。それらでは、C# 5.0に合わせて、特に非同期回りでポリシーに大きく変更が加えられており、まさに実験版といった内容になっている。

*3 詳細は「特集:.NET開発の新標準「NuGet」入門(前編)」を参照。

アセンブリの種類

 Rxのアセンブリは、機能により複数に分けられている。それらは下記のようになる。

アセンブリ名 NuGetパッケージ名*4 機能
System.Reactive Rx-Main 基本的なコアAPI群
System.Reactive.Windows.Forms Rx-WinForms WindowsフォームのためのControlSchedulerクラス*5と拡張メソッド
System.Reactive.Windows.Threading Rx-WPF
Rx-Silverlight
WPF/SilverlightのためのDispatcherSchedulerクラス*5と拡張メソッド
System.Reactive.Providers Rx-Providers IQbservableインターフェイス*6のためのクラス群
Microsoft.Reactive.Testing Rx-Testing ユニット・テストのためのモック、レコーダ、スケジューラなど
Rxのアセンブリ一覧
これらのアセンブリ・ファイルは、通常、「C:\Program Files\Microsoft Reactive Extensions SDK」(32bit版の場合。64bit版では、「C:\Program Files (x86)\Microsoft Reactive Extensions SDK」)の配下に格納されている。
*4 一覧に記載したパッケージ名はすべてStable版を指す。Experimental版の場合は「Rx_Experimental-Main」などのように、「_Experimental」がパッケージ名に付く。
*5 SchedulerはRxにおいて時間とスレッドをつかさどるクラス。ControlSchedulerクラスはWindowsフォーム・コントロールに対してBeginInvokeし、DispatcherSchedulerクラスはDispatcherに対してBeginInvokeする。
*6 「IQbservable」というインターフェイス名は、「Queryable Observable」から名付けられている。式ツリーからObservableオブジェクトを生成することができる。IObservableインターフェイスとIQbservableインターフェイスの関係は、IEnumerableインターフェイスに対するIQueryableインターフェイスの関係に相当する。

 コアAPIであるSystem.Reactiveアセンブリの参照は必須だが、それ以外は必要に応じて、WPFならばSystem.Reactive.Windows.Threadingアセンブリを参照する、などの形を取ればいい。

 Windows Phone 7 SDKに標準搭載されているRxのアセンブリは、上記とは異なり、下記のような分類になる。

アセンブリ名 機能
System.Observable IObservable<T>/IObserver<T>インターフェイス
Microsoft.Phone.Reactive コアAPI群とDispatcherSchedulerクラス
Windows Phone 7 SDKのアセンブリ一覧

 Windows Phone 7であっても、System.Reactiveなど、Data Developer Centerで配布されているアセンブリを参照することが可能だ。両者は配布された時期が異なり、Data Developer Center版の方が後であるため、APIにはいくつかの面で違いがある。その違いとは例えば、名前空間が異なること、クラス名が変更されたもの、メソッド引数が異なるもの、追加されたメソッド、もしくは廃止されたメソッドがあること、など。全体的にData Developer Center版の方が高機能かつ高性能になっている。

 どちらを選ぶかであるが、標準搭載であることや追加の.DLLファイルの同梱が不要であることを重視するのならMicrosoft.Phone.Reactiveアセンブリを、WPFやSilverlightとソース・コードの互換性を取りたい場合や、追加されたクラスやメソッドを利用したい場合にはData Developer Center版を選ぶといいだろう。

そのほかのアセンブリ

 JavaScript版はインストーラには含まれておらず、Rxのダウンロード・ページ最下部からZIPファイルで手に入る。ライブラリ本体である「rx.js」ファイルのほかに、jQueryやprototype.jsなど、各種ライブラリへのバインディング・ファイルも用意されている。また、C#から参照可能な.DLLファイルも同梱されているが、これはScript#*7用のファイルとなっている。

*7 C#からJavaScriptを生成するためのライブラリ

 もう1つ、Microsoft Download Centerから直接検索すると見つかるが、「Interactive Extensions」(以降、Ix)という実験的なライブラリが存在する(NuGetのパッケージ名は「Ix_Experimental-Main」「Ix_Experimental-Providers」「Ix_Experimental-Async」)。Ixは、RxのメソッドをEnumerableオブジェクトにバックポート(=逆移植)した拡張メソッド群となる。LINQ to Objectsの標準クエリ演算子にはないForEachメソッドやMaxByメソッドなど、標準では足りない機能を補完するものがそろっている。

名前空間の分類

 Rxでは拡張メソッドが中心となるため、適切な名前空間をusing/Imports文で宣言しないとメソッドが利用できない場合がある。下記に、名前空間と代表的な機能・クラスを挙げる。

名前空間 機能
System Subscribe時にラムダ式を直接渡せるようにするためのIObservableインターフェイスへの拡張メソッド
System.Reactive インターフェイスやUnit型(=無を表すオブジェクト)などの基本的なクラス
System.Reactive.Concurrency ISchedulerインターフェイスを実装したクラス
System.Reactive.Disposables さまざまな挙動を持つIDisposableインターフェイスを実装したクラス
System.Reactive.Joins Observable.And/Observable.Thenメソッドで利用するJoinパターンのためのクラス
System.Reactive.Linq Rxでは最も利用する名前空間。ObservableクラスとIObservableインターフェイスへの拡張メソッド
System.Reactive.Subjects ISubjectインターフェイス(=Rxネイティブのイベントを表現し、IObservableかつIObserverである)を実装したクラス
System.Reactive.Threading.Tasks Task(=非同期操作を表すオブジェクト)への変換と、Taskからの変換のための拡張メソッド
Rxの名前空間と、代表的な機能やクラス

 なお、Windows Phone 7同梱のMicrosoft.Phone.Reactiveアセンブリでは、名前空間はすべてMicrosoft.Phone.Reactiveのみに集約されている。

 今回はReactive Extensions(Rx)の概要とインストールまでを説明した。次回からは具体的な使い方を解説していく予定だ。end of article

 

 INDEX
  連載:Reactive Extensions(Rx)入門
  第1回 Reactive Extensionsの概要と利用方法
    1.Rxの歴史/LINQであるということ/イベントや非同期処理に適用する例
  2.Rxのインストール方法/アセンブリの種類/名前空間の分類

インデックス・ページヘ  「連載:Reactive Extensions(Rx)入門」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間