freee社での 
Reactive Cocoa 活用例 
ReactiveCoaoa Tokyo #rac_tokyo 
@yo_waka 2014/10/18
初めまして 
@yo_waka 
• freeeという会計サービスのスタートアップで 
Web側とiOS/Androidアプリを作ってます 
• iOSアプリ開発歴(2014/01~) 
以前*.frameworkを仕事で少し弄ってたくらい 
• JavaScriptはそこそこ
freeeのiOSアプリ 
• 確定申告や小規模法人決算を 
カンタンに 
• 既にWeb版がある 
• モバイルは基本機能を実装しつ 
つ、出先などでよりカンタン 
にデータ登録したり、外部機 
器と連携したり
ReactiveCocoa 
• 弊社アプリではコアライブラリとして使ってい 
ます(新規開発だから使えたというのも理由) 
• RAC3とswiftの話しはしません! 
(@ikesyoさんがしてくれるはず・・) 
• freee社での導入の経緯とどう使っているかをご 
紹介します
アプリ開発談 
• ある2013年12月の風景 
• 「ユーザーの利便性向上の一環で、ウチでiPhone 
アプリを出そうと思う。1月から確定申告シーズ 
ンになって触ってくれる人も増えるので、来月出 
したい」
「来月出したい」 
(゚Д゚)
短期間リリース 
• - エンジニア1人(アプリはほぼ未経験) 
途中から1人エンジニアが参加して2人に 
• - 開発期間は1ヶ月
でも 
• 短期間リリースだからといっても、出して終了ではない 
ので、機能追加はしていかないといけない 
最低限の機能でもちゃんと使いやすく作りたい 
• 会計サービスは結構UIが複雑 
• スタートアップで後から設計変更してる余裕ない 
(いきなり大ヒット!とかだと話しは別かも) 
• なるべく長期間もちこたえられる設計を最初から模索す 
る必要がある
変更に強い設計って 
なんだ
サービスの特徴 
• 会計データの入力時、ユーザーがViewの状態を 
変化させることによって別のViewを変化、ある 
いは追加/削除するケースが多い 
=> Viewの状態管理が複雑 
• ユーザーが柔軟に会計用のデータセットを変え 
られるため、データの変更に応じてViewを再描 
画するケースが多い 
=> 複数のモデルを管理しないといけない
(拡張)MVC 
Model 
UIViewController 
Storyboard 
UIView 
操作 
イベント 
呼び出し
MVCの問題点 
• シンプルな構造なら問題ない 
• Fat UIViewController/Model 
• UIViewController+ViewsとModelは1:1とは限らないので、 
ビジネスロジックが散らばる 
• APIどこのレイヤが叩くねん問題 
• 画面内のイベントが増えると管理しずらい 
• Web版のクライアントMVCで上記の問題を抱えている
MVVM 
ViewModel 
UIViewController 
Story 
board 
UIView 
呼び出し 
イベント 
Model 
操作 
イベント 
呼び出し
ViewModel 
• UIViewControllerの状態管理 
• APIリクエストの発行 
• Model(s)の操作
と、いうわけで
freeeアプリ構成 
ViewModel 
UIViewController 
Story 
board 
UIView 
RAC 
Model 
(Mantle) 
操作 
RAC 
API Client 
(AFNetworking) 
RAC
MVVMの 
レイヤ間をRACで繋ぐ
ReactiveCocoa 
• UIViewControllerとView間のイベント管理 
• View間のデータバインディング 
• UIViewControllerとViewModel間のデータバインディング 
• ViewModelとAPIClient間のデータバインディング
UIViewControllerとView間の 
イベント管理 
YRLG
VHWXS9LHZV 
^ 
8,1LE
IL[HG1LE 8,1LEQLE:LWK1LE1DPH#׊6RPH1LE1DPHEXQGOHQLO@ 
VHOIIL[HG9LHZ IL[HG1LELQVWDQWLDWH:LWK2ZQHUVHOIRSWLRQVQLO@@ 
VHOIYLHZDGG6XEYLHZVHOIIL[HG9LHZ@ 
! 
:($.,)VHOI
! 


ࣇࣽऍࣕअࣶࣙऍࡨ༇ࡱࢨࡻࢥ࣭ࣿखࢮᦻࡴࢧ
 
VHOIIL[HG9LHZFDQFHO%XWWRQUDFBFRPPDQG 5$RPPDQGDOORF@ 
LQLW:LWK6LJQDO%ORFNALGB
^ 
67521*,)6(/)
6(/)FORVH)L[HG9LHZ@ 
UHWXUQ5$6LJQDOHPSW@ 
`@ 
` 
RACのカテゴリ拡張を 
使って簡易に書ける
View間のバインディング 
YRLG
VHWXS 
^ 
:($.,)VHOI
! 


࣠ࣇ࣓࣢࣯ࢽखअࣣࢇ਑ࡨ੠ࡿࡻࢥ࣪ऄ࣡ख࣑ँऍ
 
5$6LJQDOFRPELQH/DWHVW#5$2EVHUYHVHOIWH[W
VHOIUDFBWH[W6LJQDO@ 
UHGXFHALGLGRQHLGWZR
^ 
UHWXUQQLO 
`@VXEVFULEH1H[WALG[
^ 
67521*,)6(/)
6(/)YDOLGDWH@ 
`@ 
! 


ัᩒ૯ࡳࡻ᧻ࢇ࣪ऄ࣡ख࣑ँऍ
 
5$2EVHUYHVHOIUHTXLUHG
VXEVFULEH1H[WA161XPEHU
HQDEOHG
^ 
67521*,)6(/)
LIHQDEOHGERRO9DOXH

More Related Content

PDF
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
PDF
RxJava on Android
PDF
Ruby風Swift NSOperation編
PDF
Sansan様 登壇資料
PDF
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
PPTX
Wpfと非同期
PPTX
本当にあった怖い話し (やきに駆動 2.0)
PDF
Rx java x retrofit
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
RxJava on Android
Ruby風Swift NSOperation編
Sansan様 登壇資料
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
Wpfと非同期
本当にあった怖い話し (やきに駆動 2.0)
Rx java x retrofit

What's hot (20)

PDF
React入門-JSONを取得して表示する
PDF
Miyazaki.js vol.1 スコープの話
PDF
TypeScript 言語処理系ことはじめ
PDF
ECMAScript6による関数型プログラミング
PDF
Postgresql advent calender 2014 using jsonb by ecpg
PPTX
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
PDF
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
KEY
Starting java fx
PPTX
20111204 WebBroser Control Tips for Windows Phone
PPTX
JAWS-UG CLI #14 LT 【”Waiters”機能の使いドコロ】
PDF
これからのJavaScriptー関数型プログラミングとECMAScript6
PDF
C#次世代非同期処理概観 - Task vs Reactive Extensions
PPTX
PDF
WebAPIのバリデーションを、型の力でいい感じにする
PDF
明日から使える Java SE 7
PDF
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
PDF
Unit testing JavaScript with JUnit/JavaFX
PDF
初級者向けレッスン 51回 ─── 例外
PDF
scala-kaigi1-sbt
PPTX
まだDOM操作で消耗してるの?
React入門-JSONを取得して表示する
Miyazaki.js vol.1 スコープの話
TypeScript 言語処理系ことはじめ
ECMAScript6による関数型プログラミング
Postgresql advent calender 2014 using jsonb by ecpg
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
Starting java fx
20111204 WebBroser Control Tips for Windows Phone
JAWS-UG CLI #14 LT 【”Waiters”機能の使いドコロ】
これからのJavaScriptー関数型プログラミングとECMAScript6
C#次世代非同期処理概観 - Task vs Reactive Extensions
WebAPIのバリデーションを、型の力でいい感じにする
明日から使える Java SE 7
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
Unit testing JavaScript with JUnit/JavaFX
初級者向けレッスン 51回 ─── 例外
scala-kaigi1-sbt
まだDOM操作で消耗してるの?
Ad

Viewers also liked (15)

PDF
Android meets RxJava - 渋谷Java#6
PDF
エンジニア戦記 〜小さなチーム、大きな未来〜
PDF
iOS 通信のパフォーマンス改善 ・ iOSオールスターズ登壇資料
PDF
効率的なアプリ開発のベストプラクティス
PDF
minne の API 改善
PDF
インフラで実践したチームビルディングそれはサバ天
PDF
ライブコーディング・Androidのライブラリを作ってみよう
PDF
10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話
PDF
WatchKitを実際にさわってみてわかったこと
PDF
Railsチュートリアルの歩き方 (第4版)
PDF
Information sharing and Experience consistency at Cookpad mobile application
PDF
Ruby 2.4 Internals
PDF
distinctUntilChanged の使いどころ
PDF
DevOps tools for everyone - Vagrant, Puppet and Webmin
PDF
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
Android meets RxJava - 渋谷Java#6
エンジニア戦記 〜小さなチーム、大きな未来〜
iOS 通信のパフォーマンス改善 ・ iOSオールスターズ登壇資料
効率的なアプリ開発のベストプラクティス
minne の API 改善
インフラで実践したチームビルディングそれはサバ天
ライブコーディング・Androidのライブラリを作ってみよう
10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話
WatchKitを実際にさわってみてわかったこと
Railsチュートリアルの歩き方 (第4版)
Information sharing and Experience consistency at Cookpad mobile application
Ruby 2.4 Internals
distinctUntilChanged の使いどころ
DevOps tools for everyone - Vagrant, Puppet and Webmin
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
Ad

Similar to freee社でのReactiveCocoa活用例 (20)

PDF
Sendai.html5#2
PDF
Dev for Citizen Manual
PDF
中・大規模でLaravelを導入するTips
KEY
MVCもやもや話
PDF
サーバーからiOSアプリを変更する
PDF
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
PPTX
Angular js はまりどころ
PPTX
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
PDF
[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成
PDF
SwiftとCocoaPodsで始めるサクサクiOS開発!
PDF
ROS JAPAN Users Group Meetup 03
PDF
jQuery Mobile
PDF
APIMeetup 20170329_ichimura
PDF
Progressive Framework Vue.js 2.0
PDF
MTDDC Meetup HOKKAIDO 2013 KEYNOTE - Movable Type 6
PDF
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
PDF
Driverについて
PDF
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
PPTX
Develop Web Application with Node.js + Express
PDF
Start SQL Server with Docker
Sendai.html5#2
Dev for Citizen Manual
中・大規模でLaravelを導入するTips
MVCもやもや話
サーバーからiOSアプリを変更する
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
Angular js はまりどころ
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成
SwiftとCocoaPodsで始めるサクサクiOS開発!
ROS JAPAN Users Group Meetup 03
jQuery Mobile
APIMeetup 20170329_ichimura
Progressive Framework Vue.js 2.0
MTDDC Meetup HOKKAIDO 2013 KEYNOTE - Movable Type 6
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
Driverについて
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Develop Web Application with Node.js + Express
Start SQL Server with Docker

freee社でのReactiveCocoa活用例