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
yimajo
January 23, 2026
Programming
880
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
700
11年かかって やっとVibe Codingに 時代が追いつきましたね
yimajo
1
390
iOSアプリ開発で 関数型プログラミングを実現する The Composable Architectureの紹介
yimajo
3
330
良いテストコードのために悪いテストコードを理解する - 不安定なテスト編: iOSアプリ開発ユニットテストの場合
yimajo
22
6.8k
TCAの Shared Stateって どういう仕組みになってんの?
yimajo
0
2.7k
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
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
180
アルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル
naoya
16
3.7k
React本体のコードリーディング
high_g_engineer
0
100
JAWS-UG横浜 #102 AWSサ終供養LT会 成仏できない AWS サービスたち 〜本日、三体供養します〜
maroon1st
0
260
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
470
分散システム、なんですぐ死んでしまうん?耐障害性を高めたいあなたのためのレジリエンスパターン入門
mshibuya
7
7.1k
Terraform標準の組織で AWS CDKをどう使うか
mu7889yoon
1
420
Google Apps Script で Ruby を動かす
kawahara
0
110
信頼性について考えてみる(SRE NEXT 2026 miniLT)
hayama17
0
230
Foundation Models frameworkで画像分析
ryodeveloper
1
160
全PRの83%がAIレビューだけでマージできるようになった開発組織はその後どうなったか
athug
0
580
「正の参照」と 「負の導出」で組む ハーネスエンジニアリング
cottpan
1
150
Featured
See All Featured
We Have a Design System, Now What?
morganepeng
55
8.2k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
3
370
The World Runs on Bad Software
bkeepers
PRO
72
12k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Skip the Path - Find Your Career Trail
mkilby
1
170
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
220
My Coaching Mixtape
mlcsv
0
180
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.2k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
980
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
190
Designing Powerful Visuals for Engaging Learning
tmiket
1
460
Amusing Abliteration
ianozsvald
1
240
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: [] ݩͷ··ґଘΛهड़ վળ
ࠜຊతʹ ͠ଞʹྑ͍Γํ͕͋Ε ڭ͍͑ͯͩ͘͞