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
橋の下で安心して寝るための 『iOSアプリ設計パターン入門』
Search
kameike
January 15, 2019
Technology
0
2k
橋の下で安心して寝るための 『iOSアプリ設計パターン入門』
kameike
January 15, 2019
Tweet
Share
More Decks by kameike
See All by kameike
LeanScrum
kameike
3
1.2k
サポートを求めてAppleに電話するまでの道のり
kameike
4
2k
header-comment
kameike
5
1.4k
Farewell SnapKit
kameike
1
1.6k
Other Decks in Technology
See All in Technology
Site Reliability Engineering on Kubernetes
nwiizo
6
3.7k
大学教員が押さえておくべき生成 AI の基礎と活用例〜より効率的な教育のために〜
soh9834
1
170
現実的なCompose化戦略 ~既存リスト画面の置き換え~
sansantech
PRO
0
140
メンバーがオーナーシップを発揮しやすいチームづくり
ham0215
2
340
生成AIを活用した機能を、顧客に提供するまでに乗り越えた『4つの壁』
toshiblues
1
170
プロダクト価値を引き上げる、「課題の再定義」という習慣
moeka__c
0
160
AIアプリケーション開発でAzure AI Searchを使いこなすためには
isidaitc
1
260
ドメイン駆動設計によるdodaダイレクトのリビルド実践 / Rebuild practice of doda direct with domain-driven design
techtekt
0
440
実践している探索的テストの進め方 #jasstnano
makky_tyuyan
1
130
月間60万ユーザーを抱える 個人開発サービス「Walica」の 技術スタック変遷
miyachin
5
1.3k
Agentic AI時代のプロダクトマネジメントことはじめ〜仮説検証編〜
masakazu178
0
230
Windows Server 2025 へのアップグレードではまった話
tamaiyutaro
2
230
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
298
20k
The Cost Of JavaScript in 2023
addyosmani
47
7.2k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
980
Code Review Best Practice
trishagee
65
17k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
30
2.1k
GitHub's CSS Performance
jonrohan
1030
460k
Bash Introduction
62gerente
610
210k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
3
370
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
Fireside Chat
paigeccino
34
3.2k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
98
18k
Transcript
ڮͷԼͰ҆৺ͯ͠৸ΔͨΊͷ ʰJ04ΞϓϦઃܭύλʔϯೖʱ QJYJWJOD !LBNFJLF
!LBNFJLF w ͷ݄͙Β͍͔ΒQJYJWͰಇ͍͍ͯ·͢ w Ԭग़
ʰΦϒδΣΫτࢦʹ͓͚Δ࠶ར༻ͷͨΊͷσβΠϯύλʔϯʱ
ຊ
lઃܭͦͷϓϩδΣΫτͷཁ݅νʔϜنɺܦݧͳͲʹΑͬ ͯࠨӈ͞Ε·͢ɻ͜ͷઃܭύλʔϯ͕ઈରʹͯ·Δͱ͍ ͏ɺ͍ΘΏΔۜͷؙ͋Γ·ͤΜɻz
lࣄલʹݻఆԽ͞ΕͨϚελʔϓϥϯʹै͏ͷͰͳ͘ɺͦͷ ࣌ʑͷঢ়گʹ߹Θͤͯॊೈʹमਖ਼ɺ෮ݪɺ֦ுɺվળ͢Δ͜ͱ ͕ॏཁz Christopher Alexander
ܞΘ͍ͬͯΔ ϓϩμΫτʹͱͬͯϕλʔͳ ઃܭͱͳΜͩΖ͏ʜ
έʔεόΠέʔε ΈΜͳݴ͍ͬͯΔ͠ʜ
ࠓ͕͍ࣗͬͯΔநԽ ྑ͍ํɺਖ਼͍͠ํʹ ͔͍ͬͯΔͷͩΖ͏͔ʁ
ͦΜͳͱ͖ʜ
lϩʔϚ࣌ͷΤϯδχΞɺ ࣗͷݐͯͨڮͷԼͰ ͠Β͘ա͝͞ͳ͚ΕͳΒͳ͔ͬͨɻz ʰ੬ऑੑʦԼʧʕʕෆ࣮֬ͳੈքΛੜ͖ԆͼΔ།Ұͷߟ͑ํʱɹφγʔϜɾχίϥεɾλϨϒ ݄Ӵ ઍ༿හੜॱ
ڮͷԼͰ৸ͯΔ͕ࣗ ͨͲΓண͍ͨઃܭ େʹ͍͍ͯ͠ઃܭ
͕ࣗݐͯͨ ڮͷԼͰ͑ͯΒͳ͍ͨΊʹʜ
͜Μͳʹศརʂ ʰJ04ΞϓϦઃܭύλʔϯೖʱ
lγϯϓϧͳγεςϜ͔ΒਐԽͯ͠ෳࡶͳγεςϜ͕ੜ·ΕΔͷɺ ҆ఆͨ͠தؒతͳܗଶ͕͋Δͱ͖͚ͩͰ͢ɻ݁Ռͱͯ͠ੜ·ΕΔ ෳࡶͳܗଶɺඞવతʹώΤϥϧΩʔͷ͋ΔͷʹͳΓ·͢ɻz ੈքγεςϜͰಈ͘ʕ͍·ى͖͍ͯΔ͜ͱͷຊ࣭Λ͔ͭΉߟ͑ํυωϥɾ̝ɾϝυζ ࢬኍ३ࢠ খాཧҰॱ
ෳࡶ͞ ʰγϯϓϧͳதؒঢ়ଶʱͷ Έ߹ΘʹΑΓ͛͠ΒΕΔ
ઃܭ 㲈 ύλʔϯԽͱύλʔϯͷ֊Խ Ͱෳࡶ͞ΛΓ͜ͳ͍ͯ͘͠
Christopher Alexander
ύλʔϯɾϥϯήʔδతͳະདྷΛͭ͘ΔͨΊͷݴޠ ϦΞϦςΟɾϓϥε Ҫఉਸ ஶ ฤू த೮ത ஶ தฏଂ
ஶ ߐߒҰ ஶ தହਓ ஶ ӋੜాӫҰ ஶ IUUQXFCTGDLFJPBDKQdJCBQBQFST1631-40$@1SPQFSUJFTQEG
IUUQTXXXTMJEFTIBSFOFUUBLBTIJJCBUIFOBUVSFPGPSEFS
छྨͷ ઃܭͷύλʔϯ छྨͷநతͳঢ়ଶ
6*,JU IUUQTEFWFMPQFSBQQMFDPNMJCSBSZBSDIJWFEPDVNFOUBUJPO$PDPB$PODFQUVBM$PSF"OJNBUJPO@HVJEF *OUSPEVDUJPO*OUSPEVDUJPOIUNMBQQMF@SFGEPDVJE51
ෳࡶ͞ΛΓ͜ͳ͢ʹ ʰγϯϓϧͳதؒঢ়ଶʱ͕ඞཁ
ઃܭύλʔϯ 㲈 ʰγϯϓϧͳதؒঢ়ଶʱͱ ͦͷ͍ํͷΧλϩά
J04ઃܭύλʔϯͷཱͪҐஔ 4XJGUͷදݱ Ϗδωεཁٻ ʹର͢Δදݱ ϥΠϒϥϦ044܈ ઃܭύλʔϯ
Ұൠతͳઃܭύλʔϯͷٞ 4XJGUͷදݱ Ϗδωεཁٻ ʹର͢Δදݱ ϥΠϒϥϦ044܈ ઃܭύλʔϯ
ʰJ04ઃܭύλʔϯೖʱͷٞͷΧόϨοδ 4XJGUͷදݱ ϥΠϒϥϦ044܈ Ϗδωεཁٻ ʹର͢Δදݱ ઃܭύλʔϯ
ͱ͓ͯ͢͢Ίʂ ʰJ04ΞϓϦઃܭύλʔϯೖʱ
ЋͰ ࣮ͰͷઃܭͷΛ͠·͢ɻ
lઃܭͦͷϓϩδΣΫτͷཁ݅νʔϜنɺܦݧͳͲʹΑͬ ͯࠨӈ͞Ε·͢ɻ͜ͷઃܭύλʔϯ͕ઈରʹͯ·Δͱ͍ ͏ɺ͍ΘΏΔۜͷؙ͋Γ·ͤΜɻz
w Ϗδωεతͳཁ݅ w جຊతͳອըΞϓϦΛϕʔε w Ϗδωε্ͷΞϓϩʔνఆ·͓ͬͯΒͣࢼߦࡨޡΛ܁Γฦ͢ඞཁ͕͋Δɻ w نɾظؒ w ࣾνʔϜdਓ
J04 "OESPJE αʔόʔαΠυ σβΠϯ $4 1. 10 w ࠓޙؔΘΔͰ͋Ζ͏ϓϩμΫτ w ٕज़తͳഎܠ w ͜ͷϨϕϧͷنͷͷΛҰਓͰอकɾ։ൃ͢Δͷॳ w ్த͔ΒҾ͖ܧ͗ 1BMDZͷഎܠɺ͋ΏΈ
খن ظత /PUΤΩεύʔτ
ϕʔε.77.
w 7JFX.PEFM 7JFX$POUSPMMFSʹґଘੑΛͲ͏ͬͯೖ͢Δ͔ʁ w Ͳ͏ͬͯ7JFX$POUSPMMFSͱ7JFX.PEFMΛCJOE͢Δ͔ w 7JFX.PEFM͕ͲͷΑ͏ʹσʔλʹΞΫηε͢Δͷ͔ʁ w ͲͷΑ͏ʹͯ͠ςελϏϦςΟΛ୲อ͢Δͷ͔ʁ w
൚༻తͳ-PBEJOHɺΤϥʔΛͲ͏ͬͯڞ௨Խ͢Δ͔ w FUDʜ .77.ͰΑΓΑΓܗΛٻΊͯมԽ͍ͯͬͨ͠
ʮਐతʯ Christopher Alexander
w θϩΠνͰͳ͘ɺྑ͍ܗʹΉ͚ͯঃʑʹҠߦͰ͖Δ͜ͱ w ҰਓͷνʔϜͰҰؾʹશ෦ॻ͖͑Δͷݱ࣮తͰͳ͍ w ࢼߦࡨޡ͠ɺݟ͕ੵͰ͖ΔΑ͏ͳঢ়ଶ ਐత
ʰਐతʱʹରͯ͠ ศརͩͬͨͭͷ5JQT
5JQT ϓϩδΣΫτΛॎʹׂΔʂ 5JQT ઃܭͷ׳Β͠ͱͯ͠ͷ#-P$ύλʔϯ
5JQT ϓϩδΣΫτΛॎʹׂΔʂ
ProjecctRoot ViewController ViewModel StoryBoard ComicDetailsViewController.swift ComicDetailsViewModel.swift SearchViewModel.swift SearchViewController.storyboard
SearchViewController.swift ComicDetailsViewController.storyboard ProjecctRoot ComicDetails Search ComicDetailsViewController.swift ComicDetailsViewModel.swift ComicDetailsViewController.storyboard … ԣׂΓͷϑΥϧμߏ ॎׂΓͷϑΥϧμߏ
w ࠷ॳ7JFX.PEFMͰ4FTTJPOΛͰѻ͍ͬͯͨˠςετ͕ॻ͖ͮΒ͍ w 'MVYΛϕʔεʹɺϦΫΤετঢ়ଶͷ4UPSFͱϦΫΤετͷ%JTQBUDIFSΛͭͬͯ͘%*͢Δ Α͏ʹˠCPJMFSQMBUF͕૿͑͗ͯͭ͢Β͍ w 3FQPTJUPSZΛͭͬͯ͘(FOFSJDTΛ׆༻ͯ͠%*͢ΔΑ͏ʹ 7JFX.PEFMͷѻ͍ํ͕มભ͍ͯͬͨ͠
w ͲΕ͕࠷৽͕Θ͔Βͳ͍ w ӨڹൣғɺదԠൣғ͕Θ͔Βͳ͍ɻ w ํΛॻ͘ͱͨ͠ΒผͰ͔ͬ͠Γͱ·ͱΊͳͯ͘ͳΒͳ͍ ͦΜͳதͰͷԣׂΓͷਏ͞
ॎׂΓʹ͢Δͱ খ͞ͳվળ ৽͍͠ͷͷಋೖʹ༰ʹʜ
$IBOHF-PHͱରԠ͕औΓ͍͢
3&"%.&Λஔ͘͜ͱ͕Ͱ͖Δ ProjecctRoot ComicDetails Search ComicDetailsViewController.swift README.md ComicDetailsViewModel.swift ComicDetailsViewController.storyboard
…
৽͘͠ೖ͖ͬͯͨਓʹɺ ࠓͷͱ͜Ζͷ࠷ળҊ ݱঢ়Λ͍͑͢
5JQT ઃܭͷ׳Β͠ͱͯ͠ͷ#-P$ύλʔϯ
#VTJOFTT-PHJD$PNQPOFOU ˣ #-P$
ݶఆతͳൣғʹ͓͍ͯ ϏδωεϩδοΫΛղܾ͢Δ ίϯϙʔωϯτΛ࡞Δ
#VJMESFBDUJWFNPCJMFBQQTXJUI'MVUUFS (PPHMF*0`
ʰখ͘͞ಋೖʱͰޮՌΛ࣮ײͰ͖Δ Φʔόʔϔουͷগͳ͍ Φεεϝͷύλʔϯ
PlacePicker Form OK Name Place
w ໊લͱॴΛߋ৽Ͱ͖Δ w ॴ͕ຊ͡Όͳ͍ͱૹ৴Ͱ͖ͳ͍ w ໊લ͕ۭจࣈͩͱૹ৴Ͱ͖ͳ͍ ϏδωεϩδοΫ
OK Name Place PlacePicker Form FormBLoC
OK Name Place PlacePicker Form FormBLoC GVODVQEBUF/BNF UPOFX/BNF4USJOH
WBSOBNF0CTFSWBCMF4USJOH\HFU^ WBSQMBDF0CTFSWBCMF$(1PJOU\HFU^ WBSJT7BMJE0CTFSWBCMF#PPM\HFU^ GVODVQEBUF1MBDF UPOFX/BNF$(1PJOU
OK Name Place PlacePicker Form FormBLoC GVODVQEBUF/BNF UPOFX/BNF4USJOH
WBSOBNF0CTFSWBCMF4USJOH\HFU^ WBSQMBDF0CTFSWBCMF$(1PJOU\HFU^ WBSJT7BMJE0CTFSWBCMF#PPM\HFU^ GVODVQEBUF1MBDF UPOFX/BNF$(1PJOU
FormBLoC OK Name Place WBSQMBDF0CTFSWBCMF$(1PJOU\HFU^ GVODVQEBUF1MBDF UPOFX/BNF$(1PJOU
খͯ͘͞ศརʂ
4XJGUͷදݱ ϥΠϒϥϦ044܈ Ϗδωεཁٻ ʹର͢Δදݱ ઃܭύλʔϯ
w Өڹൣғ͕ݶఆతˠଟগԼखΛͯ͠େৎͳͷͰࢼ͍͢͠ w ͱͯγϯϓϧͰΘ͔Γ͍͢ɻ w ৭ʑͳύλʔϯͷൃలͷಎΛಘ͍͢ w #-P$มԽΛٴ΅͢࡞༻ʢ"DUJPOʣͱมԽͷ؍ଌ 4UPSF ʹ͚Δˠ'MVYతʹ
w #-P$ͷঢ়ଶΛ7JFXʹόΠϯυ͢Δʹʜˠ.77..71ͷ͕͔Γ w ͲͷΑ͏ʹ7JFX7JFX$POUSPMMFSʹ#-P$Λ͍͔ͯ͘͠ˠͷؒͷ%* w #-P$Λελϒͨ͠Γɺ#-P$ͷςετΛॻ͍ͯΈΔˠΛׂͨ͠ԸܙΛ࣮ײͰ͖Δ ઃܭͷ׳Β͠ͱͯ͠#-P$ͷ͕͓͜͜͢͢Ί
·ͱΊ w ڮͷԼͰ҆৺ͯ͠৸ΔͳΒʰJ04ΞϓϦઃܭύλʔϯೖʱ w খ͘͞ظతͳϓϩδΣΫτͰ͋ΕɺਐతΛࢦͯ͠ࢼߦࡨޡ͢ΔͱΑ͔ͬͨ