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
OSSとなったswift-buildで Xcodeのビルドを差し替えられるため 自分でXcod...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
yimajo
January 23, 2026
Programming
870
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
OSSとなったswift-buildで Xcodeのビルドを差し替えられるため 自分でXcodeを直せる時代になっている ダイアモンド問題編
#potatotips 94で発表する資料
yimajo
January 23, 2026
More Decks by yimajo
See All by yimajo
いま中途半端なSwift 6対応をするより、Default ActorやApproachable Concurrencyを有効にしてからでいいんじゃない?
yimajo
2
680
11年かかって やっとVibe Codingに 時代が追いつきましたね
yimajo
1
380
iOSアプリ開発で 関数型プログラミングを実現する The Composable Architectureの紹介
yimajo
3
320
良いテストコードのために悪いテストコードを理解する - 不安定なテスト編: iOSアプリ開発ユニットテストの場合
yimajo
22
6.7k
TCAの Shared Stateって どういう仕組みになってんの?
yimajo
0
2.6k
Swift 5.9 からの Observation はiOS17 未満 からも使えて struct の変更検知もできるんすかね?
yimajo
2
1.2k
不安定なテストは200種類あんねん
yimajo
3
1.2k
TCA v0.19.0からのSwitchStore/CaseLetが良い
yimajo
0
2k
TCAでViewStoreにKeyPath DynamicMemberLookupが使われてる件
yimajo
0
1.3k
Other Decks in Programming
See All in Programming
Webフレームワークの ベンチマークについて
yusukebe
0
160
タクシーアプリ『GO』の バックエンド開発のおける AI利活用と若者のすべて
pyama86
3
2k
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
wagyu
0
220
Oxcを導入して開発体験が向上した話
yug1224
4
310
net-httpのHTTP/2対応について
naruse
0
470
CSC307 Lecture 17
javiergs
PRO
0
320
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
160
TAKTでAI駆動開発の品質を設計する
j5ik2o
6
1.2k
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.6k
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
710
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
190
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
13
3.6k
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
Exploring anti-patterns in Rails
aemeredith
3
400
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
560
4 Signs Your Business is Dying
shpigford
187
22k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
Music & Morning Musume
bryan
47
7.2k
Transcript
QPUBUPUJQT!ZJNBKP 044ͱͳͬͨTXJGUCVJMEͰ 9DPEFͷϏϧυΛࠩ͠ସ͑ΒΕΔͨΊ ࣗͰ9DPEFΛͤΔ࣌ʹͳ͍ͬͯΔ μΠΞϞϯυฤ
w (6*ͷ9DPEFϏϧυγεςϜΛαʔϏεͱͯ͠Γग़͍ͯ͠Δ w 9DPEFαʔϏεͱϓϩηεؒ௨৴Λͯ͠Δ ϏϧυΛ044൛ʹࠩ͠ସ͑Δ 9DPEF Ͳ͏͍͏Έʁ 48##VJME4FSWJDF چ໊9$##VJME4FSWJDF
w (6*ͷ9DPEFϏϧυγεςϜΛαʔϏεͱͯ͠Γग़͍ͯ͠Δ w 9DPEFαʔϏεͱϓϩηεؒ௨৴Λͯ͠Δ w Γग़ͨ͠TXJGUCVJMEΛσόοά࣮ߦ͑͞Ͱ͖Δ ϏϧυΛ044൛ʹࠩ͠ସ͑Δ 9DPEF 9DPEFʹΑͬͯຊདྷ ىಈ͞ΕΔTXJGUCVJME
DMPOFͨ͠TXJGUCVJME 044ͷTXJGUCVJMEΛࢀর͢ΔΑ͏ ʹڥมͰύεΛม͑Δ Ͳ͏͍͏Έʁ
ϏϧυΛ044൛ʹࠩ͠ସ͑σόοά͢Δ TXJGUCVJMEΛ9DPEFͰσόοά w (JU)VC͔ΒTXJGUCVJMEΛHJUDMPOF w 9DPEFͰTXJGUCVJME1BDLBHFTXJGUΛ։͘ w %FCVH"UUBDIUP1SPDFTTCZ1*%PS/BNF w A48##VJME4FSWJDF#VOEMFAΛࢦఆ
w ϒϨʔΫϙΠϯτΛషͬͯTXJGUCVJMEΛͱΊΒΕΔΑ͏ʹ͓ͯ͘͠ w TXJGUQBDLBHFEJTBCMFTBOECPYMBVODIYDPEF w ࣗಈͰ9DPEF͕։͖ϓϩδΣΫτΛࢦఆͰ͖ΔΑ͏ʹͳΔͷͰࢦఆ w Ϗϧυ͢Δ
TXJGUQBDLBHFEJTBCMFTBOECPYMBVODIYDPEF TXJGUCVJMEΛ9DPEFͰ։͘ PQFO1BDLBHFTXJGU 9DPEFϏϧυ࣌ʹ9DPEFΛ TXJGUCVJMEʹࠩ͠ସ͍͑ͨ Έͳ͞ΜͷQSPKFDU 48##VJME4FSWJDF#VOEMF ϓϩηεʹରͯ͠ 48##VJME4FSWJDF#VOEMF ͱ͍͏໊Ͱ"UUBDI͠ͱ͘ͱ
9DPEFͰ։͍ͨTXJGUCVJMEଆ͕ σόοΨʔͱͯ͑͠Δ 9DPEF͕։͖ ϓϩδΣΫτΛબͰ͖Δɻ ͦͷ9DPEFͰڥม 9$##6*-%4&37*$&@1"5)Λ Γସ͑ɺ TXJGUCVJMEࣗମͷύε͕Δɻ 9DPEFϓϩδΣΫτΛ։͚ͩ͘Ͱ QSFCVJME͕ಈͣ͘Ͱͦͷͱ͖ 9$##6*-%4&37*$&@1"5)ͷTXJGUCVJME ͕ىಈ͢Δͣɻ ϏϧυΛ044൛ʹࠩ͠ସ͑Δ
͜ΕͰࣗͷϓϩδΣΫτͰϏϧυ݁Ռ͕͓͔͠ͳ݁Ռʹ ͳͬͨ࣌ɺϏϧυͷաఔΛ࣮ࡍʹσόοά࣮ߦͤ͞ΒΕΔ -5Ҏ্Ͱ͢ɻ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠
͓·͚
Ϗϧυ݁Ռ͕͓͔͍͠ ͱԿʁ ͦͦTXJGUCVJMEͬͯԿͯ͠Μͷʁ
TXJGUCVJMEͬͯԿ͢Μͷʁ ґଘͷཧ ग़ྗ5BSHFU#VJME(SBQI Ϗϧυܭըʢґଘͷௐʣ ೖྗ5BSHFU#VJME(SBQI
ग़ྗ#VJME1MBO ΠϯΫϦϝϯλϧϏϧυఆ 4XJGUίϯύΠϧ $0CKFDUJWF$ίϯύΠϧ -JOLFS Ξηοτͷॲཧ
TXJGUCVJMEͬͯԿ͢Μͷʁ ґଘͷཧ ग़ྗ5BSHFU#VJME(SBQI Ϗϧυܭըʢґଘͷௐʣ ೖྗ5BSHFU#VJME(SBQI
ग़ྗ#VJME1MBO ΠϯΫϦϝϯλϧϏϧυఆ 4XJGUίϯύΠϧ $0CKFDUJWF$ίϯύΠϧ -JOLFS Ξηοτͷॲཧ ϏϧυܭըϑΣʔζ 9DPEFͷ5BSHFU 1BDLBHFTXJGUͰఆٛͨ͠ґଘΛղܾ͠ ϥΠϒϥϦʢϑϨʔϜϫʔΫʣΛ ࣗಈͰ%ZOBNJD4UBUJD-JOLʹ Γସ͑ͯ͘ΕΔ
TXJGUCVJMEͬͯԿ͢Μͷʁ ґଘͷཧ ग़ྗ5BSHFU#VJME(SBQI Ϗϧυܭըʢґଘͷௐʣ ೖྗ5BSHFU#VJME(SBQI
ग़ྗ#VJME1MBO ΠϯΫϦϝϯλϧϏϧυఆ 4XJGUίϯύΠϧ $0CKFDUJWF$ίϯύΠϧ -JOLFS Ξηοτͷॲཧ ϏϧυܭըϑΣʔζ 9DPEFͷ5BSHFU 1BDLBHFTXJGUͰఆٛͨ͠ґଘΛղܾ͠ ϥΠϒϥϦʢϑϨʔϜϫʔΫʣΛ ࣗಈͰ%ZOBNJD4UBUJD-JOLʹ Γସ͑ͯ͘ΕΔ "QQ 4UBUJD -JC ґଘؔʹͳ͘ࢦఆͳ͚Ε4UBUJD-JOL
͔͠͠Կґଘʹ͕ͳ͍ ͜ͱͳΜͯ͋ΔΜ͔ʜ
ͦͦ
9DPEFͷچདྷ͔Β͋Δ&NCFEEFE'SBNFXPSLͷ5BSHFUΛ࡞Δͱ σϑΥϧτ%ZOBNJD-JOLͰ͋Γɺ͜͜Ͱ4UBUJD-JCSBSZΛબͿ͜ ͱ΄ͱΜͲͳ͔ͬͨͣ "QQ &NCFEEFE'SBNFXPSL Ҏ߱&' %ZOBNJD-JOL
"QQ 4UBUJD -JC 4UBUJD-JOLϏϧυ࣌ʹ"QQͷόΠφϦʹ4UBUJD-JC͕औΓࠐ·ΕΔ ͓͞Β͍
"QQ 4UBUJD -JC 4UBUJD-JOLϏϧυ࣌ʹ"QQͷόΠφϦʹ4UBUJD-JC͕औΓࠐ·ΕΔ "QQ %ZOBNJD-JOLϏϧυ࣌ʹ"QQͷόΠφϦʹϦϯΫ͚͕ͩऔΓࠐ·ΕΔ &NCFEEFE'SBNFXPSL Ҏ߱&' ͓͞Β͍
"QQ 4UBUJD -JC 4UBUJD-JOLϏϧυ࣌ʹ"QQͷόΠφϦʹ4UBUJD-JC͕औΓࠐ·ΕΔ "QQ %ZOBNJD-JOLϏϧυ࣌ʹ"QQͷόΠφϦʹϦϯΫ͚͕ͩऔΓࠐ·ΕΔ &NCFEEFE'SBNFXPSL Ҏ߱&' "QQ %ZOBNJD-JOLͨ͠5BSHFUͷ4UBUJD-JOLϏϧυ࣌ʹ
%ZOBNJD-JOL͞Εͨ5BSHFUʢ&'ʣ4UBUJD-JOLͷ4UBUJD-JC͕औΓࠐ·ΕΔ &NCFEEFE'SBNFXPSL Ҏ߱&' 4UBUJD -JC ͓͞Β͍
͠%ZOBNJD-JOLͱ4UBUJD-JOLͷઌͷ5BSHFU͕ڞ௨ͷ߹ɺ ͦΕ͕4UBUJDͷ··ͩͱϏϧυޙͷόΠφϦʹ&'ͷதʹ$PNNPO ͕ଘࡏ͠ɺ"QQͷதʹ$PNNPO͕ଘࡏ͢Δঢ়ଶͱͳͬͯ͠·͏🥲 "QQ &NCFEEFE'SBNFXPSL Ҏ߱&' 6UJMJUZ $PNNPO %ZOBNJD-JOL 4UBUJD-JOL
4UBUJD-JOL 4UBUJD-JOL
TXJGUCVJMEμΠΞϞϯυґଘΛղܾ͠ɺ ࣗಈͰ%ZOBNJD-JOLʹมߋͯ͘͠ΕͯॏෳΛͳͯ͘͘͠ΕΔʂʂ😀 "QQ &NCFEEFE'SBNFXPSL Ҏ߱&' 6UJMJUZ $PNNPO %ZOBNJD-JOL 4UBUJD-JOL %ZOBNJD-JOL
%ZOBNJD-JOL
࣮ࡍʹϓϩδΣΫτΛ࡞ͬͯΈΑ͏ ͋͑ͯμΠΞϞϯυґଘͷ͋ΔΑ͏ʹͭ͘Δ
·ͣ1BDLBHFTXJGUͰґଘؔٯసͷݪଇͷΑ͏ͳ͜ͱΛΔ ʢҙਤͱͯ͠'FBUVSF*OGSBʹґଘͤͣ$POUSBDUTQSPUPDPM͚͕ͩ͋ΔɻԿ͕خ ͍͔͠ͱ͍͏ͱྫ͑*OGSBʹ'JSFCBTFJPTTELґଘ͕͋Δ͔Β'FBUVSF͕ͦͷढ͍ ʹґଘͤͣ'FBUVSFΛεΩʔϚʹͯ͠Ϗϧυͨ͠Β1SFWJFX͕ߴɺΈ͍ͨͳʣ products: [ .library( name: “Infrastructure” targets:
[“Infrastructure”] ), .library( name: “Feature” targets: [“Feature”] ), .library( name: “Contracts” targets: [“Contracts”] ), ], targets: [ .target( name: “Feature” dependency: [“Contracts”] ), .target( name: “Contracts” dependency: [“”] ), .target( name: “Infrastructure ” dependency: [“Contracts”] ), ], $POUSBDUT 'FBUVSF *OGSBTUSVDUVSF staticͱ͔dynamicΛࢦఆͤͣ ͔ͭ֎෦ʹެ։͢ΔͷTarget୯ҐͷΑ͏ʹͯ͠͠·͏ʢ͜Ε͕ϛεʣ
"QQͱ&NCFEEFE'SBNFXPSL͔Βͦͷ1SPEVDUʹґଘ͢Δ߹ɺ TXJGUCVJMEΛ৴͡Δͱ'FBUVSF͚͕ͩ4UBUJDͰ͋Εྑ͍ͣʜ $POUSBDUT 'FBUVSF *OGSBTUSVDUVSF "QQ &NCFEEFE'SBNFXPSL Ҏ߱&' %ZOBNJD-JOL
࣮ࡍʹPUPPMͱONίϚϯυͰௐΔͱ $POUSBDUT͕%ZOBNJD-JOLͱͳͬͯ͘Εͳ͍ʜ ʢͭͷผ$POUSBDUT͕ੜ·ΕΔ🥲🥲ʣ $POUSBDUT 'FBUVSF *OGSBTUSVDUVSF "QQ &NCFEEFE'SBNFXPSL Ҏ߱&' %ZOBNJD-JOL
4UBUJD-JOL 4UBUJD-JOL 4UBUJD-JOL
9DPEFք۾Ͱ4UBUJDͳࢠҎ্٢ஹ ಉҰͷλʔήοτͱΈͳ͞Εͳ͍ w ܕ͕ಉ͡ͰϝλσʔλλΠϓ͕ҧ͍ಉҰͰͳ͍ w ܕͷΩϟετࣦഊ͢Δ w ܕͷύλʔϯϚονࣦഊ͢Δ w TUBUJDͰγϯάϧτϯʹ͠Α͏ͱͯ͠ผʑʹ࡞ΒΕΔ
Կ͕%ZOBNJD4UBUJD͔ݟͯΈΑ͏ PUPPMONίϚϯυͰத͕Θ͔Δ "QQ/BNFBQQ 'SBNFXPSLT "QQ/BNF "QQ/BNFEFCVHEZMJC &'GSBNFXPSL *OGSBTUSVDUVSFGSBNFXPSL PUPPM-%ZOBNJD-JOL͍ͯ͠Δύε͕Θ͔Δ ONH6ϑΝΠϧͷߏ͕Θ͔ΔͷͰTXJGUEFNBOHMFͱ͘Έ߹ΘͤΔͱ
4UBUJD-JOL͞ΕͯΔ͔͕Θ͔ΔͷͰɺ ܕ͕ݟ͔ͭΒͳ͚Ε4UBUJD-JOLͰͳ͍ͱΈͳͤΔɻ $POUSBDUTGSBNFXPSL $POUSBDUTGSBNFXPSL
ݪҼԿ͔ w TXJGUCVJMEʹμΠΞϞϯυΛղܾͯ͘͠ΕΔॲཧ͕͋ΔΜͯ w SFTPMWF%JBNPOE1SPCMFN*O1BDLBHFϝιου w ͲΜͳʓʓʓ͘ΕͨॲཧͳΜΖ
ݪҼԿ͔ ͜ΕΛσόοάϏϧυͯ֬͠ೝͯ͠վળͰ͖Δͷ͕044ͷྑ͞ʂ ૣݟΑ͏ʂ w TXJGUCVJMEʹμΠΞϞϯυΛղܾͯ͘͠ΕΔॲཧ͕͋ΔΜͯ w SFTPMWF%JBNPOE1SPCMFN*O1BDLBHFϝιου w ͲΜͳʓʓʓ͘ΕͨॲཧͳΜΖ
None
ແݶϧʔϓʹ ͳΒͳ͍Α͏ʹ ࠷ޙͷͱݱࡏͷ͕ ҧ͏߹ʹͷΈ ϧʔϓΛଓ͚Δॲཧɻɻɻ ͜Εϧʔϓൈ͚ͯΔ͚Ͳ ղܾ͍ͯ͠ͳ͍
ແݶϧʔϓʹ ͳΒͳ͍Α͏ʹ ࠷ޙͷͱݱࡏͷ͕ ҧ͏߹ʹͷΈ ϧʔϓΛଓ͚Δॲཧɻɻɻ ͜Εϧʔϓൈ͚ͯΔ͚Ͳ ղܾ͍ͯ͠ͳ͍ %JBNPOET͕ͷ·· ղܾ͍ͯ͠ͳ͍Μ͚ʜ
ϫʔΫΞϥϯυͱ͔ͳ͍Μ͔ʁ w ݪҼ͔Βߟ w TXJGUCVJMEͷίʔυͰɺτοϓϨϕϧͷ֊ͷґଘΛվળͨ͠ޙɺ5BSHFUͷґଘͷνΣοΫ͕ෳஈ֊ w ཧ༝ΒΜ͚ͲɺτοϓϨϕϧͷνΣοΫͰ%ZOBNJDఆߦͬͯΔ w ͦͷ%ZOBNJDʹͨ͠UBSHFUTͷνΣοΫεΩοϓͯ͠νΣοΫ͍ͯ͠ͳ͍Α͏ʹݟ͑Δ w
۩ମతʹτοϓϨϕϧͷ"QQͱ&'͕ґଘ͍ͯ͠Δ*OGSBTUSVDUVSF1SPEVDUΛ%ZOBNJDʹͨ͠ޙɺͦ ͷ5BSHFUͰ͋Δ*OGSBTUSVDUVSFͷEFQFOEFODJFTͷνΣοΫΛεΩοϓͯ͠͠·͍ͬͯΔʁ w ͭ·Γɺஈ֊͚ͩͰॏෳνΣοΫͤ͞Εྑ͘ͳ͍ʁ w ۩ମతʹτοϓϨϕϧͷஈ֊Ͱ5BSHFUͷॏෳݕΛͤ͞ͳ͍Α͏ʹ͢ΔͨΊɺ1BDLBHFTXJGU Ͱެ։͢Δ1BDLBHF1SPEVDUΛ֎෦5BSHFUͱʹͳΔΑ͏ʹ͢Δ
ϫʔΫΞϥϯυ products: [ // τοϓϨϕϧͷAppͱEF͔ΒLink͞ΕͯΔɻ .library( name: “Infrastructure” // Dynamicʹఆ͞ΕΔ
targets: [“Infrastructure”] // ͜Ε͕εΩοϓʁ ), .library( // App͔ΒͷΈLink͞Εͯͨ name: “Feature” // staticఆ targets: [“Feature”] // ͜ͷઌͷґଘνΣοΫ͠ͳ͍ʁ ), .library( // App͔ΒͷΈLink͞Εͯͨ name: “Contracts” // Staticఆ targets: [“Contracts”] // ͜ͷઌͷґଘνΣοΫ͠ͳ͍ʁ ), ],
ϫʔΫΞϥϯυ products: [ // τοϓϨϕϧͷAppͱEF͔ΒLink͞ΕͯΔɻ .library( name: “Infrastructure” // Dynamicʹఆ͞ΕΔ
targets: [“Infrastructure”] // ͜Ε͕εΩοϓʁ ), .library( // App͔ΒͷΈLink͞Εͯͨ name: “Feature” // staticఆ targets: [“Feature”] // ͜ͷઌͷґଘνΣοΫ͠ͳ͍ʁ ), .library( // App͔ΒͷΈLink͞Εͯͨ name: “Contracts” // Staticఆ targets: [“Contracts”] // ͜ͷઌͷґଘνΣοΫ͠ͳ͍ʁ ), ], products: [ // ͜ΕApp͔ΒͷΈLink͢Δ .library( name: “AppLib” targets: [ “Feature”, // Staticఆ // EFLibʹ͋ΔͷͰDynamicఆ ”Infrastructure” ] ), // ͜ΕEF͔ΒͷΈLink͢Δ .library( name: “EFLib” targets: [ “Contracts” // Staticఆ // AppLibʹ͋ΔͷͰ “Infrastructure”, // Dynamicఆ ɹ] ), ], // .targets: [] ݩͷ··ґଘΛهड़ վળ
ࠜຊతʹ ͠ଞʹྑ͍Γํ͕͋Ε ڭ͍͑ͯͩ͘͞