連載:Reactive Extensions(Rx)入門 第1回 Reactive Extensionsの概要と利用方法 河合 宜文 |
|
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)の概要とインストールまでを説明した。次回からは具体的な使い方を解説していく予定だ。
INDEX | ||
連載:Reactive Extensions(Rx)入門 | ||
第1回 Reactive Extensionsの概要と利用方法 | ||
1.Rxの歴史/LINQであるということ/イベントや非同期処理に適用する例 | ||
2.Rxのインストール方法/アセンブリの種類/名前空間の分類 | ||
「連載:Reactive Extensions(Rx)入門」 |
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|