Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
yo_waka
23,564 views
freee社でのReactiveCocoa活用例
ReactiveCocoa Tokyoで発表した資料です。
Technology
◦
Read more
23
Save
Share
Embed
Embed presentation
Download
Downloaded 17 times
1
/ 33
2
/ 33
3
/ 33
4
/ 33
5
/ 33
6
/ 33
7
/ 33
8
/ 33
9
/ 33
10
/ 33
11
/ 33
12
/ 33
13
/ 33
14
/ 33
15
/ 33
16
/ 33
17
/ 33
18
/ 33
19
/ 33
20
/ 33
21
/ 33
22
/ 33
23
/ 33
24
/ 33
25
/ 33
26
/ 33
27
/ 33
28
/ 33
29
/ 33
30
/ 33
31
/ 33
32
/ 33
33
/ 33
More Related Content
PPTX
本当にあった怖い話し (やきに駆動 2.0)
by
Oda Shinsuke
PDF
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
by
Syo Ikeda
PDF
RxJava on Android
by
yo_waka
PDF
Ruby風Swift NSOperation編
by
Hisakuni Fujimoto
PDF
Sansan様 登壇資料
by
Daisuke Nagata
PDF
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
by
株式会社ランチェスター
PPTX
Wpfと非同期
by
yone64
PDF
Rx java x retrofit
by
Shun Nakahara
本当にあった怖い話し (やきに駆動 2.0)
by
Oda Shinsuke
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
by
Syo Ikeda
RxJava on Android
by
yo_waka
Ruby風Swift NSOperation編
by
Hisakuni Fujimoto
Sansan様 登壇資料
by
Daisuke Nagata
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
by
株式会社ランチェスター
Wpfと非同期
by
yone64
Rx java x retrofit
by
Shun Nakahara
What's hot
PDF
React入門-JSONを取得して表示する
by
regret raym
PDF
Miyazaki.js vol.1 スコープの話
by
Nobuhiro Nakashima
PDF
TypeScript 言語処理系ことはじめ
by
Yu Nobuoka
PDF
ECMAScript6による関数型プログラミング
by
TanUkkii
PDF
Postgresql advent calender 2014 using jsonb by ecpg
by
Toshi Harada
PPTX
Retrofit2 &OkHttp でAndroidのHTTP通信が快適だにゃん
by
removed_96f4639f4009e61a478bf38f188e8404
PDF
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
by
Tomohiro Kumagai
KEY
Starting java fx
by
Kazuhiro Eguchi
PPTX
20111204 WebBroser Control Tips for Windows Phone
by
Kenji Wada
PPTX
JAWS-UG CLI #14 LT 【”Waiters”機能の使いドコロ】
by
Ayumi Kobukata
PDF
これからのJavaScriptー関数型プログラミングとECMAScript6
by
TanUkkii
PDF
C#次世代非同期処理概観 - Task vs Reactive Extensions
by
Yoshifumi Kawai
PPTX
Jsonp
by
Kiminari Homma
PDF
WebAPIのバリデーションを、型の力でいい感じにする
by
Takuya Kikuchi
PDF
明日から使える Java SE 7
by
Yuichi Sakuraba
PDF
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
by
y_taka_23
PDF
Unit testing JavaScript with JUnit/JavaFX
by
Shinya Mochida
PDF
初級者向けレッスン 51回 ─── 例外
by
higaki
PDF
scala-kaigi1-sbt
by
Kenji Yoshida
PPTX
まだDOM操作で消耗してるの?
by
IRI MO
React入門-JSONを取得して表示する
by
regret raym
Miyazaki.js vol.1 スコープの話
by
Nobuhiro Nakashima
TypeScript 言語処理系ことはじめ
by
Yu Nobuoka
ECMAScript6による関数型プログラミング
by
TanUkkii
Postgresql advent calender 2014 using jsonb by ecpg
by
Toshi Harada
Retrofit2 &OkHttp でAndroidのHTTP通信が快適だにゃん
by
removed_96f4639f4009e61a478bf38f188e8404
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
by
Tomohiro Kumagai
Starting java fx
by
Kazuhiro Eguchi
20111204 WebBroser Control Tips for Windows Phone
by
Kenji Wada
JAWS-UG CLI #14 LT 【”Waiters”機能の使いドコロ】
by
Ayumi Kobukata
これからのJavaScriptー関数型プログラミングとECMAScript6
by
TanUkkii
C#次世代非同期処理概観 - Task vs Reactive Extensions
by
Yoshifumi Kawai
Jsonp
by
Kiminari Homma
WebAPIのバリデーションを、型の力でいい感じにする
by
Takuya Kikuchi
明日から使える Java SE 7
by
Yuichi Sakuraba
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
by
y_taka_23
Unit testing JavaScript with JUnit/JavaFX
by
Shinya Mochida
初級者向けレッスン 51回 ─── 例外
by
higaki
scala-kaigi1-sbt
by
Kenji Yoshida
まだDOM操作で消耗してるの?
by
IRI MO
Viewers also liked
PDF
Android meets RxJava - 渋谷Java#6
by
yo_waka
PDF
エンジニア戦記 〜小さなチーム、大きな未来〜
by
Yuki Hirai
PDF
iOS 通信のパフォーマンス改善 ・ iOSオールスターズ登壇資料
by
yohei sugigami
PDF
効率的なアプリ開発のベストプラクティス
by
yayugu
PDF
minne の API 改善
by
Toshihiro Gotou
PDF
インフラで実践したチームビルディングそれはサバ天
by
ume3_
PDF
ライブコーディング・Androidのライブラリを作ってみよう
by
Masataka Kono
PDF
10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話
by
Masataka Kono
PDF
WatchKitを実際にさわってみてわかったこと
by
Shuichi Tsutsumi
PDF
Railsチュートリアルの歩き方 (第4版)
by
Yohei Yasukawa
PDF
Information sharing and Experience consistency at Cookpad mobile application
by
ichiko_revjune
PDF
Ruby 2.4 Internals
by
Koichi Sasada
PDF
distinctUntilChanged の使いどころ
by
正之 安宅
PDF
DevOps tools for everyone - Vagrant, Puppet and Webmin
by
postrational
PDF
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
by
Masataka Kono
Android meets RxJava - 渋谷Java#6
by
yo_waka
エンジニア戦記 〜小さなチーム、大きな未来〜
by
Yuki Hirai
iOS 通信のパフォーマンス改善 ・ iOSオールスターズ登壇資料
by
yohei sugigami
効率的なアプリ開発のベストプラクティス
by
yayugu
minne の API 改善
by
Toshihiro Gotou
インフラで実践したチームビルディングそれはサバ天
by
ume3_
ライブコーディング・Androidのライブラリを作ってみよう
by
Masataka Kono
10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話
by
Masataka Kono
WatchKitを実際にさわってみてわかったこと
by
Shuichi Tsutsumi
Railsチュートリアルの歩き方 (第4版)
by
Yohei Yasukawa
Information sharing and Experience consistency at Cookpad mobile application
by
ichiko_revjune
Ruby 2.4 Internals
by
Koichi Sasada
distinctUntilChanged の使いどころ
by
正之 安宅
DevOps tools for everyone - Vagrant, Puppet and Webmin
by
postrational
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
by
Masataka Kono
Similar to freee社でのReactiveCocoa活用例
PDF
Reactive cocoaをかじってみた。
by
孝文 田村
PDF
はじめてのReactiveCocoa
by
章平 福井
PPTX
Reactive Programming
by
maruyama097
PDF
Prism + ReactiveProperty入門
by
一希 大田
PDF
RxSwift
by
Kosuke Usami
PDF
RxSwiftをバインディングツールとして使ってみる
by
Hironytic
KEY
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
by
Makoto Setoh
PPTX
歌舞伎座Tech Rx会
by
Kaora Shibacaki
KEY
MVCもやもや話
by
Tetsuya Kaneuchi
PDF
Xamarin で ReactiveUI を使ってみた
by
Hironov OKUYAMA
PDF
lazy var の特徴を知る #cocoa_kansai #cswift
by
Tomohiro Kumagai
PDF
RestKitの紹介 - Webサービスのクライアント実装補助フレームワーク -
by
次朗 永島
PDF
FRP - Functional Reactive Programming
by
Ryo Kamimura
KEY
Blocksの活用法
by
Hidetoshi Mori
PPTX
Spring 5に備えるリアクティブプログラミング入門
by
Takuya Iwatsuka
PDF
Swift bond コードリーディング
by
Shun Nakahara
PPTX
MVVM入門
by
Kazutoshi Urabe
PPTX
【Potatotips #30】RxJavaを活用する3つのユースケース
by
Hiroyuki Kusu
PPTX
2012 05-19第44回cocoa勉強会発表資料
by
OCHI Shuji
PDF
Tide - SmalltalkでSPA
by
Masashi Umezawa
Reactive cocoaをかじってみた。
by
孝文 田村
はじめてのReactiveCocoa
by
章平 福井
Reactive Programming
by
maruyama097
Prism + ReactiveProperty入門
by
一希 大田
RxSwift
by
Kosuke Usami
RxSwiftをバインディングツールとして使ってみる
by
Hironytic
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
by
Makoto Setoh
歌舞伎座Tech Rx会
by
Kaora Shibacaki
MVCもやもや話
by
Tetsuya Kaneuchi
Xamarin で ReactiveUI を使ってみた
by
Hironov OKUYAMA
lazy var の特徴を知る #cocoa_kansai #cswift
by
Tomohiro Kumagai
RestKitの紹介 - Webサービスのクライアント実装補助フレームワーク -
by
次朗 永島
FRP - Functional Reactive Programming
by
Ryo Kamimura
Blocksの活用法
by
Hidetoshi Mori
Spring 5に備えるリアクティブプログラミング入門
by
Takuya Iwatsuka
Swift bond コードリーディング
by
Shun Nakahara
MVVM入門
by
Kazutoshi Urabe
【Potatotips #30】RxJavaを活用する3つのユースケース
by
Hiroyuki Kusu
2012 05-19第44回cocoa勉強会発表資料
by
OCHI Shuji
Tide - SmalltalkでSPA
by
Masashi Umezawa
freee社でのReactiveCocoa活用例
1.
freee社での Reactive Cocoa
活用例 ReactiveCoaoa Tokyo #rac_tokyo @yo_waka 2014/10/18
2.
初めまして @yo_waka •
freeeという会計サービスのスタートアップで Web側とiOS/Androidアプリを作ってます • iOSアプリ開発歴(2014/01~) 以前*.frameworkを仕事で少し弄ってたくらい • JavaScriptはそこそこ
3.
freeeのiOSアプリ • 確定申告や小規模法人決算を
カンタンに • 既にWeb版がある • モバイルは基本機能を実装しつ つ、出先などでよりカンタン にデータ登録したり、外部機 器と連携したり
4.
ReactiveCocoa • 弊社アプリではコアライブラリとして使ってい
ます(新規開発だから使えたというのも理由) • RAC3とswiftの話しはしません! (@ikesyoさんがしてくれるはず・・) • freee社での導入の経緯とどう使っているかをご 紹介します
5.
アプリ開発談 • ある2013年12月の風景
• 「ユーザーの利便性向上の一環で、ウチでiPhone アプリを出そうと思う。1月から確定申告シーズ ンになって触ってくれる人も増えるので、来月出 したい」
6.
「来月出したい」 (゚Д゚)
7.
短期間リリース • -
エンジニア1人(アプリはほぼ未経験) 途中から1人エンジニアが参加して2人に • - 開発期間は1ヶ月
8.
でも • 短期間リリースだからといっても、出して終了ではない
ので、機能追加はしていかないといけない 最低限の機能でもちゃんと使いやすく作りたい • 会計サービスは結構UIが複雑 • スタートアップで後から設計変更してる余裕ない (いきなり大ヒット!とかだと話しは別かも) • なるべく長期間もちこたえられる設計を最初から模索す る必要がある
9.
変更に強い設計って なんだ
10.
サービスの特徴 • 会計データの入力時、ユーザーがViewの状態を
変化させることによって別のViewを変化、ある いは追加/削除するケースが多い => Viewの状態管理が複雑 • ユーザーが柔軟に会計用のデータセットを変え られるため、データの変更に応じてViewを再描 画するケースが多い => 複数のモデルを管理しないといけない
11.
(拡張)MVC Model UIViewController
Storyboard UIView 操作 イベント 呼び出し
12.
MVCの問題点 • シンプルな構造なら問題ない
• Fat UIViewController/Model • UIViewController+ViewsとModelは1:1とは限らないので、 ビジネスロジックが散らばる • APIどこのレイヤが叩くねん問題 • 画面内のイベントが増えると管理しずらい • Web版のクライアントMVCで上記の問題を抱えている
13.
MVVM ViewModel UIViewController
Story board UIView 呼び出し イベント Model 操作 イベント 呼び出し
14.
ViewModel • UIViewControllerの状態管理
• APIリクエストの発行 • Model(s)の操作
15.
と、いうわけで
16.
freeeアプリ構成 ViewModel UIViewController
Story board UIView RAC Model (Mantle) 操作 RAC API Client (AFNetworking) RAC
17.
MVVMの レイヤ間をRACで繋ぐ
18.
ReactiveCocoa • UIViewControllerとView間のイベント管理
• View間のデータバインディング • UIViewControllerとViewModel間のデータバインディング • ViewModelとAPIClient間のデータバインディング
19.
UIViewControllerとView間の イベント管理 YRLG
20.
VHWXS9LHZV ^ 8,1LE IL[HG1LE
8,1LEQLE:LWK1LE1DPH#6RPH1LE1DPHEXQGOHQLO@ VHOIIL[HG9LHZ IL[HG1LELQVWDQWLDWH:LWK2ZQHUVHOIRSWLRQVQLO@@ VHOIYLHZDGG6XEYLHZVHOIIL[HG9LHZ@ ! :($.,)VHOI
21.
! ࣇࣽऍࣕअࣶࣙऍࡨ༇ࡱࢨࡻࢥ࣭ࣿखࢮᦻࡴࢧ VHOIIL[HG9LHZFDQFHO%XWWRQUDFBFRPPDQG
5$RPPDQGDOORF@ LQLW:LWK6LJQDO%ORFNALGB
22.
^ 67521*,)6(/)
23.
6(/)FORVH)L[HG9LHZ@ UHWXUQ5$6LJQDOHPSW@ `@
` RACのカテゴリ拡張を 使って簡易に書ける
24.
View間のバインディング YRLG
25.
VHWXS ^ :($.,)VHOI
26.
! ࣠ࣇ࣓࣯ࢽखअࣣࢇࡨࡿࡻࢥ࣪ऄ࣡ख࣑ँऍ 5$6LJQDOFRPELQH/DWHVW#5$2EVHUYHVHOIWH[W
27.
VHOIUDFBWH[W6LJQDO@ UHGXFHALGLGRQHLGWZR
28.
^ UHWXUQQLO `@VXEVFULEH1H[WALG[
29.
^ 67521*,)6(/)
30.
6(/)YDOLGDWH@ `@ !
ัᩒ૯ࡳࡻ᧻ࢇ࣪ऄ࣡ख࣑ँऍ 5$2EVHUYHVHOIUHTXLUHG
31.
VXEVFULEH1H[WA161XPEHU HQDEOHG
32.
^ 67521*,)6(/)
33.
LIHQDEOHGERRO9DOXH
34.
^ 6(/)YDOLGDWH@ `
`@ ! (PDLO࣯ࢽखअࣣ૯ࡳࡻ᧻ࢇ࣪ऄ࣡ख࣑ँऍ 5$2EVHUYHVHOILV(PDLO)LHOG
35.
VXEVFULEH1H[WA161XPEHU HQDEOHG
36.
^ 67521*,)6(/)
37.
LIHQDEOHGERRO9DOXH
38.
^ 6(/)YDOLGDWH@ `
`@ RACObserveとTextSignalを まとめてsubscribe プロパティの変更を RACObserveで監視して subscribe
39.
UIViewControllerとViewModel間 のバインディング YRLG
40.
IHWFK2EMHFWV ^ 693URJUHVV+8'VKRZ:LWK6WDWXV16/RFDOL]HG6WULQJ#/2$',1*QLO
41.
PDVN7SH693URJUHVV+8'0DVN7SHOHDU@ ! :($.,)VHOI
42.
! 9LHZ0RGHOࡧࢥ$3,ࢮହࡠࢂ࣠खࣰअ࣭ࣿखࢮUHORDG
ࣂःखࢆࢥࣻࣝࣕख࣒ࢮᝊᐱ VHOIYLHZ0RGHOIHWFKROOHFWLRQ@VXEVFULEH1H[WALGREM
43.
^ 693URJUHVV+8'GLVPLVV@ !
67521*,)6(/)
44.
6(/)WDEOH9LHZUHORDG'DWD@ `HUURUA16(UURU HUURU
45.
^ 166WULQJ HUURU0HVVDJH HUURUXVHU,QIR#HUURUBPHVVDJHVBWRBGLVSOD@
693URJUHVV+8'VKRZ(UURU:LWK6WDWXVHUURU0HVVDJH@ `@ ` ViewModelは RACSignalを返す
46.
ViewModelとAPIClient間の バインディング 5$6LJQDO
47.
IHWFK:DOOHW7[QV ^ LIVHOIORDGLQJ
(6
48.
^ UHWXUQ5$6LJQDOHPSW@ `
VHOIORDGLQJ (6 ! APIClientはRACSignalを返す 5$6LJQDO VLJQDO $SLOLHQWVKDUHG,QVWDQFH@ VLJQDO:LWK5HTXHVW#*(7 APIコールの結果をsubscriber SDWK#$3,85/ SDUDPHWHUVSDUDPV@ ! で受け取る :($.,)VHOI
49.
! आ࣓ࣷऍ࣓ࢮࣼ࣡अࣉः࣓૯ࡳࢂ9LHZ0RGHOࢇ৶༧ UHWXUQVLJQDOGR1H[WA16'LFWLRQDU UHVSRQVH2EMHFW
50.
^ 67521*,)6(/)
51.
! IRU16'LFWLRQDU REMLQUHVSRQVH2EMHFW#PRGHOV@
52.
^ 16(UURU HUURU QLO
1LFH0RGHO PRGHO 07/-621$GDSWHUPRGHO2IODVV1LFH0RGHOFODVV@IURP-621'LFWLRQDUREM HUURU HUURU@ ! LIHUURU QLO
53.
^ 6(/)FROOHFWLRQDGG2EMHFWPRGHO@ `
` `@GR(UURUA16(UURU HUURU
54.
^ 67521*,)6(/)
55.
6(/)ORDGLQJ 12 `@
` doNextでコールバックを書 きつつRACSignalを返せる
56.
ViewModelとAPIClient間の バインディング
ࢼࣉ࣓ࣕखࣉऍࢮଯยࡳࢂ࠵ऀख࣐खవࢄધှᄚᓌࢇัឃࢆ࣡खࣙࢮଯยࡵࢧ࠶ 5$6LJQDO
57.
ORJLQ16'LFWLRQDU
58.
SDUDPV ^ :($.,)VHOI
59.
! 5$6LJQDO VLJQDO VHOIIHWFK7RNHQSDUDPV@IODWWHQ0DSALGUHVSRQVH2EMHFW
60.
^ 67521*,)6(/)
61.
5$6LJQDOࢮᣎࡵ$3,ऄࣉࣂ࣓ࢮग़દࢇᝁࡳ࠵ ᔬၯࢮ5$6LJQDOࢃରଯࢧ UHWXUQ6(/)JHW8VHU'DWD@FRPELQH/DWHVW:LWK6(/)IHWFK,URLUR@
UHIUHVKDFKH@@ `@ UHWXUQVLJQDO `
62.
なぜ ReactiveCocoa?
63.
勉強し始めの頃 • まずは認証/APIクライアントちゃんと書かない
となー • よい設計の参考になりそうなライブラリのコー ドをいろいろ読んでみた • GitHub社のoctkit.objcを読んだ
64.
octokit.objc • OctoKit
is a Cocoa and Cocoa Touch framework for interacting with the GitHub API, built using AFNetworking, Mantle, and ReactiveCocoa.
65.
ソースめっちゃ綺麗 これ参考にしよう
66.
RACのドキュメント見た • @ikesyoさんのQiitaに資料がまとまってる
http://qiita.com/ikesyo/items/ff0fdc179baa92a144ee • Functional Reactive Programming in iOS 多分唯一の?ReactiveCocoaとMVVMについて書かれている本 https://leanpub.com/iosfrp • RACSignalはどんなストリーム上にも作れることが分かった • API周りだけじゃなくて、コンポーネント間のデータのやり取りに使える んじゃね? • RACObserve使えばシンプルにデータバインディングできるし、Viewで も使えそう
67.
かくしてロックイン されました
68.
ロックインのPros/Cons • Pros
• MVVMの各コンポーネント間のコードが統一される (=新しく入った人の学習コスト減) • 1つSignal設計すると使い回しがしやすい • Signal設計楽しいれす • カテゴリ拡張(NSNotification#rac_addObserverForNameとかUITextField#rac_textSignal)がと にかく便利 • RACObserveサイコー • Cons • SubscriberやRACSignalのコードを理解するのが難しい・・ • 性質上既存のアプリに導入するのは大変(腕力を持ったエンジニアが必要) • RACが死ぬと我々も死ぬ
69.
RACの学習コスト • JVMの世界でもリアクティブプログラミングが
盛り上がってきてる(ReactiveStream) • AndroidでMVVMやる場合も同じ考え方で使い 回しが効くので便利(freeeではAndroidアプリ でもRxJavaを使ってMVVM構成にしています) • まずはRACObserveでKVOの置き換えから!
70.
ありがとうございました
71.
iOS/Androidについて語りたい人いたらいつでも 遊びにきてください。 !
夕飯出ます お酒もありますので 気軽に声かけてください
Download