俺はこれでRxSwiftを学んだ！リファレンス集

今年、iOS界隈に一気に普及したRxSwift。

4月に[RxSwift勉強会 ＠ Sansan - connpass](https://connpass.com/event/27933/)
8月に[第2回RxSwift勉強会 ＠ Sansan - connpass](https://connpass.com/event/35014/)
11月に[第3回RxSwift勉強会 ＠ Sansan - connpass](https://connpass.com/event/41478/)

とハイペースで勉強会が開かれ、スライドもQiita記事も増えていきました。
Rx入門のための `Hot Observable` な記事は、なんかもうこれ以上増えても…という感じですし、いっそ `Cold Observable` に徹する記事があってもいいんじゃないのかなということで、こちら、これまで自分の理解の為になった資料を纏めた、リンク集となります。

# Rx **とは**

## 公式ドキュメント

何はなくとも、公式ドキュメント。

RxSwift/Why.md at master · ReactiveX/RxSwift
https://github.com/ReactiveX/RxSwift/blob/master/Documentation/Why.md

RxSwift/Examples.md at master · ReactiveX/RxSwift
https://github.com/ReactiveX/RxSwift/blob/master/Documentation/Examples.md

RxSwift/GettingStarted.md at master · ReactiveX/RxSwift
https://github.com/ReactiveX/RxSwift/blob/master/Documentation/GettingStarted.md

## RxSwift/RxExample at master · ReactiveX/RxSwift
https://github.com/ReactiveX/RxSwift/tree/master/RxExample

RxのOperatorを実際に組み合わせるってどういうことなのか、実例を知りたいなら、それも公式のExampleで良いんじゃないでしょうか。
副読用にこちらのスライドも添えて。

RxExampleから学ぶ！RxSwift // Speaker Deck
https://speakerdeck.com/kazu0620/rxexamplekaraxue-bu-rxswift

## RxSwiftをプロダクトに導入してみた話 // Speaker Deck
https://speakerdeck.com/kazu0620/rxswiftwopurodakutonidao-ru-sitemitahua

kazu0620さんによる、記念すべきRxSwift勉強会第1回の資料。見事な概論。

>Rxは実は枯れた技術でもある
>Rx全体の蓄積された知見を使える

という指摘には目から鱗。

## 関数型プログラマのための Rx 入門（前編） - Okapies' Archive
http://okapies.hateblo.jp/entry/2015/03/04/031148

というわけで、RxSwiftではないけれどRxの記事。

>あるフレームワークを関数型のパラダイムに則って作るメリットは何だろうか？ 一つ挙げるとすれば、それは少数のシンプルな概念の組み合わせで多数の具体例を作り出せることだと思う。
>関数型プログラミングには、組み立て可能性 (composability) の高いビルディング・ブロックの作り方について多くの知見が蓄積されている。

Rx ( as `Observable + LINQ + Scheduler` )を構成する概念をひとつひとつ分解して説明してくれています。おかげでずいぶんと概念が整理されました。

# Rx **を** どう書くか

## RxMarbles: Interactive diagrams of Rx Observables

http://rxmarbles.com/

OperatorがStreamにどのような影響を与えるのかを示す、マーブルダイアグラム。その動作確認の助けになるのがこちら。
Streamに並んだマーブルを動かして、Operatorの働きをインタラクティブに理解できます。

![image](https://qiita-image-store.s3.amazonaws.com/0/34405/de33e74b-8950-ddd3-6c87-023f6da670fb.png)

また、マーブルダイアグラム力を高めたいなら、nakailandさんによる、こんなクイズアプリもあります。👇

Introduction to RxMarbleQuiz / nakailand さん - ニコナレ
http://niconare.nicovideo.jp/embed_works/kn1364

## [RxSwift] shareReplayをちゃんと書いてお行儀良くストリームを購読しよう - Qiita

http://qiita.com/kazu0620/items/bde4a65e82a10bd33f88

これもまたkazu0620さんの記事。
Hotって何？　Coldって何？　Hot変換をしないと何が不味いの？　について基礎から。

## RxSwiftのobserveOnとsubscribeOnを理解する // Speaker Deck

https://speakerdeck.com/bricklife/rxswiftfalseobserveontosubscribeonwoli-jie-suru

Shinichiro Obaさんのスライド。
RxSwiftの実装詳細に潜って、 `observeOn` と `subscribeOn` が何をしているかを解き明かします。

# Rx **で** どう書くか

## RxSwift in Practice // Speaker Deck

https://speakerdeck.com/mnat44/rxswift-in-practice

Motoki Naritaさんのスライド。
「手続き型の実装手順と、RxのStreamを前提にした実装手順の違い」
「そもそもRxでやる必要あんの？」
というところから切り込んでるのが良い資料。

## RxSwift + MVVM // Speaker Deck
https://speakerdeck.com/ishkawa/rxswift-plus-mvvm

ishkawaさんのスライド。よくFRP周りの勉強会で参照される印象のある資料。

>・状態の変更は画面間で共有されてほしい
>・グローバルなものはグローバルで表そう

という話。
Model層は、View層より長く生存すべきだものなあ、とひたすら納得。

## MVVMのModelにまつわる誤解 - the sea of fertility
http://ugaya40.hateblo.jp/entry/model-mistake

この記事はRxとは直接は関係ないんですけど、RxといえばObserverパターンで、となれば設計はMVVMになりますね。
となれば、この記事の

>MVVMにおいてはViewModel同士がお互いを操作する必要なんて基本的にはありません。所有関係はあることはありますがそもそも**ViewModelはModelの影**なのです。そしてまたViewはViewModelの影でもあります。

という言葉を胸の内で100回唱えることが、きっとStreamのカオス化を防いでくれることでしょう。


## rx-ja-night-2016-1 // Speaker Deck
https://speakerdeck.com/yuyakaido/rx-ja-night-2016-1

Yuya Kaidoさんのスライド。TestSubscriverの紹介。

>Observableのテスト
>書いてますか？

書かなきゃ :confounded: 

## RxSwiftライブラリの作り方 〜Observer/Observable編〜 - Qiita
http://qiita.com/gomi_ningen/items/dc08a8a5514be9aa0eb2

gomi_ningenさんの記事。
ライブラリを作りたい人にお勧め…なだけではなく、Observer/Observableの仕組みを紐解き、背後の設計思想を理解するための資料でもあります。

>　歴史的経緯はともあれ、Rx の基本的なインターフェースである Observable, Observer については以下のように説明できると思います（自分は歴史的経緯は知らないので実際の流れは違うかもしれません）

>- push 型 Observer パターンが基本的な出発点
- 値に next, error, completed という文脈をつけたものが push の対象物になっているのが特徴的
- 購読解除の仕組みを Disposable に分離しているのが特徴的
- 以上を踏まえると Observable, Observer といったインターフェースを自然に導き出すことができる

みたいな話。


## FRPを使いはじめて3年が過ぎました。 // Speaker Deck

https://speakerdeck.com/rizumita/frpwoshi-ihazimete3nian-gaguo-gimasita

rizumitaさんのスライド。
iOS界隈で、こんなタイトルで語れる人ってどれだけいるかな、という。
アプリ全体がFRPに毒されそうになったら、このスライドを読んで解毒しましょう。

![image](https://qiita-image-store.s3.amazonaws.com/0/34405/f59dd7a2-8cb2-1284-19c6-f88fc30151d1.png)