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
モバイルアプリ設計入門
Search
野瀬田 裕樹
June 16, 2025
Technology
0
12
モバイルアプリ設計入門
iOSを中心にモバイルアプリにおける設計の基本原則などをまとめて資料にしました
野瀬田 裕樹
June 16, 2025
Tweet
Share
More Decks by 野瀬田 裕樹
See All by 野瀬田 裕樹
Swift6.2時代のconcurrencyを考える会
yuukiw00w
1
500
実践!App Intents対応
yuukiw00w
1
420
App Intents再入門
yuukiw00w
0
65
Flutterで備える!Accessibility Nutrition Labels完全ガイド
yuukiw00w
0
220
WWDC25要約:Evaluate your app for Accessibility Nutrition Labels
yuukiw00w
0
130
Swiftは最高だよの話
yuukiw00w
2
350
iOSDC2024ポスター:Swift 6に備えよう!Upcoming Feature Flagsを全て解説します!
yuukiw00w
0
39
SwiftでよりSwiftyに
yuukiw00w
0
17
より良いLint設定を追い求めて
yuukiw00w
0
110
Other Decks in Technology
See All in Technology
OPENLOGI Company Profile for engineer
hr01
1
46k
AWSが好きすぎて、41歳でエンジニアになり、AAIを経由してAWSパートナー企業に入った話
yama3133
2
220
20251029_Cursor Meetup Tokyo #02_MK_「あなたのAI、私のシェル」 - プロンプトインジェクションによるエージェントのハイジャック
mk0721
PRO
6
2.3k
初海外がre:Inventだった人間の感じたこと
tommy0124
1
180
Kotlinで型安全にバイテンポラルデータを扱いたい! ReladomoラッパーをAIと実装してみた話
itohiro73
3
140
知覚とデザイン
rinchoku
1
720
AIエージェントによる業務効率化への飽くなき挑戦-AWS上の実開発事例から学んだ効果、現実そしてギャップ-
nasuvitz
5
1.6k
アノテーション作業書作成のGood Practice
cierpa0905
PRO
1
370
アウトプットから始めるOSSコントリビューション 〜eslint-plugin-vueの場合〜 #vuefes
bengo4com
3
1.9k
OpenCensusと歩んだ7年間
bgpat
0
300
ラスベガスの歩き方 2025年版(re:Invent 事前勉強会)
junjikoide
0
830
AIを使ってテストを楽にする
kworkdev
PRO
0
400
Featured
See All Featured
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
2
210
Rails Girls Zürich Keynote
gr2m
95
14k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6k
Context Engineering - Making Every Token Count
addyosmani
8
330
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
2.9k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.1k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.1k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
640
Designing for humans not robots
tammielis
254
26k
Embracing the Ebb and Flow
colly
88
4.9k
Transcript
ϞόΠϧΞϓϦઃܭೖ ాɹ༟थ
࣍ w ιϑτΣΞΞʔΩςΫνϟʔͱ w ϞόΠϧΞϓϦͰಛʹॏཁͳ࣭ಛੑ w ϞόΠϧΞϓϦͰಛతͳ੍ w ϞόΠϧΞϓϦͷ։ൃͰҙ͖ࣝ͢͜ͱ w
ϞόΠϧΞϓϦͱόοΫΤϯυͷҧ͍ w ϞόΠϧΞϓϦͷઃܭݪଇ w όοΫΤϯυͱڞ௨ͷઃܭࢦ w 4XJGUಛ༗ͷ
ιϑτΣΞΞʔΩςΫνϟʔ w ιϑτΣΞΛͲͷΑ͏ʹߏ͢Δ͔Λࣔ͢ͷ w γεςϜΛߏཁૉʹͲͷΑ͏ʹׂɾஔ͠ɺͲͷΑ͏ʹ૬ޓʹ ΓऔΓͤ͞Δͷ͔Λࣔ͢ͷ
ιϑτΣΞΞʔΩςΫνϟʔ w ͏·͘࡞ΓࠐΉ͜ͱͰ w ։ൃɾอकɾӡ༻͕༰қʹͳΔ w γεςϜʹٻΊΒΕΔ࣭ಛੑɾͦͷଞͷੑ্࣭͕͢Δ
࣭ಛੑ ػೳద߹ੑ ੑೳޮੑ ޓੑ ༻ੑ ৴པੑ ηΩϡϦςΟ อकੑ Ҡ২ੑ
IUUQTLJLBLVSVJDPNY9IUNM w ιϑτΣΞ࣭ʢ+*49ࢀরʣ
ϞόΠϧΞϓϦͰಛʹॏཁͳ࣭ಛੑ w ༻ੑʢVTBCJMJUZʣ ෭ಛੑɿదೝࣝੑɺशಘੑɺӡ༻ૢ࡞ੑɺ ɹɹɹɹϢʔβΤϥʔࢭੑɺϢʔβΠϯλϑΣʔεշඒੑɺ ɹɹɹɹΞΫηγϏϦςΟ w ੑೳޮੑʢQFSGPSNBODFF ff i
DJFODZʣ ෭ಛੑɿ࣌ؒޮੑɺࢿݯޮੑɺ༰ྔຬੑ ˞ଞ͕ෆཁͱ͍͏Θ͚Ͱ͋Γ·ͤΜ
ϞόΠϧΞϓϦͰಛʹॏཁͳ࣭ಛੑ w ༻ੑʢVTBCJMJUZʣ ϢʔβʔʹͱͬͯΑΓ͍উखͷྑ͍ମݧΛ࡞ΓࠐΉඞཁ͕͋Δ ςΩετ #VUUPO ेͳλοϓྖҬɺ)JHI$POUSBTUɺదͳಡΈ্͛ɺFUD ଟݴޠରԠɺจࣈαΠζͷมԽʹରԠɺ)JHI$POUSBTUɺFUD 5FYU'JFME
ೖྗཁૉʹԠͨ͡LFZCPBSEɺࣗಈೖྗɺFUD
ϞόΠϧΞϓϦͰಛʹॏཁͳ࣭ಛੑ w ੑೳޮੑʢQFSGPSNBODFF ff i DJFODZʣ ΞϓϦ͕λοϓͨ࣌͠ʹϑϦʔζͨ͠ΓɺεΫϩʔϧ͕ΧΫπΫ ͱମݧͱͯ͠ྑ͘ͳ͍ ʲྑ͍ΞϓϦʳ
ىಈ͕͍ εϜʔζͳεΫϩʔϧ Ԡ͕͍ ΞϓϦαΠζ͕খ͍͞
ϞόΠϧΞϓϦͰಛతͳ੍ w σόΠεͷ੍ ը໘αΠζ04ޓੑͷ੍͕͋Γɺݻ༗ͷࣄଘࡏ
J1IPOF4& 9 1SP.BY FUD J1BE J1BE1SP J1BE"JS FUD
ϞόΠϧΞϓϦͰಛతͳ੍ w 04ͷ੍ 04ߋ৽ʹ͏༷มԽਪͱ͞ΕΔ࣮ɾମݧɾ6*͕มԽ 4JSJ͔Βͷݺͼग़͠ͳͲɺ04ͱͷ૬ޓ࡞༻ଘࡏ
04ߋ৽ʹ͏มԽͷྫ w J1BE04Ͱඪ४ͷλϒόʔҐஔ͕Լ͔Β্෦ϑϩʔςΟϯάʹ
04ߋ৽ʹ͏มԽͷྫ w J04Ͱେ͖ͳσβΠϯมߋʢ-JRVJE(MBTTʣ
ϞόΠϧΞϓϦͷ։ൃͰҙ͖ࣝ͢͜ͱ w 6*ͷෳࡶੑ 04όʔδϣϯʹΑͬͯมԽ͢Δ্ɺମݧઃܭ͕ඇৗʹॏཁ Ϩεϙϯγϒ6*ɺը໘ભҠઃܭɺΞχϝʔγϣϯɺFUD w 04ͱͷ૬ޓ࡞༻ 4JSJ͔Βͷݺͼग़͠ηϯαʔใͷऔಘͳͲɺը໘ͷߏஙʹཹ· Βͳ͍ମݧઃܭ͕ඞཁ
ෳࡶͳྖҬ 0OEFWJDFͷཁૉɾঢ়ଶཧ ϏδωεϩδοΫͷཧ ෳࡶ͞ͱͷ ઓ͍ํ $PNQPTBCMFͳ6*ઃܭɺ୯ํ σʔλϑϩʔɺ4405ɺFUD %%%ɺ5IF$MFBO "SDIJUFDUVSFɺFUD ϞόΠϧΞϓϦͱόοΫΤϯυͷҧ͍
.PCJMF"QQ #BDLFOE
ϞόΠϧΞϓϦͷઃܭݪଇ w ίϯϙʔωϯτࢦͱ$PNQPTBCMFͳ6*ઃܭ w ୯ํσʔλϑϩʔ w 4405ʢ4JOHMF4PVSDFPG5SVUIɺ৴པͰ͖Δ།Ұͷใݯʣ
ϞόΠϧΞϓϦͷઃܭݪଇ w ίϯϙʔωϯτࢦͱ$PNQPTBCMFͳ6*ઃܭ 6*Λখ͘͞࠶ར༻Մೳͳߏཁૉ $PNQPTBCMFDPNQPOFOU ʹ ׂ͠ɺͦΕΛ߹͢Δ͜ͱʹΑͬͯ6*Λߏங͢Δઃܭ )FMMP 8PSME
#VUUPO #VUUPO )FMMP 8PSME #VUUPO #VUUPO ߹ $PNQPTF
ϞόΠϧΞϓϦͷઃܭݪଇ w ୯ํσʔλϑϩʔ ঢ়ଶʹมԽΛҾ͖ى͜͢σʔλͷྲྀΕ͕୯ํͱͳΔΑ͏ʹ͢Δ ઃܭ 7JFX 4UBUF )PMEFS 7JFX
&WFOU "DDFQUPS %PNBJO -BZFS ΞʔΩςΫνϟʔͷྫ
ϞόΠϧΞϓϦͷઃܭݪଇ w 4405ʢ4JOHMF4PVSDFPG5SVUIɺ৴པͰ͖Δ།Ұͷใݯʣ มߋՄೳͳΞϓϦͷঢ়ଶɾσʔλΛৗʹ͔ॴʹ͚ͩଘࡏͤ͞ɺ ͦͷ།Ұͷใݯ͚ͩΛ৴པɾࢀর͢Δઃܭ 7JFX 4UBUF )PMEFS 7JFX
&WFOU "DDFQUPS %PNBJO -BZFS 4UBUF)PMEFSͷதʹ ৴པͰ͖Δঢ়ଶΛͭ ΞʔΩςΫνϟʔͷྫ
όοΫΤϯυͱڞ௨ͷઃܭࢦ w దͳ໋໊ɺίϝϯτ w ϚδοΫφϯόʔɺάϩʔόϧมɺྫ֎ѲΓͭͿ͠ͳͲͷΞϯν ύλʔϯճආ w ςετ༰қͳઃܭ
4XJGUಛ༗ͷ w 4XJGU㱠Ϋϥεத৺ͷݴޠ 4XJGUܕத৺ͷݴޠ w 4XJGU㱠ΦϒδΣΫτࢦʢ0CKFDUPSJFOUFEʣ 4XJGUϓϩτίϧࢦʢ1SPUPDPMPSJFOUFEʣ
Ϋϥεʢࢀরܕʣத৺ͷݴޠ w Ϋϥεʢࢀরܕʣத৺ͷݴޠͰɺDMBTTΛͬͯঢ়ଶΛཧ ೖʹΑͬͯՄมͳঢ়ଶ͕؆୯ʹڞ༗Ͱ͖ͯ͠·͏͕͋Δ class A { var x: Int
= 0 } var a1 = A() var a2 = a1 a1.x = 1 print(a2.x) // ग़ྗɿ1ʢa1ͱa2ͰՄมͳঢ়ଶ͕ڞ༗͞ΕΔɻ͙ͨΊʹޚతίϐʔ͕ඞཁʣ
4XJGUܕத৺ͷݴޠ w 4XJGUͰ௨ৗTUSVDUʢܕʣΛͬͯঢ়ଶΛཧ ೖͯ͠Մมͳঢ়ଶ͕ڞ༗͞Εͳ͍ struct A { var x: Int
= 0 } var a1 = A() var a2 = a1 a1.x = 1 print(a2.x) // ग़ྗɿ0ʢa1ͱa2ͰՄมͳঢ়ଶ͕ڞ༗͞Εͳ͍ɻޚతίϐʔͳͲෆཁʣ
4XJGUܕத৺ͷݴޠ w Ϋϥεத৺ɿDMBTTʹঢ়ଶΛ࣋ͨͤͯΧϓηϧԽɺϝοηʔδύογϯάͰॲཧ 4XJGUʢܕத৺ʣɿࢀরಁաੑͷ͋ΔؔͱΠϛϡʔλϒϧͳΛͬͯॲཧ struct A { var x: Int
= 0 } func createX2(_ a: A) -> Int { a.x * 2 } let a = A() let x2 = createX2(a) print(x2)
1SPUPDPMPSJFOUFE1SPHSBNNJOH w ܕʢTUSVDUʣͰܧঝΛ͑ͳ͍ͨΊɺΘΓʹQSPUPDPMΛ༻ protocol Animal { func foo() -> Int
} struct Cat: Animal { var value: UInt8 = 2 func foo() -> Int { Int(value) } } func useAnimal(_ animal: some Animal) { print(animal.foo()) // ۩ମతͳܕΛΘͣهड़Ͱ͖ΔɻSwiftUI.ViewͷbodyͰར༻͞Ε͍ͯΔ } useAnimal(Cat())
ࢀߟࢿྉ w "OESPJE ެࣜͷઃܭΨΠυɿIUUQTEFWFMPQFSBOESPJEDPNUPQJD BSDIJUFDUVSF OPXJOBOESPJEɿIUUQTHJUIVCDPNBOESPJEOPXJOBOESPJE w J04 "QQMFެࣜαϯϓϧूɿIUUQTEFWFMPQFSBQQMFDPN EPDVNFOUBUJPOTBNQMFDPEF
༗໊ͳBSDIJUFDUVSFMJCSBSZɿIUUQTHJUIVCDPNQPJOUGSFFDP TXJGUDPNQPTBCMFBSDIJUFDUVSF
J04ͷΞʔΩςΫνϟʔͷྺ࢙ w $PDPB.7$ .PEFM7JFX$POUSPMMFS ౷తͳ"QQMFͷ.7$ΞʔΩςΫνϟʔ IUUQTEFWFMPQFSBQQMFDPNMJCSBSZBSDIJWFEPDVNFOUBUJPO(FOFSBM$PODFQUVBM%FW1FEJB$PDPB$PSF.7$IUNM 7JFX .PEFM
7JFX $POUSPMMFS 6TFSૢ࡞ ඳըߋ৽ ௨ σʔλߋ৽
J04ͷΞʔΩςΫνϟʔͷྺ࢙ w $PDPB.7$ .PEFM7JFX$POUSPMMFS 7JFX$POUSPMMFSͷංେԽ͕՝ʹʢ'BU7JFX$POUSPMMFSʣ "OESPJEͰྨࣅͷͱͯ͠'BU"DUJWJUZ͕͋ͬͨ 7JFX .PEFM
7JFX $POUSPMMFS 6TFSૢ࡞ ඳըߋ৽ ௨ σʔλߋ৽
J04ͷΞʔΩςΫνϟʔͷྺ࢙ w .71 .PEFM7JFX1SFTFOUFS 4VQFSWJTJOH$POUSPMMFSͱ1BTTJWF7JFXͷύλʔϯ͕͋Δ J04Ͱ7JFX$POUSPMMFS7JFXʹؚΊͯߟ͑ͯɺ1SFTFOUFSʹ6* ϩδοΫΛஔ͘ߏ IUUQTNBSUJOGPXMFSDPNFBB%FW1BTTJWF4DSFFOIUNM
J04ͷΞʔΩςΫνϟʔͷྺ࢙ w .71 .PEFM7JFX1SFTFOUFS 1SFTFOUFS͕7JFX͔Β͞Εɺ୯ମςετՄೳͳঢ়ଶʹͳΔ 'BU7$ղফ͢Δ͕ɺ࣍1SFTFOUFSͷංେԽ͕ൃੜ 7JFX 7$
.PEFM 1SFTFOUFS 6TFSૢ࡞ ඳըߋ৽ IUUQTNBSUJOGPXMFSDPNFBB%FW1BTTJWF4DSFFOIUNM
J04ͷΞʔΩςΫνϟʔͷྺ࢙ w .77. .PEFM7JFX7JFX.PEFM .JDSPTPGUൃͰɺએݴత6*͕ྲྀߦΔલ·Ͱྲྀߦ͍ͬͯͨ "OESPJEͰެࣜͱͯ͠7.͕༻ҙ͞Ε͍ͯΔؔͰ"OESPJEͰ ඪ४తʹ࠾༻͞ΕɺͦͷྲྀΕͰJ04ʹ࠾༻͞ΕΔ͜ͱ͕ଟ͔ͬͨ ࠷ۙ͋·Γݟ͔͚ͳ͍ʢ"OESPJEެࣜͷઃܭΨΠυʹ.77. ͱهࡌ͞Ε͍ͯͳ͍ʣ
IUUQTMFBSONJDSPTPGUDPNKBKQBSDIJWFNTEONBHB[JOFGFCSVBSZQBUUFSOTXQGBQQTXJUIUIFNPEFMWJFXWJFXNPEFMEFTJHOQBUUFSO
J04ͷΞʔΩςΫνϟʔͷྺ࢙ w .77. .PEFM7JFX7JFX.PEFM EBUBCJOEJOHʹΑΓ7.ͱ7JFXͷ͕ؒૄ݁߹ʹͳΔͷ͕ಛ ͔͠͠σʔλͷϑϩʔ͕ํͰ͋Γɺঢ়ଶ͕มԽ͢ΔࡍͷྲྀΕ Λ͏ͷ͕͍͠ͱ͍͏͕͋ͬͨ 7JFX
7$ .PEFM 7JFX.PEFM %BUB#JOEJOH
J04ͷΞʔΩςΫνϟʔͷྺ࢙ w 'MVY GBDFCPPLൃͷ+4ͷϥΠϒϥϦͰɺ୯ํσʔλϑϩʔ͕ಛ J04Ͱ͜ͷઃܭΛࢀߟʹҰ෦ΞϓϦͰ࠾༻͞Ε͍ͯΔ 7JFX 7$ 6TFS *OUFSBDUJPOT
"DUJPO $SFBUPST "DUJPOT %JTQBUDIFS $IBOHF &WFOUT 4UPSF2VFSJFT $BMMCBDLT 4UPSF "1*
ͦͷଞͷJ04ΞʔΩςΫνϟʔ w 7*1&3 7JFX*OUFSBDUPS1SFTFOUFS&OUJUZ3PVUFS IUUQTXXXPCKDJPJTTVFTBSDIJUFDUVSFWJQFS ͍͔ͭ͘ஶ໊ͳΞϓϦͰ࠾༻͞ΕͯҰ෦ྲྀߦͬͨ w 3FEVY +4ͷϥΠϒϥϦ͕ͩɺJ04ͰҰ෦ಉ༷ͷΞʔΩςΫνϟʔͱ͠
ͯ࠾༻͞Εͨ
ͦͷଞͷJ04ΞʔΩςΫνϟʔ w "OESPJEެࣜઃܭΨΠυͷJ04ͷྲྀ༻ རɿυΩϡϝϯτ͕ॆ࣮͓ͯ͠Γֶशϋʔυϧ͕͍ རɿ"OESPJEͱͷઃܭࠩҟʹΑΔ༷ࠩͷൃੜϦεΫܰݮ w .7 .PEFM7JFX ΞʔΩςΫνϟʔ རɿ4XJGU6*ͷಛੑΛ׆͔ͨ͠γϯϓϧͳߏ
w 'MVY3FEVYΧελϚΠζɺܰྔ'MVY3FEVYʢTUPSFQBUUFSOͳͲʣ རɿ4405 ୯ํϑϩʔͷݪଇΛकΓͭͭݸผࣄʹԠͯ͡࠷దԽ
·ͱΊ w ΞϓϦͰαʔόʔͱҟͳΔ࣭ಛੑ͕ٻΊΒΕΔͨΊɺΞʔΩςΫ νϟʔͷબఆҟͳΔ w όοΫΤϯυͱҧ͏ΞϓϦͷઃܭࢦΛ֮͑Α͏ w ίϯϙʔωϯτࢦͱ$PNQPTBCMFͳ6*ઃܭ w ୯ํσʔλϑϩʔ
w 4405ʢ4JOHMF4PVSDFPG5SVUIɺ৴པͰ͖Δ།Ұͷใݯʣ w ಛʹJ04Ͱਖ਼ղ͓खຊͱͳΔΞʔΩςΫνϟʔͳ͍ͨΊɺΞϓϦͷ ༷ɾಛੑʹ߹Θͤͯઃܭ͠Α͏
"QQFOEJY
࣮ફฤͷ͕͔Γ w ίϯΣΠͷ๏ଇٯίϯΣΠͷ๏ଇ ΞʔΩςΫνϟʔͱ৫ߏີʹؔ ਓϝϯόʔͷಛੑʹΑͬͯ࠷దͳΞʔΩςΫνϟʔมԽ ྫ ՝ۚϞδϡʔϧΛϥΠϒϥϦʹΓग़ͯ͠՝ۚνʔϜΛ࡞Δ
࣮ફฤͷ͕͔Γ w 'FBUVSF fi STU-BZFS fi STUɺϚϧνϞδϡʔϧ୯ҰϞδϡʔϧ ϞόΠϧͰ'FBUVSF fi STUͰΔ͜ͱ͕ଟ͍
ػೳ͝ͱʹ4XJGU1BDLBHFʹΓग़ͨ͠ϚϧνϞδϡʔϧԽͳͲ ߦΘΕΔ͜ͱ͕͋Δ 4XJGU6*ʹґଘ͢ΔϞδϡʔϧͱͦΕҎ֎Ͱ͚ΔͳͲͷߏ ͋Δ
࣮ફฤͷ͕͔Γ w ϦΞΫςΟϒϓϩάϥϛϯάͱඇಉظॲཧ άϩʔόϧͳ4USFBNΛͲ͏ѻ͏͔ͳͲɺ৻ॏͳઃܭ͕ඞཁ ಛʹผͷػೳ͕ಉ͡σʔλΛࢀর͢Δ߹ͷ୯ํσʔλϑϩʔ ͱ4405ͷݪଇͷॱकΛઃܭͰ୲อ͢Δඞཁ͕͋Δ w ΞϓϦͷϥΠϑαΠΫϧ όοΫάϥϯυ࣌ͷॲཧɺ%FFQMJOLىಈ࣌ͷॲཧͳͲߟྀ͕ ඞཁ
࣮ફฤͷ͕͔Γ w ςελϏϦςΟʢݹయϩϯυϯֶʣ "OESPJEެࣜͷΨΠυͰϩϯυϯֶدΓͷΞʔΩςΫνϟʔ 4XJGUͰܕͱؔΛͬͯϞοΫͤͣʹৼΔ͍Λςετ͢Δ ݹయͷ࣮༰қ