ご注文はrxですか? -rxswiftを実際に導入してみた件-

47
- RxSwift ををををををををををを -

Upload: keisuke-tatsumi

Post on 16-Apr-2017

685 views

Category:

Engineering


4 download

TRANSCRIPT

Page 1: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

- RxSwift を実際に導入してみた件 -

Page 2: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

辰己 佳祐Twitter : @TK_u_nyaGithub : cztatsumi-keisukeQiita : Nietzsche

• 所属– 株式会社 CyberZ OPENREC 事業部

• 職種– iOS エンジニア

• 個人アプリ– AppStore で「 Keisuke Tatsumi 」で検索検索ぅ〜♪

Page 3: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

Agenda

• はじめに• RxSwift とは• RxSwift だとこう書ける• RxSwift を使ってみた結果

Page 4: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

Agenda

• はじめに• RxSwift とは• RxSwift だとこう書ける• RxSwift を使ってみた結果

Page 5: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

はじめに• なぜ RxSwift を使うことになったのか

1. 2. 3.

Page 6: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

はじめに• なぜ RxSwift を使うことになったの?1. 新規サービスの開発の話が来た

2. 3.

Page 7: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

OPENREC Messenger

• ゲーマー向け無料コミュニケーションアプリ• 一人で複数のプロフィールを使える• AppStore 、 Google Playにて、ダウンロードよろしくお願いします!

Page 8: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

はじめに• なぜ RxSwift を使うことになったの?1. 新規サービスの開発の話が来た2. 開発言語を Swift に

3.

Page 9: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

OPENREC での iOS 開発• OPENREC.tv は Objective-C で開発• Version 4.0 で大幅なリニューアルを行った• 今までの技術資産を使うのならそのままでも

Page 10: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

OPENREC での iOS 開発• OPENREC.tv は Objective-C で開発• Version 4.0 で大幅なリニューアルを行った• 今までの技術資産を使うのならそのままでも

ところが、、、

Page 11: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

最近の iOS 界隈

「 Objective-C はゴミ箱へ」というツイートObjective-C から Swift への変換サービス

Page 12: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

最近の iOS 界隈

「 Objective-C はゴミ箱へ」というツイートObjective-C から Swift への変換サービス進む Swiftへの移行!

Page 13: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

Swift にしましょうか(ニッコリ)

Page 14: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

はじめに• なぜ RxSwift を使うことになったの?1. 新規サービスの開発2. 開発言語を Swift に3. 流行に乗ろう

Page 15: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

RxSwift にピンッときたら• 最近よく「 RxSwift はいいぞ。」といった内容の記事やスライドをよく目にする• 他社も導入しはじめている– ニコニコ漫画アプリ(ドワンゴ)、アッテ(メルカリ)、ヤフオク!(ヤフー) など

• RxSwift の知見が増えてきている

Page 16: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

乗るしかない このビッグウェーブに!ー Butch さん

Page 17: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

はじめに• なぜ RxSwift を使うことになったの?1. 新規サービスの開発2. 開発言語を Swift に3. 流行に乗ろう

というわけで、、、

Page 18: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

はじめに• なぜ RxSwift を使うことになったの?1. 新規サービスの開発2. 開発言語を Swift に3. 流行に乗ろう

やっはろー !!!  RxSwift World !

というわけで、、、

Page 19: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

Agenda

• はじめに• RxSwift とは• RxSwift だとこう書ける• RxSwift を使ってみた結果

Page 20: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

RxSwift とは• RxSwift ではなく、 Rx + Swift = RxSwift– RxSwift とは、 Rx の Swift 版のこと

• Rx = Reactive Extensions の略– イベントストリームを抽象化するライブラリ

( メルカリの ishkawa さんの表現をお借りしました )

– 他にもいろんな言語の Rx があるhttp://reactivex.io/

ロゴかっこいい →シャケかな? →

Page 21: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

イベントストリームを抽象化するライブラリ

Page 22: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

(´ ・ ω ・` ) ちょっと何言ってるかわかんない

イベントストリームを抽象化するライブラリ

Page 23: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

イベントストリームとは

×受け取った値 エラー 完了開始

マーブル図によるストリームのイメージ

時間

• 流れのイメージは「川」• 川から流れてくるのは値、エラー、完了の3種類• 値のみ必要な場合はエラーと完了は無視することもできる

Page 24: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

RxSwift はこの川を監視する

Page 25: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

何をストリームにできるの?• UI イベント• KVO• デリゲートメソッドの呼び出し• 文字列 などなど…

ほぼ全てストリームにできます!

Page 26: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

ex.1 ) UIButton のタップ

タップ

時間

タップ時間差で2回タップしたでござるの巻

Page 27: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

ex.2 ) UITextField のテキストの変化

a ab

a を入力

時間

b を入力時間差で文字を入力したでござるの巻

a

b を削除

Page 28: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

Ex.3 ) UITableView の生成

セルのアイテム数を取得

時間

セルそのものを取得テーブルを作りたいでござるの巻

テーブルの更新

Page 29: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

では、実際に書くとどうなる?

Page 30: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

Agenda

• はじめに• RxSwift とは• RxSwift だとこう書ける• RxSwift を使ってみた結果

Page 31: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

ex.1 ) UIButton のタップ

Page 32: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

ex.1 ) UIButton のタップ

① ②

① : @objc を付けなければならない② :メソッドとして分ける必要がある

Page 33: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

ex.1 ) UIButton のタップ

① : @objc を付けなくてもよい!② :メソッドとして分ける必要がない!

Page 34: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

ex.2 ) UITextField のテキストの変化

Page 35: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

ex.2 ) UITextField のテキストの変化①

① :デリゲートを宣言しなければいけない② :デリゲートを設定しなければいけない③ :デリゲートメソッドを使って検知する必要がある

Page 36: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

ex.2 ) UITextField のテキストの変化

① :デリゲートを宣言しなくてよい!② :デリゲートを設定しなくてよい!③ :デリゲートメソッドとかいらないね!

Page 37: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

Ex.3 ) UITableView の生成

Page 38: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

Ex.3 ) UITableView の生成①

② ③

① :デリゲートを宣言しなければいけない② :デリゲートを設定しなければいけない③ :デリゲートメソッドを使って検知する必要がある

Page 39: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

Ex.3 ) UITableView の生成

① :デリゲートを宣言しなくてよい!② :デリゲートを設定しなくてよい!③ :デリゲートメソッドとかやっぱりいらないね!

Page 40: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

RxSwift すごすぎないですか?

Page 41: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

RxSwift 使ってみたくなりません?

Page 42: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

Agenda

• はじめに• RxSwift とは• RxSwift だとこう書ける• RxSwift を使ってみた結果

Page 43: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

RxSwift を導入した結果短所• 学習コストは高め– 慣れるためにチーム内で勉強会を開いたり、情報共有用のスプレッドシートを作成したりしました

• ビルドに少し時間がかかる– たまに補完が狂ってコードのハイライトが真っ黒になるときもある

• アプリのバイナリサイズは 10MB ほど増える

Page 44: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

RxSwift を導入した結果長所• 慣れれば超便利– 使えるようになると、手放せなくなりそう

• ストリームで監視するため、フラグが減った– OPENREC.tv の開発時には多数生成していた状態保持用のフラグがほぼ不要になった

• コードの可読性が上がった– デリゲートやボタンの反応など、メソッドの目移りをする必要がなくなった

Page 45: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

結果的には導入して正解!

Page 46: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

みなさんも RxSwift で楽しませんか?

Page 47: ご注文はRxですか? -RxSwiftを実際に導入してみた件-

以上です!ご静聴ありがとうございました!