SlideShare a Scribd company logo
- RxSwiftを実際に導入してみた件 -
辰己 佳祐
Twitter:@TK_u_nya
Github:cztatsumi-keisuke
Qiita:Nietzsche
• 所属
– 株式会社CyberZ OPENREC事業部
• 職種
– iOSエンジニア
• 個人アプリ
– AppStoreで「Keisuke Tatsumi」で検索検索ぅ〜♪
Agenda
• はじめに
• RxSwiftとは
• RxSwiftだとこう書ける
• RxSwiftを使ってみた結果
Agenda
• はじめに
• RxSwiftとは
• RxSwiftだとこう書ける
• RxSwiftを使ってみた結果
はじめに
• なぜRxSwiftを使うことになったのか
1.
2.
3.
はじめに
• なぜRxSwiftを使うことになったの?
1. 新規サービスの開発の話が来た
2.
3.
OPENREC Messenger
• ゲーマー向け無料コミュニ
ケーションアプリ
• 一人で複数のプロフィールを
使える
• AppStore、Google Play
にて、ダウンロード
よろしくお願いします!
はじめに
• なぜRxSwiftを使うことになったの?
1. 新規サービスの開発の話が来た
2. 開発言語をSwiftに
3.
OPENRECでのiOS開発
• OPENREC.tv は Objective-C で開発
• Version 4.0 で大幅なリニューアルを行った
• 今までの技術資産を使うのならそのままでも
OPENRECでのiOS開発
• OPENREC.tv は Objective-C で開発
• Version 4.0 で大幅なリニューアルを行った
• 今までの技術資産を使うのならそのままでも
ところが、、、
最近のiOS界隈
「Objective-Cはゴミ箱へ」というツイート Objective-C から Swift への変換サービス
最近のiOS界隈
「Objective-Cはゴミ箱へ」というツイート Objective-C から Swift への変換サービス
進むSwiftへの移行!
Swiftにしましょうか(ニッコリ
)
はじめに
• なぜRxSwiftを使うことになったの?
1. 新規サービスの開発
2. 開発言語をSwiftに
3. 流行に乗ろう
RxSwiftにピンッときたら
• 最近よく「RxSwiftはいいぞ。」といった内容の
記事やスライドをよく目にする
• 他社も導入しはじめている
– ニコニコ漫画アプリ(ドワンゴ)、アッテ(メルカリ)、
ヤフオク!(ヤフー) など
• RxSwiftの知見が増えてきている
乗るしかない このビッグウェーブに!
ー Butchさん
はじめに
• なぜRxSwiftを使うことになったの?
1. 新規サービスの開発
2. 開発言語をSwiftに
3. 流行に乗ろう
というわけで、、、
はじめに
• なぜRxSwiftを使うことになったの?
1. 新規サービスの開発
2. 開発言語をSwiftに
3. 流行に乗ろう
やっはろー !!!
RxSwift World!
というわけで、、、
Agenda
• はじめに
• RxSwiftとは
• RxSwiftだとこう書ける
• RxSwiftを使ってみた結果
RxSwiftとは
• RxSwiftではなく、Rx + Swift = RxSwift
– RxSwiftとは、RxのSwift版のこと
• Rx = Reactive Extensionsの略
– イベントストリームを抽象化するライブラリ
(メルカリのishkawaさんの表現をお借りしました)
– 他にもいろんな言語のRxがある
http://reactivex.io/
ロゴかっこいい →
シャケかな? →
イベントストリームを抽象化するライブラリ
(´・ω・`)ちょっと何言ってるかわかんない
イベントストリームを抽象化するライブラリ
イベントストリームとは
×
受け取った値
エラー 完了開始
マーブル図によるストリームのイメージ
時間
• 流れのイメージは「川」
• 川から流れてくるのは値、エラー、完了の3種類
• 値のみ必要な場合はエラーと完了は無視することもできる
RxSwiftはこの川を監視する
何をストリームにできるの?
• UIイベント
• KVO
• デリゲートメソッドの呼び出し
• 文字列 などなど…
ほぼ全てストリームにできます!
ex.1)UIButtonのタップ
タップ
時間
タップ
時間差で2回タップしたでござるの巻
ex.2)UITextFieldのテキストの変化
a ab
aを入力
時間
bを入力
時間差で文字を入力したでござるの巻
a
bを削除
Ex.3)UITableViewの生成
セルのアイテム数を取得
時間
セルそのものを取得
テーブルを作りたいでござるの巻
テーブルの更新
では、実際に書くとどうなる?
Agenda
• はじめに
• RxSwiftとは
• RxSwiftだとこう書ける
• RxSwiftを使ってみた結果
ex.1)UIButtonのタップ
ex.1)UIButtonのタップ
① ②
①:@objc を付けなければならない
②:メソッドとして分ける必要がある
ex.1)UIButtonのタップ
①:@objc を付けなくてもよい!
②:メソッドとして分ける必要がない!
ex.2)UITextFieldのテキストの変化
ex.2)UITextFieldのテキストの変化
①
②
③
①:デリゲートを宣言しなければいけない
②:デリゲートを設定しなければいけない
③:デリゲートメソッドを使って検知する必要がある
ex.2)UITextFieldのテキストの変化
①:デリゲートを宣言しなくてよい!
②:デリゲートを設定しなくてよい!
③:デリゲートメソッドとかいらないね!
Ex.3)UITableViewの生成
Ex.3)UITableViewの生成
①
②
③
①:デリゲートを宣言しなければいけない
②:デリゲートを設定しなければいけない
③:デリゲートメソッドを使って検知する必要がある
Ex.3)UITableViewの生成
①:デリゲートを宣言しなくてよい!
②:デリゲートを設定しなくてよい!
③:デリゲートメソッドとかやっぱりいらないね!
RxSwiftすごすぎないですか?
RxSwift使ってみたくなりません?
Agenda
• はじめに
• RxSwiftとは
• RxSwiftだとこう書ける
• RxSwiftを使ってみた結果
RxSwiftを導入した結果
短所
• 学習コストは高め
– 慣れるためにチーム内で勉強会を開いたり、情
報共有用のスプレッドシートを作成したりしました
• ビルドに少し時間がかかる
– たまに補完が狂ってコードのハイライトが真っ黒
になるときもある
• アプリのバイナリサイズは10MBほど増える
RxSwiftを導入した結果
長所
• 慣れれば超便利
– 使えるようになると、手放せなくなりそう
• ストリームで監視するため、フラグが減った
– OPENREC.tvの開発時には多数生成していた状態
保持用のフラグがほぼ不要になった
• コードの可読性が上がった
– デリゲートやボタンの反応など、メソッドの目移り
をする必要がなくなった
結果的には導入して正解!
みなさんもRxSwiftで楽しませんか?
以上です!
ご静聴ありがとうございました!

More Related Content

PDF
RxSwiftを“チーム開発に”導入する話
PPTX
オブジェクト指向な人がRx swiftを試してみた
PDF
What is reactive programming?
PDF
SIerでもSphinxを使いたい! 後編
PDF
チーム開発にSwiftLintを導入してみた・詳細版
PDF
既存プロジェクトにSwiftLintを導入した話
PDF
Oktavia全文検索エンジン - SphinxCon JP 2014
PDF
Detroit Programming City
RxSwiftを“チーム開発に”導入する話
オブジェクト指向な人がRx swiftを試してみた
What is reactive programming?
SIerでもSphinxを使いたい! 後編
チーム開発にSwiftLintを導入してみた・詳細版
既存プロジェクトにSwiftLintを導入した話
Oktavia全文検索エンジン - SphinxCon JP 2014
Detroit Programming City

What's hot (20)

PPTX
マイクロサービスにおける 非同期アーキテクチャ
PDF
The World is Connected
PPTX
世界のSphinx事情 @ SphinxCon JP 2015
PDF
受託開発とRubyGems
PDF
インタフェースのこころ
PDF
進撃の受託開発
PDF
Reading 1st dRuby
PPTX
20160615 知能犯もシャットアウト!アイドルが教えるAmazonInspector♡
PPTX
Spring I/O 2017での拡張のお話
PDF
Skinny Meetup Tokyo 2 日本語スライド
PDF
Skinny Framework で始めた Scala
PPTX
180421第8回関西DB勉強会- たまにはpgAdmin4も使ってみよう
PDF
JUS関西 Sphinxワークショップ@関西 Sphinx事例紹介
PDF
海外で注目されてるJs framework “mithril”の特徴
PPTX
さくっと理解するSpring bootの仕組み
PPTX
20201107 jjug ccc Spring Boot ユーザーのための Quarkus 入門
PDF
SwaggerとAPIのデザイン
PDF
Swiftで、Webサーバにデータを送信・登録しよう!
PDF
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
PDF
進撃のSbt
マイクロサービスにおける 非同期アーキテクチャ
The World is Connected
世界のSphinx事情 @ SphinxCon JP 2015
受託開発とRubyGems
インタフェースのこころ
進撃の受託開発
Reading 1st dRuby
20160615 知能犯もシャットアウト!アイドルが教えるAmazonInspector♡
Spring I/O 2017での拡張のお話
Skinny Meetup Tokyo 2 日本語スライド
Skinny Framework で始めた Scala
180421第8回関西DB勉強会- たまにはpgAdmin4も使ってみよう
JUS関西 Sphinxワークショップ@関西 Sphinx事例紹介
海外で注目されてるJs framework “mithril”の特徴
さくっと理解するSpring bootの仕組み
20201107 jjug ccc Spring Boot ユーザーのための Quarkus 入門
SwaggerとAPIのデザイン
Swiftで、Webサーバにデータを送信・登録しよう!
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
進撃のSbt
Ad

Viewers also liked (12)

PPTX
サイバーエージェント様 発表「OpenStackのNWと物理の話」
PDF
あなたのScalaを爆速にする7つの方法
PDF
Ironicを運用して半年が経過しました - OpenStack最新情報セミナー(2016年7月)
PDF
Apache Drill で見る Twitter の世界
PPTX
F.O.Xを支える技術
PDF
Atomic Design powered by React @ AbemaTV
PDF
Wowzaを用いた配信基盤 Takusuta tech conf01
PDF
AWSとGCPを使用したインフラ環境
PPTX
ポコロンダンジョンズを彩るアニメーションノウハウ
PDF
GKEで半年運用してみた
PDF
レスポンシブWebデザインでうまくやるための考え方
PPTX
[社内勉強会]ELBとALBと数万スパイク負荷テスト
サイバーエージェント様 発表「OpenStackのNWと物理の話」
あなたのScalaを爆速にする7つの方法
Ironicを運用して半年が経過しました - OpenStack最新情報セミナー(2016年7月)
Apache Drill で見る Twitter の世界
F.O.Xを支える技術
Atomic Design powered by React @ AbemaTV
Wowzaを用いた配信基盤 Takusuta tech conf01
AWSとGCPを使用したインフラ環境
ポコロンダンジョンズを彩るアニメーションノウハウ
GKEで半年運用してみた
レスポンシブWebデザインでうまくやるための考え方
[社内勉強会]ELBとALBと数万スパイク負荷テスト
Ad

Similar to ご注文はRxですか? -RxSwiftを実際に導入してみた件- (20)

PDF
第2.1回Twitter API勉強会 - 検索API
PPT
Swiftを迷わず選んだ理由
PDF
とっとるびー第29回発表資料(RICOH THETAの全天球画像を部分転送して遠隔地のOculusでみる)
PDF
RustでWebSocketな自社APIを使う
PDF
Javascript を使ってみよう!!
PPTX
インドのインターネット環境 との戦い方
PDF
Enumerate
KEY
HerokuでRails3.2 we love herokuの事例
PPTX
[Dots.]taiga
PDF
Promise in Swift by PromiseKit - Swift勉強会 2015/05/25
PDF
20150207 何故scalaを選んだのか
PDF
ruby、sinatraで作るfacebookアプリ
KEY
Twitter クライアント開発のすすめ #twtr_hack
PDF
WebAPIのこれまでとこれから
PDF
How to upgrade your rails application to rspec3
PDF
女性エンジニアの1週間
PDF
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
PDF
Webサイト向けAPI #twtr_hack
PDF
React vtecx20170822
PDF
広島IT勉強会カレンダー(仮)はRubyを使っています
第2.1回Twitter API勉強会 - 検索API
Swiftを迷わず選んだ理由
とっとるびー第29回発表資料(RICOH THETAの全天球画像を部分転送して遠隔地のOculusでみる)
RustでWebSocketな自社APIを使う
Javascript を使ってみよう!!
インドのインターネット環境 との戦い方
Enumerate
HerokuでRails3.2 we love herokuの事例
[Dots.]taiga
Promise in Swift by PromiseKit - Swift勉強会 2015/05/25
20150207 何故scalaを選んだのか
ruby、sinatraで作るfacebookアプリ
Twitter クライアント開発のすすめ #twtr_hack
WebAPIのこれまでとこれから
How to upgrade your rails application to rspec3
女性エンジニアの1週間
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
Webサイト向けAPI #twtr_hack
React vtecx20170822
広島IT勉強会カレンダー(仮)はRubyを使っています

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

Editor's Notes

  • #21: 何の魚か知ってる人いたら教えてください。
  • #25: 可愛い娘を監視するのではなくて川を監視するのです。
  • #34: Pub / Sub モデル: Publish / Subscribe disposeBag:監視対象のストリームを登録しておくと、自身のクラスが解放された時に監視を終了させてくれます。逆にこれを用意していないとずっと監視が終了しませんので要注意 rx_tap:ボタンのタップ検知用のストリーム
  • #37: Pub / Sub モデル: Publish / Subscribe disposeBag:監視対象のストリームを登録しておくと、自身のクラスが解放された時に監視を終了させてくれます。逆にこれを用意していないとずっと監視が終了しませんので要注意 rx_text:textfieldの文字列変化検知用のストリーム
  • #40: Pub / Sub モデル: Publish / Subscribe disposeBag:監視対象のストリームを登録しておくと、自身のクラスが解放された時に監視を終了させてくれます。逆にこれを用意していないとずっと監視が終了しませんので要注意 Variable:RxSwiftのSubjectsクラスの一つで、プロパティの変化を監視できるようにするKVO的なやつです。 rx_itemWithIdentifier:RxSwiftのデータバインド用メソッドの一つで、UITableViewDataSourceのcellForRowAtIndexPathと連動しています。