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
iOS26時代の新規アプリ開発
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
野瀬田 裕樹
May 20, 2026
Programming
250
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
iOS26時代の新規アプリ開発
DMM.swift #5での発表資料
野瀬田 裕樹
May 20, 2026
More Decks by 野瀬田 裕樹
See All by 野瀬田 裕樹
Swift ConcurrencyでよりSwiftyに
yuukiw00w
0
340
Human Interface Guidelines 2
yuukiw00w
0
70
AI前提で考えるiOSアプリのモダナイズ設計
yuukiw00w
0
280
HIG学習用スライド
yuukiw00w
0
200
FlutterKaigi 2025: What is iOS Assistive Access? UI considerations for Flutter
yuukiw00w
0
63
Swift6.2時代のconcurrencyを考える会
yuukiw00w
2
1.7k
実践!App Intents対応
yuukiw00w
1
510
App Intents再入門
yuukiw00w
0
91
Flutterで備える!Accessibility Nutrition Labels完全ガイド
yuukiw00w
0
290
Other Decks in Programming
See All in Programming
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
0
110
AWS CDK を「作」ってみた 〜フルスクラッチで見えた CDK の裏側〜 / aws-cdk-from-scratch
gotok365
3
400
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
130
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
120
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
170
なぜ関数型プログラミングで「型」と「証明」が語られるのか #fp_matsuri
kajitack
3
930
継続モナドとリアクティブプログラミング
yukikurage
3
600
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_tuning_101
hanhan1978
4
560
Performance Engineering for Everyone
elenatanasoiu
0
270
5分で問診!Composer セキュリティ健康診断
codmoninc
0
270
任せる範囲はこう広がった / How the Scope of AI Delegation Has Expanded
nrslib
1
260
信頼性について考えてみる(SRE NEXT 2026 miniLT)
hayama17
0
190
Featured
See All Featured
Discover your Explorer Soul
emna__ayadi
2
1.2k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
390
How to train your dragon (web standard)
notwaldorf
97
6.7k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
450
First, design no harm
axbom
PRO
2
1.2k
Believing is Seeing
oripsolob
1
170
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
750
GraphQLとの向き合い方2022年版
quramy
50
15k
Site-Speed That Sticks
csswizardry
13
1.3k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
New Earth Scene 8
popppiees
3
2.4k
Transcript
J04࣌ͷ৽نΞϓϦ։ൃ ాɹ༟थʢ!ZOPTFEBʣ
4QFBLFS ాɹ༟थʢ!ZOPTFEBʣ ϞόΠϧશൠͬͯ·͢ ʢJ04"OESPJE'MVUUFSʣ
J04࣌ͱͲΜͳ࣌ʁ w -JRVJE(MBTT࣌Ͱʮ6*ͷ04ࠩʯ͕࠶֦େͨ͠ w 9DPEF4XJGU͕"*ओಋ։ൃͰ͍͍͢ͷʹͳ͖ͬͯͨ
-JRVJE(MBTT࣌ w J04ͱ"OESPJEͰશʹผ6*ͷํੑͱͳͬͨ w -JRVJE(MBTTίϯςϯπΛॏࢹͯ͠ φϏήʔγϣϯपΓΛཱͨͳͤ͘͞Δ w Ұํɺ.BUFSJBM%FTJHO&YQSFTTJWFͰൃݟ༰қੑͷͨΊ φϏήʔγϣϯཱ͕ͭ͠ɺಈ͖ϙοϓͰܹ͍͠
04ʹدΓఴͬͨ 6*࣮ͷॏཁੑ্͕͕ͬͨ
"*࣌ w ެࣜඇެࣜΘ༷ͣʑͳ"*ओಋ։ൃͷͨΊͷπʔϧ͕ἧ͖ͬͯͨ w 9DPEF#VJME.$1 YDPEFUPPMT.$1ͳͲͷศརͳ.$1 w 9DPEFͷ$PEJOH*OUFMMJHFODFػೳ w "WE-FF4XJGU6*"HFOU4LJMMͳͲͷศརͳ4LJMM
"*࣌ w "*͕͍ͬͯ͡յΕʹ͍͘ඇಉظॲཧͷ࣮ݱ͕༰қʹ w 4XJGUͰ"QQSPBDIBCMF$PODVSSFODZ͕ͱͯศར w 4XJGUͳΒྫ֎ͷѻ͍࿙Εͳ͍͠ɺ Ϗϧυ͕௨͍ͬͯͯมͳ࣮ʹͳ͍ͬͯͳ͚Ε ͋Δఔ҆৺Ͱ͖Δڥ͕͍ͬͯΔ
࣮ίετ͕Լ͕Γɺ ମݧͷٻ͕͘͢͠ͳͬͨ
ͦΜͳ࣌ʹ ৽نΞϓϦΛ࡞ΔͳΒʁ
J04࣌ͷ՝ w ࣮͕"*ʹΑΓࢦؔతʹ্ w ࣌ؒతʹਓ͕ؒϘτϧωοΫʹͳΓɺ ҰํͰ"*Λ͏΄Ͳ͓͕ۚඈΜͰ͍࣌͘ w ਓ͕ؒཧղɺೝ͢Δ্ͤ͞ʹ͍ͨ͘Ίɺ VOLOPXOVOLOPXOྖҬ͕ࢦؔతʹ૿େ
"*ͱਓؒͷ྆ํʹͱͬͯ ΑΓྑ͍ڠۀڥΛߏங͢Δ
"*ͷಛੑ w "*ඇܾఆੑΛ࣋ͭͨΊɺҰఆͷ֬Ͱϛε͕͋Δ w "*ͱରͭͭ͠ࡉ͔͘ਓ͕ཧ͢Ε੍ޚͰ͖Δ͕εέʔϧ͠ͳ͍ w ҰํͰ"*ʹҕୗ͢Δܗʹͯ͠λεΫαΠζΛେ͖͍ͯ͘͘͠ͱɺ εέʔϧ͢Δ͕ޡΓͷࠞೖϦεΫ͕૿େɺৄࡉͷѲ߹͍͕Լ w ޡΓͷݮͱཧղͷଅਐΛଅ͢Έڥ͕"*ʹඞཁ
J04࣌ͷઃܭͷཁ w "*͕҆શʹมߋͰ͖Δ w ਓ͕ؒཧղΛҡ࣋͠ɺೝෛ࠴ΛݮͰ͖Δ w ΨʔυϨʔϧઃܭͱཧղ༰қੑ͕ઃܭͷཁʹͳͬͨ
ཧղͷෆʢʹೝෛ࠴ʣ w ཧղෛ࠴ɿઃܭΛཧղͤͣͱେྔͷ࣮͕Ͱ͖ΔΑ͏ʹͳͬͨ w ҙਤෛ࠴ɿͦ͏ͯ͠ੜ͞Ε࣮͚͕ͨͩ͞ΕΔͱɺ ɹɹɹɹɹจ຺͕ফ͑ͯͦͷഎܠʹ͋ΔҙਤΛѲͰ͖ͳ͘ͳΔ
ཧղͷෆʢʹೝෛ࠴ʣ w "*ͷࣗ༝ʹͤ͞Δͱɺ ҉͕ࣦΘΕɺ ΤϯδχΞͷ಄ͷதͷϝϯλϧϞσϧߏங͞Εͣɺ ίʔυͷΛ࣋ͯΔਓ͕͍ͳ͘ͳΓɺ ࣭ͷίʔυ͕େྔੜ࢈͞ΕΔՄೳੑ͕͋Δ
"*ͱਓͱͷׂ୲ w ཧղ͕༰қͳখ͍͞λεΫ"*ʹҕୗ w ཧղίετͷߴ͍λεΫ"*ͱڠಇ w "*ϨϏϡʔʹΑΔඇ੩తͳ࣭ήʔτ ʢ͓Αͼ$*ʹΑΔ੩తͳ࣭ήʔτʣ w ਓؒϨϏϡʔʹΑΔҙਤৄࡉͷѲɺϝϯλϧϞσϧߏஙͱडೖ
࣭ήʔτɿޡΓͷରࡦ w ੩తͳ࣭ήʔτɿϏϧυ$*໘ͷڧԽ ɹɹɹɹɹɹɹɹɹʢઃఆؔɺ-JOUɺΧόϨοδ੍ͳͲʣ w ඇ੩తͳ࣭ήʔτɿ"*ϨϏϡʔͷڧԽʢ؍ͷཧͳͲʣ
Ϗϧυ$*໘ͷڧԽ w ઃఆ໘Ͱͷ࠷దԽʢ"*͕ࡶͳฒߦॲཧΛॻ͖ʹ͍͘ઃఆʹͰ͖Δʣ w TXJGU-BOHVBHF.PEF W w 4XJGUͷ"QQSPBDIBCMF$PODVSSFODZઃఆͷ༗ޮԽ w
USFBU"MM8BSOJOHT BTFSSPS ͰܯࠂΛΤϥʔԽ
ઃఆͷྫ extension SwiftSetting { static let existentialAny: Self = .enableUpcomingFeature("ExistentialAny")
static let internalImportsByDefault: Self = .enableUpcomingFeature("InternalImportsByDefault") static let memberImportVisibility: Self = .enableUpcomingFeature("MemberImportVisibility") static let inferIsolatedConformances: Self = .enableUpcomingFeature("InferIsolatedConformances") static let nonisolatedNonsendingByDefault: Self = .enableUpcomingFeature("NonisolatedNonsendingByDefault") static let immutableWeakCaptures: Self = .enableUpcomingFeature("ImmutableWeakCaptures") /// ਪͷઃఆҰࣜΛఆٛͯͦ͠ΕͧΕͷtargetͰࢦఆ͢Δ static let defaultSettings: [Self] = [ .existentialAny, .internalImportsByDefault, .memberImportVisibility, .inferIsolatedConformances, .nonisolatedNonsendingByDefault, .immutableWeakCaptures, .swiftLanguageMode(.v6), .treatAllWarnings(as: .error) ] }
Ϗϧυ$*໘ͷڧԽ w -JOUܥͷઃఆʢTXJGUGPSNBUMJOU4XJGU-JOUͷ׆༻ʣ w TXJGUGPSNBUͰϑΥʔϚοτΛڧ੍ w TXJGUGPSNBUMJOU͋Δ͍4XJGU-JOUͰઃܭͷڧ੍
Ϗϧυ$*໘ͷڧԽ w ϚϧνϞδϡʔϧԽʹΑΔࢀরํͷڧ੍ w "QQ%PNBJO%BUB4PVSDF֎෦ґଘ܈ͷߏͷ MBZFSFENPEVMFߏʹ͢ΔͱࢀরํΛڧ੍Ͱ͖Δ w ςετ༰қੑͷͨΊͳΒ %BUB4PVSDF֎෦ґଘؒͰ͚ͩґଘੑٯసͤ͞Δ͚ͩͰ͍͍ w
6*ܥҰͭͷϞδϡʔϧʹ·ͱΊΔͱɺ BTTFU౷߹͕ෆཁͰΫϦʔϯϏϧυ͕࣌ؒ͘ͳ͍͍ͬͯײ͡
Ϗϧυ$*໘ͷڧԽ w ֎෦ґଘ6*Λআ͘UBSHFUͷίʔυΧόϨοδͷ੍ w ֎෦ґଘΛഉআͨ͠%PNBJO %BUB4PVSDFͷϞδϡʔϧ ίʔυΧόϨοδ͕ҰఆҎ্Ͱͳ͍ͱ$*͕མͪΔΑ͏ʹઃఆ w %PNBJO %BUB4PVSDF͔Β֎෦ґଘΛഉআ͢Δͱɺ
-JOVYڥͰTXJGUCVJMEͰ͖ΔΑ͏ʹߏஙͰ͖Δ w %FWJO(JU)VC$PQJMPUͷBHFOUͳͲ-JOVYڥͷ"*Ͱɺ ϩδοΫपΓͷݕূ͕Ͱ͖ΔΑ͏ʹͳΔ
Ϟδϡʔϧߏͷ࣮ͷྫ let appleTargets: [PackageDescription.Target] = [ .target( name: Target.firebaseClient.name, dependencies:
[ Target.dataSource.dependency, ], ), .target( name: Target.app.name, dependencies: [ Target.dataSource.dependency, Target.domain.dependency, Target.firebaseClient.dependency, ], resources: [ .process("Resources/Assets.xcassets"), .process("Resources/Localizable.xcstrings") ], ), ]
Ϟδϡʔϧߏͷ࣮ͷྫ let commonTargets: [PackageDescription.Target] = [ .target(name: Target.api.name), .target(name: Target.dataSource.name,
dependencies: [Target.api.dependency]), .target(name: Target.domain.name, dependencies: [Target.dataSource.dependency]), .testTarget( name: TestTarget.dataSourceTests.name, dependencies: [Target.dataSource.dependency, Target.api.dependency], ), .testTarget( name: TestTarget.domainTests.name, dependencies: [Target.domain.dependency], ), ]
Ϟδϡʔϧߏͷ࣮ͷྫ let isApplePlatform: Bool = { #if os(macOS) ProcessInfo.processInfo.environment["DISABLE_APPLE_TARGETS"] !=
"1" #else false #endif }() let appCoreProduct: Product = .library( name: "AppCore", type: .dynamic, targets: [Target.api.name, Target.dataSource.name, Target.domain.name] )
Ϟδϡʔϧߏͷ࣮ͷྫ let package = Package( name: "AppPackages", defaultLocalization: "ja", platforms:
[.iOS(.v26)], products: [appCoreProduct] + (isApplePlatform ? [appProduct] : []), dependencies: isApplePlatform ? [.package(...)] : [], targets: commonTargets + (isApplePlatform ? appleTargets : []) )
"*ϨϏϡʔͷڧԽ w $PEF3BCCJU$PQJMPUͳͲ"*Λ׆༻ͯ͠ޡΓΛݕ w ઃܭ࣮໘ͷϨϏϡʔɺٕज़తͳෛ࠴ͷݕͳͲ w ༷໘ͷϨϏϡʔɺΞΫηγϏϦςΟ༷ͱͷᴥᴪͷݕͳͲ w 2"؍ͷϨϏϡʔɺҟৗܥ੬ऑੑ؍ͳͲͷߟྀ࿙ΕݕͳͲ
ਓؒϨϏϡʔͷ࠶ߏங w ࣭ήʔτͱͯ͠ͷϨϏϡʔ͔Βɺ VOLOPXOVOLOPXOྖҬΛݮ͢Δ ཧղͷͨΊͷϨϏϡʔͱͯ͠࠶ߏங͢Δ w ઃܭҙਤͷཧղ࣮ͷཧղʹΑΔϝϯλϧϞσϧ֫ಘ w ཁ݅ͷѲड͚ೖΕɺ"%3ʹΑΔҙਤจ຺ͷܧঝ
·ͱΊ w J04࣌ΨʔυϨʔϧઃܭͱཧղ༰қੑͷͨΊͷઃܭ͕ඞཁ w 4XJGUͷ҆શੑΛ࠷େݶʹ׆͔ͨ͠ΨʔυϨʔϧઃܭΛߦ͓͏ w ೝෛ࠴Λੜ·ͳ͍ͨΊͷΛΓࠐ͏