第2回RxSwift勉強会 ＠ Sansan ブログまとめ枠 #RxSwift_Sansan

[第2回RxSwift勉強会 ＠ Sansan](http://connpass.com/event/35014/)にブログまとめ枠で参加して参りましたので、まとめさせて頂きます。

私のスキル的には、RxSwiftの資料をいくつか読んでおり、RxRealmを使用して軽くコードを書いたぐらいで、実アプリに本格導入している状態ではありません。

なお、ブログまとめ枠は2名ありまして、他の方が先に記事を書かれたいのでご紹介致します。
[第2回RxSwift勉強会 ＠ Sansan参加レポート](
http://blog.personal-factory.com/2016/08/19/rxswift-study-meeting-in-sansan-report/)
※ 下の名前が一緒でびっくりしました

ブログまとめ枠ではない、参加者さんのレポートが投稿されていたのでご紹介致します🙋
http://colorbox.hateblo.jp/entry/2016/08/20/011739

## [RxExampleから学ぶ！RxSwift](https://speakerdeck.com/kazu0620/rxexamplekaraxue-bu-rxswift)

[@kazu0620](https://twitter.com/kazu0620)さんの発表です。
所属会社であるSansan株式会社さんでは[Eight](https://itunes.apple.com/jp/app/eight-100wan-renga-shiu-ming/id444423637?mt=8)などのアプリを公開しているようです。
個人でも[ヒミツのアルバム](https://itunes.apple.com/jp/app/himitsunoarubamu-jianraretakunai/id662735705?mt=8)と[にゃんこタウン](https://itunes.apple.com/jp/app/nyankotaun/id845923130?mt=8)を公開中されています。

内容は、[RxExample](https://github.com/ReactiveX/RxSwift)を解説して頂ける内容でした。

[RxExample](https://github.com/ReactiveX/RxSwift)には、シンプルなサンプルからMVVMの使用例を示すような複雑な内容まで幅広く含まれます。[RxExample](https://github.com/ReactiveX/RxSwift)はRxSwiftをどのように使って欲しいかを説明してくれる良い資料です。

bindToの中身はsubscribeしてハンドリングしているのと同じというのが印象的でした。推測ですが、bindToのように中身がsubscribeを使っているメソッドが幾つかあり、その場合はsubscribeと同様に呼び出すとそれまでのメソッドを実行してしまうという所は気をつけなくてはならなさそうです。

学習しているとよく出てくる、DisposeBagとshareReplyの話もありました。特にshareReplyは、一件動くけど、パフォーマンスに影響があるポイントなので注意が必要そうです。shareReplyについては、発表者の方がコードレビューの時に特に気をつけるようにという話もありました。

Controllerは何をやるの？

- Viewのライフサイクル（遷移とか）を管理する
- ViewとViewModelを繋ぐ

※ ViewModelはviewをbindできるだけ、DisposeBagは保持しない

---

> Driverよくわからなかったけど今回の勉強会で明確になった。
> 端的にいって、UIパーツをbindするもの。
> メインスレッドで実行、エラーを出力しない、複数Viewをbindしても1つのSubscriptionが生成される(hot変換）
> https://twitter.com/hatakenokakashi/status/766593558904045568

---

> 公式のPlayroundはちゃんと見とくと基礎が身につきそう
> https://twitter.com/color_box/status/766588761782104064

---

## Reactive Extension

[@dbank0208](https://twitter.com/dbank0208)さんの発表です。
フリーランスとして、受託などをされて活動しているそうです。

発表資料は公開されていないようでしたので、一部Twitterの声をまとめさせて頂きます。

---

> Hotはストリームを稼働させる性質
> https://twitter.com/ZuQ9Nn/status/766595846376869888

---

> ColdはSubscribeされるまで動作しない性質
> https://twitter.com/ZuQ9Nn/status/766595943135182850

---

> APIを実行しDBに入れて表示する処理を140ステップなので、可読性、保守性が上がる #RxSwift_Sansan 
> https://twitter.com/ZuQ9Nn/status/766597654545506304

---

## [RxSwiftで作るAPIラッパーのパターン](https://speakerdeck.com/muratayusuke/rxswiftdezuo-ruapiratupafalsepatan)

[@muratayusuke](https://twitter.com/muratayusuke)さんの発表です。

所属されている会社では[BEST10](https://itunes.apple.com/jp/app/best10-minnano-xingkitsukegurumeapuri/id894975439?mt=8&ign-mpt=uo%3D4)や[Travelers](https://aitravel.jp/)を公開されているようです。
個人では[MultiTeam for Slack](https://itunes.apple.com/jp/app/id1091407464)を公開されています。

発表内容では、作成中の[Travelers](https://aitravel.jp/)のiOS版をRxSwiftを使いWebAPIと連携した事をお話頂きました。

実に20個ほどのAPIがあると伺いました。これらをうまく束ねるのにRxSwiftの機構が役立ったとのことです。私もRxSwiftを学んで真っ先に思ったのは、このように入力が多いものを束ねて簡単にViewに反映できそうだと言うことでした。そこが一致していて理解がより深まりました。

最初の発表の[RxExampleから学ぶ！RxSwift](https://speakerdeck.com/kazu0620/rxexamplekaraxue-bu-rxswift)ではRxExampleをつかって基礎的な部分を紹介いただいたのに対して、実際にAPIと組み合わせるとどうなるのかとか、実際に組み合わせてみた実例を紹介頂いたのが面白いと思いました。

余談ですが個人的には[Controllerの"C"の下になんかニョロが見えて気になるｗ](https://twitter.com/yoneapp/status/766602476610985984)がすごく気になりました。

## [とりあえず投稿機能に ViewModelを 使ってみるための知識🏄🏻](https://speakerdeck.com/yuzushioh/rxswift-toriaezutou-gao-ji-neng-ni-viewmodelwo-shi-tutemirutamefalsezhi-shi)

[@yuzushioh](https://twitter.com/yuzushioh)さんの発表です。これまでの話でも出てきたViewModelの話に着目することにより、MVVMとRxSwiftの関係をより理解を深められる発表でした。

株式会社ソウゾウに入社（インターン）しているそうです。
株式会社ソウゾウは[メルカリ アッテ](https://www.mercariatte.com/jp/)を公開している会社さんって感じでしょうか。
なんと未成年なので、打ち上げの🍺が禁止でした！お若いですね。

話の中で特に気になったのは、ViewとViewModelを双方Bindingして利用しているそうです。設計次第ではあるのですがと思うのですが、個人的に双方BindingされているJavaScript系のライブラリを触った経験から、確かにiOSでも双方できると便利そうだと感じました。

質疑応答で[メルカリ アッテ](https://www.mercariatte.com/jp/)は、ほぼViewとViewModel方式（MVVMかな）で書かれていると聞き、純粋に凄いなと思いました。

## さいごに

発表者のみなさまのおかげでRxSwiftへの理解が深まりました。また、他の方のそのような声もTwitterに投稿されておりました。本当にありがとうございました。

今作っている自分のアプリにもRxSwiftを導入予定です。また、何か発表できることがありましたら私も公開していきたいと考えています。

一部、質疑応答がRxSwiftの理解が深くないため、まとめに含めることが出来ませんでした。以下のような話だったかと思っております。

- TableViewCellの複雑なケースの対応？
- publish subject or driver（driver in driverを避けたい？）
- BoolとObservableの使い分け？

もし、補足していたくことが可能でしたら、編集リクエストまたはコメントいただけますと幸いです。

本日は、発表者の皆さま、会場をお貸し頂きましたSansan株式会社さま、誠にありがとうございました🙇