SlideShare a Scribd company logo
1 of 36
Download to read offline
はじめての

ReactiveCocoa
福井 章平
2014/07/26
自己紹介
❖ チンペイ( @tinpay )
❖ ChatWork 株式会社

モバイルチーム
❖ 個人でもアプリ制作

速シリーズ(速Reminder、速Calendar、速Tweet、など)

日付の電卓、おえかキロク、失業保険電卓、など
自己紹介
❖ iOSアプリ開発

iPhone3Gがでたときから
❖ 20本ぐらいリリースしました。
❖ iPhoneL♡VE部っていう飲み会なオフ会やってるので、
来てください。

http://loved-iphone.com/
ReactiveCocoaに

1ヶ月前に初めて触れた
初めてソースを見た時
そんな僕が

1ヶ月間、ReactiveCocoaで

実装してみました
アジェンダ
1. ReactiveCocoaって?
2. メリットとデメリット
3. まとめ
アジェンダ
1. ReactiveCocoaって?
2. メリットとデメリット
3. まとめ
1. ReactiveCocoaって?
Objective-Cで関数型リアクティブプロ
• • • • • • • •
グラミングをサポートするライブラリ
• • • • •
Objective-CでMVVMを実現するため
• • • •
にReactiveCocoaを利用する
pod "ReactiveCocoa"
CocoaPodsで

インストールしたら使えます
リアクティブプログラミング

MVVM

って

なんなん?
リアクティブプログラミング
!
コンピュータ用語におけるリアクティブプログラミングとは、変更を伝
播させるデータフロー指向のプログラミングパラダイムを指します。

それは静的ないし動的なデータフローを容易に表現できることを意味し
ます。背後にある実行モデルが、変更をデータフローへ自動的に伝播さ
せるということです。

たとえば、命令型プログラミングでは、a := b + c という式は、b + c
が直ちに評価され、aに代入されることを意味します。あとで b や c が
変更されたとしても、それは a には反映されません。一方、リアクティ
ブプログラミングの場合では、値が自動的に更新されることになりま
す。
!
!
出典 Reactive programming - Wikipedia, the free encyclopedia
リアクティブプログラミング
時間とともに変化する値の関係性を
• • •
記述してプログラミングする。
【命令型プログラミング】

a = 1;
b = a + 2;
a = 3;
print(b); 
aの値が変わっても、

計算時からbの値はかわらない
よくある例
// 3
【リアクティブプログラミング】

a = 1;
b = a + 2;
a = 3;
print(b); 
aが変わると

bの値も変わる
aとbの関係は変わらない
• •
数学の「関数」

y = x + 2
よくある例
// 5
MVVM
• Model

データ・ビジネスロジック
• View

画面・UI
• ViewModel

Viewの値・動作を保持して、Modelとの情報伝達
を行う
MVVM
Model ViewModel
View/

ViewController
バインディング
M VM V
ReactiveCocoaを使って

バインディングすれば幸せに
試しにバインディングしてみる
ViewModelにバインディング
ViewModel
View/

ViewController
hogeTextField.text
fugaTextField.text
piyoSlider.value
NSString *hoge
NSString *fuga
NSNumber *piyo
ReactiveCocoaが無い時…
- (void)viewDidLoad{
self.viewModel = [[HogeHogeViewModel alloc] init];
self.hogeTextField.delegate = self;
self.fugaTextField.delegate = self;
self.hogeTextField.tag = 1;
self.fugaTextField.tag = 2;
[self.piyoSlider addTarget:self action:@selector(sliderValueChanged:)
forControlEvents:UIControlEventValueChanged];
}
!
-(BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:
(NSRange)range replacementString:(NSString *)string{

NSMutableString *str = [textField.text mutableCopy];
[str replaceCharactersInRange:range withString:string];
if(textField.tag==1){
self.viewModel.hoge = self.hogeTextField.text;
}else if(textField.tag==2){
self.viewModel.fuga = self.fugaTextField.text;
}
return YES;
}
!
- (IBAction)sliderValueChanged:(UISlider *)sender {
self.viewModel.piyo = [NSNumber numberWithFloat:sender.value];
}
値が変わるところでViewModelにセットする必要がある。
ReactiveCocoaがある時♪
- (void)viewDidLoad{
self.viewModel = [[HogeHogeViewModel alloc] init];
[self.hogeTextField.rac_textSignal subscribeNext:^(NSString *txt) {
self.viewModel.hoge = txt;
}];
[self.fugaTextField.rac_textSignal subscribeNext:^(NSString *txt) {
self.viewModel.fuga = txt;
}];
RAC(self,piyo) = [self.piyoSlider rac_newValueChannelWithNilValue:
[NSNumber numberWithFloat:0.f]];
}
インスタンス生成時に
関係性を書くだけ
試しにReactiveCocoaで

書きなおしてみる
https://github.com/tinpay/RACWarikan
命令型で書いた時のソースと

リアクティブで書いた時のソース比較
アジェンダ
1. ReactiveCocoaって?
2. メリットとデメリット
3. まとめ
・ViewControllerがスッキリした
メリット1
・処理はViewModelに記述されている。

(MVVMの恩恵)
・ステータスによるUI分岐がなくなる
・テストが書きやすい
メリット2
・ビジネスロジックはModelに記述され
ている。
→UIに依存しないテストが書ける
・一時的に使う変数がなくなった
メリット3
・バグが減る
・難しい。。。。。
デメリット1
・1ヶ月ぐらいでは、今までどおり書い
た方が何倍も早い。イメージがわかない。
・慣れるしかない!
・Signalを連鎖しすぎるとみにくい
デメリット2
・保守が大変な気がする
・そこはテストでカバー??
アジェンダ
1. ReactiveCocoaって?
2. メリットとデメリット
3. まとめ
まとめ
むずかしい
まとめ
直感的に書けない
まとめ
もどかしい
まとめ
でも

ソースは

きれいになる
まとめ
頑張りましょう\(^o^)/
おわりhttp://www.tinpay.com/

More Related Content

Similar to はじめてのReactiveCocoa

iPhoneアプリ開発を楽に楽しくするサイトまとめ
iPhoneアプリ開発を楽に楽しくするサイトまとめiPhoneアプリ開発を楽に楽しくするサイトまとめ
iPhoneアプリ開発を楽に楽しくするサイトまとめHiramatsu Ryosuke
 
iOSローカライズことはじめ_Swiftビギナーズ20160109.pdf
iOSローカライズことはじめ_Swiftビギナーズ20160109.pdfiOSローカライズことはじめ_Swiftビギナーズ20160109.pdf
iOSローカライズことはじめ_Swiftビギナーズ20160109.pdf俊輔 嶺村
 
Swiftで初アプリリリースしてみて振り返り
Swiftで初アプリリリースしてみて振り返りSwiftで初アプリリリースしてみて振り返り
Swiftで初アプリリリースしてみて振り返りHikari Yanagihara
 
iOSアプリを審査に提出してみた話
iOSアプリを審査に提出してみた話iOSアプリを審査に提出してみた話
iOSアプリを審査に提出してみた話Hideki Abe
 
事例 アジャイルと自動化 後半(ヤフオク!アプリでの自動テストの事例紹介) at Ques vol.7( #ques7 ) 11/20/2015
事例 アジャイルと自動化 後半(ヤフオク!アプリでの自動テストの事例紹介) at Ques vol.7( #ques7 ) 11/20/2015事例 アジャイルと自動化 後半(ヤフオク!アプリでの自動テストの事例紹介) at Ques vol.7( #ques7 ) 11/20/2015
事例 アジャイルと自動化 後半(ヤフオク!アプリでの自動テストの事例紹介) at Ques vol.7( #ques7 ) 11/20/2015Yahoo!デベロッパーネットワーク
 
Reactにflowtypeを組み合わせることで、我々は何を楽にできたか
Reactにflowtypeを組み合わせることで、我々は何を楽にできたかReactにflowtypeを組み合わせることで、我々は何を楽にできたか
Reactにflowtypeを組み合わせることで、我々は何を楽にできたかLINE Corporation
 
Swift歴2ヶ月でアプリを8本リリースしてみた話
Swift歴2ヶ月でアプリを8本リリースしてみた話Swift歴2ヶ月でアプリを8本リリースしてみた話
Swift歴2ヶ月でアプリを8本リリースしてみた話Makoto Nishimoto
 
テレニコツイ
テレニコツイテレニコツイ
テレニコツイjz5 MATSUE
 
Onlab [growth] hackers conference 2013 Ryosuke Matsumoto
Onlab [growth] hackers conference 2013 Ryosuke MatsumotoOnlab [growth] hackers conference 2013 Ryosuke Matsumoto
Onlab [growth] hackers conference 2013 Ryosuke MatsumotoRyosuke Matsumoto
 
複数人でSwift開発を行うには
複数人でSwift開発を行うには複数人でSwift開発を行うには
複数人でSwift開発を行うにはYuya Fujiwara
 
React Native(Expo)ではじめる"ゆとり"モバイルアプリ開発
React Native(Expo)ではじめる"ゆとり"モバイルアプリ開発React Native(Expo)ではじめる"ゆとり"モバイルアプリ開発
React Native(Expo)ではじめる"ゆとり"モバイルアプリ開発Show Izumiya
 
スタートアップ勉強会
スタートアップ勉強会スタートアップ勉強会
スタートアップ勉強会Ken Haneda
 
嗚呼、素晴らしき哉 MonoTouch
嗚呼、素晴らしき哉 MonoTouch嗚呼、素晴らしき哉 MonoTouch
嗚呼、素晴らしき哉 MonoTouchhIDDENxv
 
App inventor for bussiness
App inventor for bussinessApp inventor for bussiness
App inventor for bussinessTakeaki Tada
 
Techcrunch hackathon 2013
Techcrunch hackathon 2013Techcrunch hackathon 2013
Techcrunch hackathon 2013Nao Tokui
 

Similar to はじめてのReactiveCocoa (20)

iPhoneアプリ開発を楽に楽しくするサイトまとめ
iPhoneアプリ開発を楽に楽しくするサイトまとめiPhoneアプリ開発を楽に楽しくするサイトまとめ
iPhoneアプリ開発を楽に楽しくするサイトまとめ
 
Rnyoutube
RnyoutubeRnyoutube
Rnyoutube
 
iOSローカライズことはじめ_Swiftビギナーズ20160109.pdf
iOSローカライズことはじめ_Swiftビギナーズ20160109.pdfiOSローカライズことはじめ_Swiftビギナーズ20160109.pdf
iOSローカライズことはじめ_Swiftビギナーズ20160109.pdf
 
Swiftで初アプリリリースしてみて振り返り
Swiftで初アプリリリースしてみて振り返りSwiftで初アプリリリースしてみて振り返り
Swiftで初アプリリリースしてみて振り返り
 
iOSアプリを審査に提出してみた話
iOSアプリを審査に提出してみた話iOSアプリを審査に提出してみた話
iOSアプリを審査に提出してみた話
 
事例 アジャイルと自動化 後半(ヤフオク!アプリでの自動テストの事例紹介) at Ques vol.7( #ques7 ) 11/20/2015
事例 アジャイルと自動化 後半(ヤフオク!アプリでの自動テストの事例紹介) at Ques vol.7( #ques7 ) 11/20/2015事例 アジャイルと自動化 後半(ヤフオク!アプリでの自動テストの事例紹介) at Ques vol.7( #ques7 ) 11/20/2015
事例 アジャイルと自動化 後半(ヤフオク!アプリでの自動テストの事例紹介) at Ques vol.7( #ques7 ) 11/20/2015
 
Reactにflowtypeを組み合わせることで、我々は何を楽にできたか
Reactにflowtypeを組み合わせることで、我々は何を楽にできたかReactにflowtypeを組み合わせることで、我々は何を楽にできたか
Reactにflowtypeを組み合わせることで、我々は何を楽にできたか
 
Swift歴2ヶ月でアプリを8本リリースしてみた話
Swift歴2ヶ月でアプリを8本リリースしてみた話Swift歴2ヶ月でアプリを8本リリースしてみた話
Swift歴2ヶ月でアプリを8本リリースしてみた話
 
テレニコツイ
テレニコツイテレニコツイ
テレニコツイ
 
ABC 2012 spring
ABC 2012 springABC 2012 spring
ABC 2012 spring
 
Onlab [growth] hackers conference 2013 Ryosuke Matsumoto
Onlab [growth] hackers conference 2013 Ryosuke MatsumotoOnlab [growth] hackers conference 2013 Ryosuke Matsumoto
Onlab [growth] hackers conference 2013 Ryosuke Matsumoto
 
複数人でSwift開発を行うには
複数人でSwift開発を行うには複数人でSwift開発を行うには
複数人でSwift開発を行うには
 
React Native(Expo)ではじめる"ゆとり"モバイルアプリ開発
React Native(Expo)ではじめる"ゆとり"モバイルアプリ開発React Native(Expo)ではじめる"ゆとり"モバイルアプリ開発
React Native(Expo)ではじめる"ゆとり"モバイルアプリ開発
 
スタートアップ勉強会
スタートアップ勉強会スタートアップ勉強会
スタートアップ勉強会
 
嗚呼、素晴らしき哉 MonoTouch
嗚呼、素晴らしき哉 MonoTouch嗚呼、素晴らしき哉 MonoTouch
嗚呼、素晴らしき哉 MonoTouch
 
LOUPE study#2
LOUPE study#2LOUPE study#2
LOUPE study#2
 
Swiftvol.1
Swiftvol.1Swiftvol.1
Swiftvol.1
 
App inventor for bussiness
App inventor for bussinessApp inventor for bussiness
App inventor for bussiness
 
!(びっくり)するかもしれないヤフーでのアプリ開発
!(びっくり)するかもしれないヤフーでのアプリ開発!(びっくり)するかもしれないヤフーでのアプリ開発
!(びっくり)するかもしれないヤフーでのアプリ開発
 
Techcrunch hackathon 2013
Techcrunch hackathon 2013Techcrunch hackathon 2013
Techcrunch hackathon 2013
 

はじめてのReactiveCocoa