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
ビルドシステムを C# 大統一したお話
Search
Tetsuya Mori
PRO
August 02, 2024
Programming
2
1.2k
ビルドシステムを C# 大統一したお話
2024/08/02 (Fri) に開催された「Unity CI/CD 完全に理解した勉強会」にて発表しました。
Unity のビルドシステムを C# 大統一した際に得られた知見を紹介しています。
Tetsuya Mori
PRO
August 02, 2024
Tweet
Share
More Decks by Tetsuya Mori
See All by Tetsuya Mori
C# 大統一理論推進委員会 会員のための Unity Package Manager プロジェクト構成案
monry
PRO
0
1.4k
はじめての C# 大統一理論
monry
PRO
0
710
unity1week でチーム開発を成功させる秘訣
monry
PRO
0
220
Unity で ARゲームを作った話
monry
PRO
1
760
Visual Programming Framework UniFlow のご紹介/Introducing UniFlow
monry
PRO
2
2.9k
UniFlow 完全に理解した / I can develop UniFlow a little.
monry
PRO
0
510
Democratized Unity Package Manager
monry
PRO
1
2.7k
使ってみよう! Unity RemoteSettings/Let's use Unity RemoteSettings
monry
PRO
1
1.1k
ごっこランドをささえる技術 〜AssetBundle 編〜/AssetBundle Fully Understood
monry
PRO
3
6.9k
Other Decks in Programming
See All in Programming
The Weight of Data: Rethinking Cloud-Native Systems for the Age of AI
hollycummins
0
220
自分のために作ったアプリが、グローバルに使われるまで / Indie App Development Lunch LT
pixyzehn
1
140
JavaOne 2025: Advancing Java Profiling
jbachorik
1
320
custom_lintで始めるチームルール管理
akaboshinit
0
190
goにおける コネクションプールの仕組み を軽く掘って見た
aronokuyama
0
150
家族・子育て重視/沖縄在住を維持しながらエンジニアとしてのキャリアをどのように育てていくか?
ug
0
260
Go1.24 go vetとtestsアナライザ
kuro_kurorrr
2
740
パスキーのすべて / 20250324 iddance Lesson.5
kuralab
0
140
Chrome Extension Techniques from Hell
moznion
1
100
snacks.nvim内のセットアップ不要なプラグインを紹介 / introduce_snacks_nvim
uhooi
0
370
Modern Angular:Renovation for Your Applications @angularDays 2025 Munich
manfredsteyer
PRO
0
160
AIコーディングワークフローの試行 〜AIエージェント×ワークフローでの自動化を目指して〜
rkaga
2
1.4k
Featured
See All Featured
Thoughts on Productivity
jonyablonski
69
4.5k
Optimizing for Happiness
mojombo
377
70k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
12k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Building Adaptive Systems
keathley
41
2.5k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
31
4.8k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
17
1.1k
Large-scale JavaScript Application Architecture
addyosmani
511
110k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Reflections from 52 weeks, 52 projects
jeffersonlam
349
20k
How GitHub (no longer) Works
holman
314
140k
Transcript
גࣜձࣾΩοζελʔ$50 ɹ࠸ ϏϧυγεςϜΛ$େ౷Ұ͓ͨ͠ 6OJUZ$*$%શʹཧղͨ͠ษڧձBU%F/"
͜ΜΜʂ 2
w͡Ίʹ w6OJUZʹԙ͚Δ$*$% wϏϧυγεςϜΛ$େ౷Ұ͓ͨ͠ w$େ౷Ұͨ͠ࡍʹಘΒΕͨݟ w·ͱΊ 3 ͓͠ͳ͕͖ ΞδΣϯμ
͡Ίʹ 4
w+PC$50BU,JET4UBS*OD w'BNJMZ࠺ɾ່ ࡀ ɾ່ ࡀ w6OJUZྺ w5X (I!NPOSZ wBLBΜΓ͌ઌੜ
w$େ౷Ұཧਪਐҕһձྑձһ 5 ࣗݾհ ͡Ίʹ
6 ࢿྉɾಈը ͡Ίʹ εϥΠυڞ༗🙆 ࡱӨ🙆 ΞʔΧΠϒಈը🙆
w6OJUZΞϓϦϓϩδΣΫτʹԙ͚Δ$*$% w(JU)VC"DUJPOTΛ༻͍ͨ$*$% w$%ଟΊ 7 ࠓ͓͢͠Δ͜ͱ ͡Ίʹ
w4MBDL"QQ(JU)VC"QQͷৄࡉͳ࣮ w+FOLJOTΛ༻͍ͨ$*$% w࣮ػςετ 8 ࠓ͓͠͠ͳ͍͜ͱ ͡Ίʹ
w$*$%ʹʮਖ਼ղʯతͳͷ͕ແ͘ɺ৫ɾνʔϜ ͝ͱʹΞϨϯδ͕ඞཁʹͳ͖ͬͯ·͢ wຊ͓͢͠Δ༰גࣜձࣾΩοζελʔʹԙ͚Δ ͝ՈఉͷຯͰ͢ͷͰɺ͋͘·Ͱࢀߟఔʹ 9 ͓͜ͱΘΓʢ༧ઢʣ ͡Ίʹ
6OJUZʹԙ͚Δ$*$% 10
w$*$POUJOVPVT*OUFHSBUJPO wૈ͘ݴ͑ςετΛࣗಈ࣮ߦ͢Δͱ͔ͦΜͳײ͡ w$%$POUJOVPVT%FMJWFSZ%FQMPZNFOU wϏϧυͱ͔ՌͷΞοϓϩʔυΛࣗಈ࣮ߦ͢Δతͳ 11 $*$%JTԿʁ 6OJUZʹԙ͚Δ$*$%
w$*6OJUZ5FTU3VOOFSͰ&EJU.PEF 1MBZ.PEFͷςετΛ࣮ߦ w$%1MBZFSϏϧυ"EESFTTBCMFTϏϧυΛ ߦ͍ɺ֤ΞϓϦετΞ0CKFDU4UPSBHFͳͲʹ ϏϧυՌΛ৴ 12 6OJUZʹԙ͚Δ$*$%ͬͯʁ 6OJUZʹԙ͚Δ$*$%
w6OJUZ6OJUZ&EJUPS6OJUZ)VCͱʹ $-*$PNNBOE-JOF*OUFSGBDFΛఏڙ w$*$%ʹԙ͍ͯ(6*ૢ࡞ΛΘͳ͍$-*ෆՄܽ wެࣜυΩϡϝϯτʹهࡌͷ࣮ߦϑΝΠϧʹ -batchmode / --headlessҾΛ͢ 13 6OJUZʹԙ͚Δ$*$%ͬͯʁ 6OJUZʹԙ͚Δ$*$%
w6OJUZ5FTU3VOOFS w&EJUPSͰݴ͏ͱˠ w8JOEPX(FOFSBM 5FTU3VOOFS w$-*͔Β࣮ߦՄೳ 14 ͏ͪΐ͍LXTL$* 6OJUZʹԙ͚Δ$*$%
w6OJUZ5FTU3VOOFSΛίϚϯυϥΠϯ͔Β࣮ߦ 15 ͏ͪΐ͍LXTL$* 6OJUZʹԙ͚Δ$*$% /path/to/Unity \ -runTests \ -batchmode \
-projectPath /path/to/project \ -testResults /path/to/result \ -logFile /path/to/log
w1MBZFSϏϧυ 16 ͏ͪΐ͍LXTL$% 6OJUZʹԙ͚Δ$*$% using UnityEngine; BuildPipeline.BuildPlayer( new BuildPlayerOptions {
scenes = EditorBuildSettings.scenes.Select(x => x.path).ToArray(), options = BuildOptions.Development | BuildOptions.AllowDebugging | BuildOptions.ConnectWithProfiler, locationPathName = "/path/to/export", target = EditorUserBuildSettings.activeBuildTarget, targetGroup = BuildPipeline.GetBuildTargetGroup( EditorUserBuildSettings.activeBuildTarget ), } );
w"EESFTTBCMFTϏϧυ w"TTFU(SPVQTͱ͔ͷ ઃఆΛࡁ·͓ͤͯ͘ wˣͰઃఆʹ४ͯ͡Ϗϧυ 17 ͏ͪΐ͍LXTL$% 6OJUZʹԙ͚Δ$*$% using UnityEditor.AddressableAssets.Settings; AddressableAssetSettings.BuildPlayerContent();
wҎ্Ͱ6OJUZΈͷ͋Δ͓ऴΘΓͰ͢ʂ w͔͜͜ΒઌɺϏϧυγεςϜΛ$େ౷Ұ͓ͨ͠ ʢຊʣΛ͓ಧ͚͠·͢ 18 Ͷʁ؆୯Ͱ͠ΐ͏ʁ 6OJUZʹԙ͚Δ$*$%
ϏϧυγεςϜΛ$େ౷Ұ͓ͨ͠ 19
w6OJ5BTLͱ͔3ͱ͔Ͱ͓ೃછΈͷ!OFVFDD ઌੜ͕ఏএ͞Ε͍ͯΔʮΫϥΠΞϯταʔό$ Ͱॻ͘ͱྑ͍ΑͶʯͱ͍͏ߟ͑ํ wࠓճʮ͜ͷߟ͑ํΛϏϧυγεςϜʹద༻ͨ͠ʯ ͱݴ͏͓Ͱ͢ 20 $େ౷Ұʁ ϏϧυγεςϜΛ$େ౷Ұ͓ͨ͠
21 $େ౷Ұʁ ϏϧυγεςϜΛ$େ౷Ұ͓ͨ͠
wΩοζελʔʹੌΤϯδχΞͷํ͕ߏஙͯ͘͠Ε ͨϏϧυγεςϜ͕ଘࡏ wී௨ʹ҆ఆՔಇ͍ͯ͠Δ͕ɺ՝ग़͖ͯͨ 22 8IZ $େ౷Ұ ϏϧυγεςϜΛ$େ౷Ұ͓ͨ͠ ʮͬ͜͝ϥϯυʯઐ༻ ˠ൚༻ੑ #BTI
3VCZͰߏ ˠଐਓੑߴ
w൚༻ੑߴΊͭͭɺϝϯςφϯε࣌ͷଐਓੑΛԼ͍͛ͨʂ Ωοζελʔ6OJUZΛͬͯࢠڙ͚ήʔϜΛ ࡞͍ͬͯΔձࣾ ΤϯδχΞશһ$ॻ͚Δ $େ౷Ұ͢Εϝϯςͱ͔͘͢͠ͳΔʢͣʣ 23 8IZ $େ౷Ұ ϏϧυγεςϜΛ$େ౷Ұ͓ͨ͠
24 ओͳొਓ ϏϧυγεςϜΛ$େ౷Ұ͓ͨ͠ "41/&5$POTPMF"QQ 4MBDL"QQ (JU)VC"DUJPOT 6OJUZ)VC 6OJUZ 9DPEFYDPEFCVJME 'BTUMBOF
5FTU fl JHIU %FQMPZ(BUF (PPHMF1MBZ
w4MBDL"QQ͔ΒϦΫΤετ w"41/&5ͳ$αʔό͕ϏϧυΦϓγϣϯΛߏங w(JU)VC"DUJPOT"1*Λୟ͍ͯ8PSL fl PXىಈ w$POTPMF"QQͳ$ϓϩάϥϜ͕&EJUPSΛΠϯετʔϧͨ͠Γ 6OJUZ$-*Λ࣮ߦ w'BTUMBOF 1MBZFS ͱ͔"844%,
""4 ͱ͔ΛͬͯσϓϩΠ wϏϧυ݁ՌΛţ੩Š 25 Ϗϧυج൫ͷେ·͔ͳϑϩʔ ϏϧυγεςϜΛ$େ౷Ұ͓ͨ͠
Ϗϧυج൫ͷେ·͔ͳϑϩʔ ϏϧυγεςϜΛ$େ౷Ұ͓ͨ͠
Ϗϧυج൫ͷେ·͔ͳϑϩʔ ϏϧυγεςϜΛ$େ౷Ұ͓ͨ͠
Ϗϧυج൫ͷେ·͔ͳϑϩʔ ϏϧυγεςϜΛ$େ౷Ұ͓ͨ͠
29 Ϗϧυج൫ͷେ·͔ͳϑϩʔ ϏϧυγεςϜΛ$େ౷Ұ͓ͨ͠
30 Ϗϧυج൫ͷେ·͔ͳϑϩʔ ϏϧυγεςϜΛ$େ౷Ұ͓ͨ͠ ύϥϝʔλΛղੳͯ͠Ϗϧυରͷ ϓϥοτϑΥʔϜΛܾఆ͢Δ ฒྻϏϧυ ţ੩Š
ηΫγϣϯλΠτϧ w4PMVUJPOʹऩΊΔ w$POTPMF"QQ w4MBDL$BMMCBDL༻αʔό wϥΠϒϥϦ wύϥϝʔλఆٛͳͲͷϞσϧ wΦϨΦϨ4MBDL$MJFOU 31 $େ౷ҰͷϙΠϯτ ϏϧυγεςϜΛ$େ౷Ұ͓ͨ͠
wύϥϝʔλఆٛΛू wύϥϝʔλͷݩωλຖʹ IParameterSourceΛ࣮ w౷Ұతͳ*'ͰύϥϝʔλΞΫηε 32 $େ౷ҰͷϙΠϯτ ϏϧυγεςϜΛ$େ౷Ұ͓ͨ͠ public readonly partial
record struct Parameter( string Name, ParameterType ParameterType, InputCondition InputCondition, string EnvironmentVariableName, string GitHubKey, string SlackKey, string InfoPlistKey, string? Label = default, Func<ParameterProvider, object>? ValueFactory = default, object? DefaultValue = default ) public interface IParameterSource { bool TryGetValue(Parameter parameter, out object? value); } public partial record UnityProjectSettings( UnityPlayerSettings PlayerSettings ) : IParameterSource {} public sealed class EnvironmentVariable( IConfiguration configuration ) : IParameterSource {} public sealed class ParameterProvider { public T? GetValue<T>( Parameter parameter, T? defaultValue = default ) { // 登録済の IParameterSource 達から値を取得 } }
33 $େ౷ҰͷϙΠϯτ ϏϧυγεςϜΛ$େ౷Ұ͓ͨ͠ w*ODSFNFOUBM4PVSDF(FOFSBUPSΛ༗ޮ׆༻͢Δ w/V(FUΛ࠷େݶ׆༻͢Δ wInfo.plistͱ͔ͷ1SPQFSUZ-JTUͷύʔε1-JTU/FU͔ͳʁ wProjectSettings.assetͱ͔ͷ:".-ϑΝΠϧύʔε7:BNM͕Φε εϝ w(JU)VC"1*0DUPLJUҰ w"844ͱ͔$MPVE
fl BSF3ͱ͔ͷΞοϓϩʔυ"844%,
wड͚͢ϏϧυύϥϝʔλఆٛΛҰݩԽͰ͖ͨ wϞϊϨϙԽͰ͖ͯɺΟϯυͷ3JEFSͰ։ൃ݁ wϝϯςφϯεͷଐਓੑʹ͍ͭͯ͜Ε͔Β wগͳ͘ͱNPOSZతʹϝϯςφϯεʹର͢Δ ৺ཧతϋʔυϧ͕Լ͕ͬͨʢ#BTIۤखʜʣ 34 $େ౷Ұͯ͠ΈͯͲ͏ͩͬͨʁ ϏϧυγεςϜΛ$େ౷Ұ͓ͨ͠
$େ౷Ұͨ͠ࡍʹಘΒΕͨݟ 35
w͔͜͜Βઌͷ6OJUZͪΖΜ$େ౷Ұ͢Β ΄ͱΜͲؔͳ͍ʹͳΓ·͢ wͲͪΒ͔ͱ͍͏ͱࣗલͰϏϧυج൫࡞Δࡍͷݟͱ ݴ͑ΔͷͰڵຯ͋ΔτϐοΫΛ͝ཡ͍ͩ͘͞ wษڧձେʹεΩοϓ͢ΔՄೳੑ͕͋Γ·͕͢ ͦͷࡍ͝༰͍͚ࣻͨͩΕ͍Ͱ͢ 36 ͓͜ͱΘΓ $େ౷Ұͨ͠ࡍʹಘΒΕͨݟ
wݩʑϑϨʔϜϫʔΫͳͲͷ$*ʹ(BNF$*ͷ VOJUZUFTUSVOOFSΛ͍ͬͯͨ w$%ج൫Λ$େ౷Ұ͢ΔࡍʹʮͦͷϊϦͰߦ͚Δ ϕʔʯͱ͔ࢥͬͯΜͩΒҰॠͰ6TBHF৯͍௵ͨ͠ w4FMGIPTUFE3VOOFS্Ͱಈ͔ͤΔΑ͏ͳߏʹ ͢Δඞཁ͕͋Δ 37 4FMGIPTUFE3VOOFSඞਢ $େ౷Ұͨ͠ࡍʹಘΒΕͨݟ
w/&5Ͱ$POTPMF"QQॻ͘ͳΒ$"'બΜͰ͓͚🙆 w҆ఆͷ!OFVFDDઌੜʢ$Zࣾʣ wWͰ݁ߏେͳ༷มߋ͕ೖͬͯΔͷͰཁҙ wίϝϯτ͔ΒύϥϝʔλͷVTBHFग़ͯ͘͠ΕΔΑ͏ʹͳͬͨ w(FOFSJD)PTUʹϕολϦͰͳ͘ͳͬͨ wίϚϯυͷొํ๏݁ߏมΘͬͯΔͷͰ3&"%.&ඞಡ 38 $POTPMF"QQ'SBNFXPSLศར $େ౷Ұͨ͠ࡍʹಘΒΕͨݟ
wෳδϣϒͷ࣮ߦΛߏͰ͖Δ(JU)VC"DUJPOTެࣜͷΈ wJ04"OESPJEͷϏϧυΛฒྻ࣮ߦ͍ͨ͠߹ͳΜ͔ʹศར wPVUQVUTͷΓऔΓ͕গʑΊΜͲ͍ wcloudposse/github-action-matrix-outputs-write@v1 wcloudposse/github-action-matrix-outputs-read@v1 w"QQMF4JMJDPOͳNBD04ͩͱKRͷΠϯετʔϧͰస͚ΔͷͰ 4FUVQKRͷTUFQΛऔΓআ͔ͳ͍ͱμϝ͔ 39 .BUSJY4USBUFHZΛར༻͢Δ $େ౷Ұͨ͠ࡍʹಘΒΕͨݟ
w"OESPJEͷ,FZ4UPSF1BTT1ISBTF 9DPEFͷ,FZ$IBJOͳͲͷൿಗใ 4FDSFUTͰཧ wϩάͱ͔ͪΌΜͱϚεΫ͞ΕΔͷͰ҆৺҆શ wϦϙδτϦຖʹҟͳΓ͏Δ1BUIͱ໊͔শͱ͔ͷใ 7BSJBCMFTΛ׆༻͢Δ 40 4FDSFUT7BSJBCMFTΛ༗ޮ׆༻͢Δ $େ౷Ұͨ͠ࡍʹಘΒΕͨݟ
w$GITHUB_OUTPUTʹग़ྗσʔλ༻ͷϑΝΠϧύε͕ઃఆ ͞Ε͍ͯΔͷͰ֤εςοϓͷग़ྗ͜ͷϑΝΠϧʹ key=value\nͷܗࣜͰॻ͖ࠐΉ w$GITHUB_ENVʹڥม༻ͷϑΝΠϧύε͕ઃఆ͞Εͯ ͍ΔͷͰʜʢSZ wվߦΛؚΉ߹ώΞυΩϡϝϯτͰॻ͖ࠐΉ 41 $GITHUB_OUTPUT / $GITHUB_ENV
$େ౷Ұͨ͠ࡍʹಘΒΕͨݟ
wΈΜͳେ͖J04ͷ1SPWJTJPOJOH1SP fi MFT"QQ4UPSF $POOFDUʹཧͯ͠Β͍·͠ΐ͏ w*TTVFS*%,FZ*%1SJWBUF,FZΛదʹઃఆ͢Ε "E)PDϏϧυͱ͔Ϥγφʹ࡞Ε·͢ w1SJWBUF,FZ#BTF &ODPEFEͳจࣈྻΛ 4FDSFUTʹஔ͍ͱ͍ͯɺ ࣮ߦ࣌ʹbase64
-d͢Δײ͡Ͱ 42 $MPVE.BOBHFE$FSUJ fi DBUFT $େ౷Ұͨ͠ࡍʹಘΒΕͨݟ $ xcodebuild -exportArchive \ -archivePath /path/to/archive \ -exportPath /path/to/export_directory \ -exportOptionsPlist ExportOptions.plist \ -allowProvisioningUpdates \ -authenticationKeyIssuerID <IssuerID> \ -authenticationKeyID <API Key ID> \ -authenticationKeyPath <API Key Path>
w"OESPJE,FZ4UPSF"MJBTͷ1BTT1ISBTF ຖճͷϏϧυͰઃఆ͢Δඞཁ͕͋Δ wIPreprocessBuildWithReportͰڥม͔ΒΒ͏ͷ ͕ϕετϓϥΫςΟε͔ͳʁ 43 "OESPJE,FZ4UPSFͷύεϑϨʔζ $େ౷Ұͨ͠ࡍʹಘΒΕͨݟ UnityEditor.PlayerSettings.Android.keystorePass = Environment.GetEnvironmentVariable("hogefuga");
UnityEditor.PlayerSettings.Android.keyaliasPass = Environment.GetEnvironmentVariable("piyopoyo");
wϓϩδΣΫτ֎ʹஔ͘ͱϑϧύε͕ProjectSettings.assetʹهࡌ ͞ΕΔ͕ɺϓϩδΣΫτͩͱ૬ରύεʹͳΔ wΞοϓϩʔυΩʔͱ͔ϦϙδτϦʹίϛοτͨ͘͠ͳ͍ͷ Ͱ.gitignoreͰআ֎ w4FDSFUTʹ#BTFจࣈྻͰอଘ͓͍ͯͯ͠Ϗϧυ࣌ʹ %FDPEF͢Δͱ͔͕ྑͦ͞͏ 44 "OESPJE,FZ4UPSFͦͷͷ $େ౷Ұͨ͠ࡍʹಘΒΕͨݟ AndroidKeystoreName:
'/Users/monry/monry.keystore' AndroidKeyaliasName: monry AndroidKeystoreName: '{inproject}: .android/monry.keystore' AndroidKeyaliasName: monry
wLibrary/ͷ࠶ߏங͔͔࣌ؒΔͷͰΩϟογϡ͍ͨ͠ wDeNA/setup-job-workspace-action@v2͕ศར w͍ํ3&"%.&ࢀর wσΟεΫ༰ྔͱ͝૬ஊͷ্ɺ͝ར༻ܭըతʹ 45 Ωϟογϡ $େ౷Ұͨ͠ࡍʹಘΒΕͨݟ
wಉҰ0SHTͰ͋Ε1SJWBUF3FQPTJUPSZͷ $PNQPTJUF"DUJPOT3FVTBCMF8PSL fl PXTΛࢀর Ͱ͖ΔΑ͏ʹͳͬͨ w6OJUZ&EJUPSͷΠϯετʔϧॲཧͱ͔ෳͷ8PSL fl PX ͰඞཁʹͳͬͨΓ͢ΔͷͰ࠶ར༻Մೳͳܗʹ͓ͯ͘͠ͱ👍 w3FQPTJUPSZ4FDSFUTͱؚ͔Ίͯɺsecrets:
inheritͰ ؙ͝ͱͤΔ 46 $PNQPTJUF"DUJPOT3FVTBCMF8PSL fl PXT $େ౷Ұͨ͠ࡍʹಘΒΕͨݟ
w8PSL fl PXΛ࣮ߦ͢Δ8PSLTQBDFதԝूݖʹࢄ࣮ߦʹରԠ Ͱ͖ΔΑ͏ʹ͢Δ w"OESPJE,FZ4UPSFͷ1BTT1ISBTFͳͲϓϩδΣΫτຖʹҟͳ ΔͷͰɺݸผͷϦϙδτϦΛ8PSLTQBDFͱͯ͠4FDSFUTΛཧ wݕূϓϩδΣΫτͳͲڞ௨ͷ4FDSFUTͰͳ͍ͣͳͷͰڞ௨ͷ 8PSLTQBDFͰ࣮ߦ͢Δ wલड़ͷDeNA/setup-job-workspace-action@v2Λ͑8PSLTQBDF͕ ΰνϟΔ৺ͳ͍
47 தԝूݖࢄ࣮ߦ $େ౷Ұͨ͠ࡍʹಘΒΕͨݟ
w͔ͬ͠Γ༷ΛಡΈղ͖·͠ΐ͏ w&WFOUT"1**OUFSBDUJWJUZ4VSGBDFT w/&5͚ͷެࣜ4MBDL4%,తͳͷແͦ͞͏ wؤுͬͯࣗલͰΜ͡Ό͚ͬͨͲɺ୳ͤ͋Δ͔ͳʁ 48 4MBDL"QQͷߏங݁ߏϝϯυΠ $େ౷Ұͨ͠ࡍʹಘΒΕͨݟ
w4MBDL͔ΒͷϦΫΤετʹඵҎʹϨεϙϯεΛ ฦ͞ͳ͍ͱΤϥʔѻ͍ʹͳΔ wجຊతʹɺ࣮ॲཧTask.Run()ͯ͠ʮͱΓ͋͑ͣʯͷ ϨεϙϯεΛฦ͢ͷ͕Φεεϝ w͋ΒΏΔॲཧඇಉظΛલఏʹ"1*ઃܭ͕ҝ͞Εͯ ͍ΔͷͰԿͱ͔ͳΔͣ 49 4MBDL$BMMCBDL͔ͤͬͪ $େ౷Ұͨ͠ࡍʹಘΒΕͨݟ
wຊ൪ϦϦʔεޙʹमਖ਼ΛೖΕΔ߹ʹʮखݩͷڥͰ ݕূ͍ͨ͠ʜʯͬͯͳΔͷͰෳ࡞͓ͬͯ͘͠ wάϩʔόϧʹΞΫηεͰ͖Δ63-͕ඞཁʹͳΔͷͰ OHSPLͱ͔Ͱݻఆͷϗετ໊ΛׂΓ͓ͯͯ͘ͱ👍 50 4MBDL"QQ։ൃ༻ͱຊ൪༻Λ࡞Δ $େ౷Ұͨ͠ࡍʹಘΒΕͨݟ
wಉ͡Α͏ͳϏϧυΛ࿈͢ΔࡍʹίϐϖͰ͖ΔͷͰɺ .FOUJPO4MBTI$PNNBOEʹରԠ͢Δͱ👍 wਖ਼نԽ͞Εͨจࣈྻ͕ඈΜͰ͘ΔͱݶΒͳ͍ͷͰɺ ͦΕͳΓͷਖ਼نදݱྗٻΊΒΕΔ 51 4MBDL.FOUJPOͳͲʹରԠ͢Δͱศར $େ౷Ұͨ͠ࡍʹಘΒΕͨݟ
w4MBDL"QQ͔Βͷ$BMMCBDLΛड͚͚Δαʔό %PDLFSԽ͓ͯ͘͠ͱศར wϏϧυج൫ϦϙδτϦͷߋ৽ΛτϦΨʔʹ docker compose up --build͢ΔΑ͏ͳ8PSL fl PX ΛΜͰ͓͚αʔόଆϓϩάϥϜͷߋ৽ָ͕νϯ
52 (BUFXBZ%PDLFSԽ͓ͯ͘͠ $େ౷Ұͨ͠ࡍʹಘΒΕͨݟ
w4FMGIPTUFE3VOOFSৗறϓϩηεͱͯ͠ಈ͘/&5"QQMJDBUJPO wϙʔϦϯάରͷSFQPPSHͱࣗͷ-BCFM T Λઃఆ͢Δ wࢹରͷSFQPPSHʹ+PC͕&ORVFVF͞Εɺ 自身の全 Label ⊇ Job の
runs-on に列挙された全 Label ͱͳ͍ͬͯΔ߹ʹ+PCΛ%FRVFVFͯ͠:".-ʹॻ͔Ε͍ͯΔ 4UFQ T Λ࣮ߦ͢Δ w୯ҰͷδϣϒͷΈ࣮ߦՄೳ w-BCFMઃܭΛϛεΔͱौ͕ൃੜ͢Δ 53 4FMGIPTUFE3VOOFSͷ-BCFMେࣄ $େ౷Ұͨ͠ࡍʹಘΒΕͨݟ
w࣮ߦ͢Δ3VOOFSͷ-BCFMΛ8PSL fl PXͷύϥ ϝʔλͱͯ͠ड͚͚ΔΑ͏ʹ͢Δͱ։ൃ࣌ʹศར 54 4FMGIPTUFE3VOOFS։ൃ༻Λ༻ҙ $େ౷Ұͨ͠ࡍʹಘΒΕͨݟ name: Build Player
on: workflow_dispatch: inputs: runner-label: description: 'Runner のラベル' required: false type: string default: 'buildpipeline-runner' jobs: build_player: name: "Build Player" runs-on: - self-hosted - ${{ inputs.runner-label }}
wࣄલʹϏϧυͨ͠όΠφϦΛϦϙδτϦʹؚΊΔ͜ͱ Ͱ࣮ߦ࣌ؒઅ 55 $POTPMF"QQࣄલϏϧυ͓ͯ͘͠ $େ౷Ұͨ͠ࡍʹಘΒΕͨݟ <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <RootNamespace>BuildPipeline</RootNamespace> <!-- シェルからキックされるバイナリとして単一バイナリを Publish する --> <PublishSingleFile>false</PublishSingleFile> <!-- Self-hosted Runner 端末上に .NET がインストールされていることを期待する --> <SelfContained>false</SelfContained> <!-- ビルドする OS を指定する --> <RuntimeIdentifiers>osx-arm64;win-x64</RuntimeIdentifiers> <!-- Default Runtime は Apple Silicon な macOS とする --> <RuntimeIdentifier>osx-arm64</RuntimeIdentifier> <!-- pdb を埋め込む --> <DebugType>embedded</DebugType> <!-- 単一バイナリの出力先 --> <ArtifactsDir>.github/actions/bin/</ArtifactsDir> <!-- UserSecrets の ID --> <UserSecretsId>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</UserSecretsId> <!-- Root 名前空間 --> <RootNamespace>KidsStar.BuildPipeline.Console</RootNamespace> </PropertyGroup>
·ͱΊ 56
w$େ౷Ұཧ͍͍ͧʂʂʂ w։ൃମݧͱͯ͠3JEFSϑϧ׆༻Ͱ͖Δͷ͕σΧ͍ wଐਓੑΛԼ͛ΒΕ͔ͨͲ͏͔ະ 57 ·ͱΊ ·ͱΊ
w6OJUZΤσΟλʔͷίϚϯυϥΠϯҾ 6OJUZ%PDVNFOUBUJPO w6OJUZ5FTU'SBNFXPSL 6OJUZ1BDLBHF%PDVNFOUBUJPO w6OJUZ5FTU'SBNFXPSLશ߈ུΨΠυୈ൛ #005)͍͔খ wδϣϒʹϚτϦοΫεΛ༻͢Δ
(JU)VC"DUJPOT%PDT wDMPVEQPTTFHJUIVCBDUJPONBUSJYPVUQVUTXSJUF!W wDMPVEQPTTFHJUIVCBDUJPONBUSJYPVUQVUTSFBE!W w$MPVE.BOBHFE$FSUJ fi DBUFT "QQMF%FWFMPQFS)FMQ 58 "QQFOEJY ·ͱΊ
wHBNFD*VOJUZUFTUSVOOFS w&WFOUT"1**OUFSBDUJWJUZ4VSGBDFT 4MBDL"1* wOHSPL w$POTPMF"QQ'SBNFXPSL1-JTU/FU7:BNM 0DUPLJU"844%, /V(FU w
59 "QQFOEJY ·ͱΊ
5IBOLZPVGPSZPVSBUUFOUJPO 60