Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ゆるやかなReactiveCocoaの導入
Search
ninjinkun
August 03, 2014
Programming
8
4.8k
ゆるやかなReactiveCocoaの導入
Fablic社でのReactiveCocoaの(ゆるい)導入事例
ninjinkun
August 03, 2014
Tweet
Share
More Decks by ninjinkun
See All by ninjinkun
買収から2ヶ月でシステム統合した話
ninjinkun
0
100
Designer's and Engineer's Thinking Styles
ninjinkun
0
220
Launchable Webinar テストを効率化して生産性を上げる方法
ninjinkun
2
560
ディープリンクの 設計と実装 - iOSDC2017
ninjinkun
18
10k
スマートフォンアプリ開発における共創的な開発チーム
ninjinkun
61
19k
ReSwiftでアプリの状態管理 / Reactive Swift Meetup
ninjinkun
9
17k
フリルのアプリ開発今昔物語
ninjinkun
3
2.2k
プロトタイピング合宿によるデザインリニューアル
ninjinkun
1
3.1k
デザイナーが仕事をしやすいアプリエンジニアを考える
ninjinkun
4
670
Other Decks in Programming
See All in Programming
FindyにおけるTakumi活用と脆弱性管理のこれから
rvirus0817
0
240
Nuances on Kubernetes - RubyConf Taiwan 2025
envek
0
210
Claude Codeで実装以外の開発フロー、どこまで自動化できるか?失敗と成功
ndadayo
3
1.8k
Updates on MLS on Ruby (and maybe more)
sylph01
1
160
『リコリス・リコイル』に学ぶ!! 〜キャリア戦略における計画的偶発性理論と変わる勇気の重要性〜
wanko_it
1
620
ECS初心者の仲間 – TUIツール「e1s」の紹介
keidarcy
0
130
tool ディレクティブを導入してみた感想
sgash708
1
160
複雑なドメインに挑む.pdf
yukisakai1225
2
250
A Gopher's Guide to Vibe Coding
danicat
0
190
250830 IaCの選定~AWS SAMのLambdaをECSに乗り換えたときの備忘録~
east_takumi
0
340
MLH State of the League: 2026 Season
theycallmeswift
0
180
自作OSでDOOMを動かしてみた
zakki0925224
1
1.4k
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
330
21k
Automating Front-end Workflow
addyosmani
1370
200k
It's Worth the Effort
3n
187
28k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
The Cult of Friendly URLs
andyhume
79
6.6k
Docker and Python
trallard
45
3.5k
GitHub's CSS Performance
jonrohan
1032
460k
Building Adaptive Systems
keathley
43
2.7k
Embracing the Ebb and Flow
colly
87
4.8k
The Cost Of JavaScript in 2023
addyosmani
53
8.9k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.8k
Transcript
ΏΔ͔ͳ 3FBDUJWF$PDPBͷಋೖ OJOKJOLVO
ΞδΣϯμ w ͳͥࠓ3FBDUJWF$PDPB 3"$ ͔ w 3FBDUJWF$PDPBͷஈ֊తͳ࠾༻ w .77.ͷ؇͔ͳҠߦ
ҙ w ษڧ͠ͳ͕Βࢿྉ࡞͍ͬͯ·͢ w ݴ༿ͷఆ͍ٛํ͕ਖ਼͘͠ͳ͍Մೳੑ͕͋Γ·͢
ͳͥࠓ3FBDUJWF$PDPB͔ w ΞϓϦͷෳࡶԽ w 8FCαʔϏε࿈ܞΞϓϦͷ૿Ճ w ඇಉظॲཧͷଟ༻
ͳͥࠓ3FBDUJWF$PDPB͔ w ΞϓϦ͕ඇৗʹଟ͘ͷzঢ়ଶzͱzඇಉظॲཧzΛ࣋ͬ ͍ͯΔ w ଟͷ"1*ͱඇಉظʹ௨৴͠ɺঢ়ଶΛదʹߋ৽ ͠ɺϢʔβʔʹදࣔ͢Δ
ͳͥࠓ3FBDUJWF$PDPB͔ w 'SJMͷ-JLF "1*ίʔϧ Ϟσϧͷ-JLF ὑΞΠίϯస ͍͍Ͷͷߋ৽ -JLFͷߋ৽Λ௨ $FMMΛϦϩʔυ
.PEFMΛͯ͠ ৄࡉϏϡʔΛදࣔ ˞σʔλ։ൃػͷͷͰ͢
ͳͥࠓ3FBDUJWF$PDPB͔
ͳͥࠓ3FBDUJWF$PDPB͔ w .PEFMͷߋ৽ɺ௨ɺ7JFXͷߋ৽ w EFMFHBUFϝιουPS/4/PUJpDBUJPO$FOUFS w ίϝϯτɺϢʔβʔͷϑΥϩʔͳͲಉ͡ w खͰঢ়ଶΛಉظ͢ΔϝιουΛॻ͖ଓ͚ΔͷʹݶքΛײ͡Δ w
ΈΜͳ͕ΜͬͯͬͯΔ͚Ͳ w ঢ়ଶͷཧͱඇಉظॲཧΛநԽ͍ͨ͠
ؔܕϦΞΫςΟϒϓϩάϥϛϯά '31 w l'31JTQSPHSBNNJOHXJUIBTZODISPOPVTEBUB TUSFBNTz w 4USFBN w ϢʔβʔͷΫϦοΫ 5XJUUFSͷGFFE
FUDʜ
ؔܕϦΞΫςΟϒϓϩάϥϛϯά '31 w ؔܕݴޠͷύϥμΠϜ͔Β༝དྷ w .JDSPTPGU͕/FUͰ(6*ք۾ʹΊͨ w ༷ʑͳ࣮͕͋Δ w 3FBDUJWF
(SBQFGSVJU :BNQB BLLB w 3Y&YUFOUJPOT 3"$ 3Y+BWB 3Y+4 SFBDU
'31ͷಛ w 5IF3FBDUJWF.BOJGFTUPΑΓ w &WFOU%SJWFOΠϕϯτۦಈ w 4DBMBCMF֦ுੑ w 3FTJMJFOUোͷੑ w
3FTQPOTJWFԠੑ
'31ͷ༻్ w αʔόʔͰΫϥΠΞϯτͰ͑Δ֓೦ w ͕ࣗࢥ͍ͭ͘'31ͷ༻్ w αʔόʔ w νϟοτɺಈը৴ɺΦϯϥΠϯήʔϜͳͲԠੑ͕ٻ ΊΒΕΔͷ
w ΫϥΠΞϯτ w 4/4ɺνϟοτͳͲ"1*Λଟίʔϧ͢ΔΞϓϦɺήʔϜ
εϚϑΥΞϓϦΠϕϯτͩΒ͚ w (6*ͷΠϕϯτ w λοϓɺδΣενϟ w ϋʔυΣΞͷΠϕϯτ w (14ใɺϞʔγϣϯ w
௨৴ͷΠϕϯτ w "1*ίʔϧͱϨεϙϯεड৴ɺΤϥʔॲཧ
εϚϑΥΞϓϦͱ'31 w ΞϓϦ͕ංେԽͯ͘͠ΔͱΠϕϯτͩΒ͚ʹͳΔ w ಛʹ8FCαʔϏεͷΫϥΠΞϯτͰݦஶ w 8FCαʔϏε֤͕ࣾ'31Λར༻࢝͠Ί͍ͯΔ w (JUIVC /FUqJY
αʔόʔ 'BDFCPPL +4 w $IBUXPSL 'SFFF 'BCMJD *ODSFNFOUT
3"$ͷஈ֊తͳ࠾༻
'BCMJDͷ3"$ར༻ϙϦγʔ w 3"$ʹϩοΫΠϯ͞ΕΔΑ͏ͳ࣮ආ͚Δ w 3"$ΦϒδΣΫτΛϞδϡʔϧؒͷΠϯλʔϑΣ Πεʹ༻͠ͳ͍ w ·ͩͪΌΜͱ3"$ΛཧղͰ͖͍ͯͳ͍ͷͰʜ
3FBDUJWF$PDPBͷஈ֊తͳ࠾༻ w 'BCMJDͰͷ3"$ͷ༻్ w ςΩετͷ7BMJEBUJPO w %FMFHBUFϥούʔ w ,70ϥούʔ w
.77.ͷͱ͜ΖͰޙड़
ςΩετͷ7BMJEBUJPO w όϦσʔγϣϯͯ͠ϘλϯΛFOBCMFʹ͢Δ w 3"$ͷ3&"%.&ʹྫ͕͋ΔͷͰͱΓ͋͑ͣಋೖ ͢Δʹ͏͚ͬͯͭ w ྫ͑͜ΕۜߦͷࢧళΛೖྗͤ͞Δίʔυ RAC(self.navigationItem.rightBarButtonItem, enabled)
= [_branchCodeTextField.rac_textSignal map:^id(NSString *text) { return @(text && [ValidatioUtil isValidBranchCode:text]); }];
EFMFHBUFϥούʔ w EFMFHBUFϝιουΛΘͣʹͦͷͰCMPDLΛͤ Δ w #MPDLT,JUͱಉ͡༻్ UIAlertView *alertView = [[UIAlertView
alloc] initWith…]; [[alertView rac_buttonClickedSignal] subscribeNext:^(NSNumber *buttonIndex) { switch ([buttonIndex integerValue]) { case 1: do some thing… break; case 2: do something … break; default: break; } }]; [alertView show];
.77.ͷ ؇͔ͳҠߦ
.77.ͱ w .PEFM7JFX7JFX.PEFM w 7JFX.PEFM w 7JFXΛඳը͢ΔͨΊͷঢ়ଶอ࣋ w 7JFXΠϕϯτͷ݁ՌΛ.PEFMୡ 7JFX
7JFX.PEFM .PEFM
3"$Ͱ.77. w 7JFX7JFX.PEFMؒΛCJOEJOH w 7JFX.PEFMͷߋ৽ࣗಈతʹ7JFXʹө 7JFX 7JFX.PEFM .PEFM 6*7JFX 6*7JFX$POUSPMMFS
3"$ͰCJOEJOH RAC(self.detailMessageLabel, text) = [RACObserve(self, detailMessage) filter:^BOOL(NSString *message) { return message.length; }];
ͳͥ.77.͕ඞཁ͔ w -JLFͷྫ 7JFX.PEFMͷ -JLF 7JFX.PEFMͷߋ৽Λݕ ࣗಈతʹ$FMMΛߋ৽ 7JFX.PEFMΛ ͯ͠ৄࡉϏϡʔΛදࣔ
ͳͥ.77.͕ඞཁ͔ w 4/4ΞϓϦͰঢ়ଶΛ7JFX$POUSPMMFSؒͰڞ༗͢ Δ͜ͱ͕ଟ͍ w -JLF w ίϝϯτ w ΤϯτϦใͷՃɺฤूɺআ
w 7JFX.PEFMΛCJOE͢Ε7JFXࣗಈߋ৽ʹ͍ͨ͠
3FBDUJWF$PDPBຊͷ.77. w 3"$7JFX.PEFMΛܧঝͯ͠7.Λ࣮ w )551ϦΫΤετͷ։࢝·Ͱ7.͕࣋ͭ w 7JFX$POUSPMMFSʹ3"$4JHOBMΛฦͯ͠ ॲཧͷޭɺࣦഊΛड͚ͱΔ w 3"$4JHOBMґଘͷઃܭʹͳΔͷͰࠓͷͱ
͜Ζෆ࠾༻
ͷߟ͑ΔΏΔ͍.77. w ͱʹ͔͘.VUBCMFͳͷ7.ʹूΊΔ w +40/͔Βੜ͞Εͨ/40CKFDU*NNVUBCMFʹ w 7.ʹର͢ΔϢχοτςετΛॻ͘ w 3"$CJOEͷΈʹ͏ FLItem
*item = self.items[indexPath.item]; ! __weak typeof(self) weakSelf = self; // ৄࡉͰLikeΛ֎ͨ͠ΒҰཡͰLike͕֎ΕΔΑ͏ʹ͢Δ [RACObserve(item, liked) subscribeNext:^(id x) { [weakSelf.collectionView reloadItemsAtIndexPaths:@[indexPath]]; }];
'SJMͷ7. w ෳͷ+40/༝དྷ/40CKFDUΛ͍࣋ͬͯΔ w λΠϜϥΠϯͱৄࡉϏϡʔͷ"1*͝ͱʹऔΕΔใ ͷৄࡉ͕ҧ͏ͷͰɺ߹ͯ͠܅͚ͩͷ.PEFMΛ࡞ Δඞཁ͕͋Δ
'SJMͷ7. λΠϜϥΠϯ"1* ৄࡉ"1* αΠζ ૹྉ ૹํ๏ ίϝϯτ ໊ ϒϥϯυ
Ձ֨ αΠζ ૹྉ ૹํ๏ ίϝϯτ ໊ ϒϥϯυ Ձ֨ 7JFX.PEFM
'SJMͷ7. w 7JFX.PEFMΛ3"$ͰCJOE w 7JFX.PEFMΛߋ৽͢Δ w 7JFXʹࣗಈతʹঢ়ଶ͕ө͞ΕΔ w +40/ͷू ঢ়ଶͷू
7JFXͷಉظ αΠζ ૹྉ ૹํ๏ ίϝϯτ ໊ ϒϥϯυ Ձ֨ 7JFX.PEFM
'31ͷڭࡐ
5IFJOUSPEVDUJPOUP3FBDUJWF 1SPHSBNNJOHZPVWFCFFONJTTJOH w IUUQTHJTUHJUIVCDPNTUBMU[ FFCDBCDG w ϦΞΫςΟϒ·ͱΊ w ೖฤͱͯ͠Ұ൪ྑ͍ͱࢥ͏
1SJODJQMFTPG3FBDUJWF 1SPHSBNNJOH w $PVSTFSB w 4DBMBͱBLLBΛͬͨ'31ͷߨٛ w .BSUJO0EFSTLZઌੜ͔Βश͑Δ w '31ͷجૅΛஸೡʹղઆ
w ΫϥΠΞϯτΞϓϦͷͳ͍ w 3"$Λ͍͍͚ͨͩͳΒΦʔόʔεϖοΫ͔
3FBDUJWF1SPHSBNNJOHJOJ04 w 3FBDUJWF$PDPBͷຊ w ϖʔδ͘Β͍ w .77.ͷΓํॻ͍ͯ͋Δ w 3"$ͷυΩϡϝϯτͰॆઆ͋Γ w
ݸਓతʹಡΜͰଛͳ͔ͬͨ
·ͩΑ͘ཧղͰ͖ͯͳ͍͜ͱ w ଞͷ'31ϑϨʔϜϫʔΫͱ3"$ͷ༻ޠରԠ w $MBTTJD'31 4JHOBM'VODUJPO w Ξχϝʔγϣϯͱͷ૬ੑ͕ѱ͍આ
·ͱΊ w '31ͱεϚʔτϑΥϯΞϓϦͷؔʹ͍ͭͯઆ໌͠ ·ͨ͠ w 3FBDUJWF$PDPBͷஈ֊తͳ࠾༻ w 7BMJEBUJPOͰͷ༻ɺEFMFHBUFϥούʔ w .77.ͷ؇͔ͳҠߦ
w զʑ·ͩ3"$தಟͰͳ͍ʜ
࣭ٙԠ w .77.ͷղऍ͕ҧ͏ͷͰͳ͍͔ɺωοτϫʔΫ ॲཧ·Ͱ7.ʹ࣋ͨͤΔํ͕ࣗવͩͱࢥ͏ w 7.ʹ࣋ͨͤͨํ͕ΑΓ៉ྷʹॻ͚Δͷཧղ͠ ͍ͯΔ͕ɺ7.ͷΠϯλʔϑΣΠεʹ3"$4JHOBM ΛΘͳ͘ͳΒͳ͚Ε͍͚ͳ͘ͳΔͷͰɺࠓͷ ͱ͜Ζ͍ͬͯͳ͍