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
910
ビルドシステムを 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.2k
はじめての C# 大統一理論
monry
PRO
0
620
unity1week でチーム開発を成功させる秘訣
monry
PRO
0
170
Unity で ARゲームを作った話
monry
PRO
1
650
Visual Programming Framework UniFlow のご紹介/Introducing UniFlow
monry
PRO
2
2.7k
UniFlow 完全に理解した / I can develop UniFlow a little.
monry
PRO
0
470
Democratized Unity Package Manager
monry
PRO
1
2.5k
使ってみよう! Unity RemoteSettings/Let's use Unity RemoteSettings
monry
PRO
1
980
ごっこランドをささえる技術 〜AssetBundle 編〜/AssetBundle Fully Understood
monry
PRO
3
6.5k
Other Decks in Programming
See All in Programming
労務ドメインを快適に開発する方法 / How to Comfortably Develop in the Labor Domain
yuki21
1
250
Jakarta EE meets AI
ivargrimstad
0
160
複雑さに立ち向かうための ソフトウェア開発入門
shiz
3
670
The Future of Frontend i18n : Intl.MessageFormat
sajikix
1
2.5k
いつか使える ObjectSpace / Maybe useful ObjectSpace
euglena1215
2
130
dRuby 入門者によるあなたの身近にあるdRuby 入門
makicamel
4
350
令和トラベルにおけるLLM活用事例:社内ツール開発から得た学びと実践
ippo012
0
120
ECMAScript、Web標準の型はどう管理されているか / How ECMAScript and Web standards types are maintained
petamoriken
3
380
rails_girls_is_my_gate_to_join_the_ruby_commuinty
maimux2x
0
170
私のEbitengineの第一歩
qt_luigi
0
430
LangGraphでのHuman-in-the-Loopの実装
os1ma
3
920
Using Livebook to build and deploy internal tools @ ElixirConf 2024
hugobarauna
0
230
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
36
7k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
502
140k
A Philosophy of Restraint
colly
202
16k
Clear Off the Table
cherdarchuk
90
320k
The Pragmatic Product Professional
lauravandoore
31
6.2k
Building Your Own Lightsaber
phodgson
101
6k
How to Think Like a Performance Engineer
csswizardry
16
930
Robots, Beer and Maslow
schacon
PRO
157
8.1k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
34
1.9k
Happy Clients
brianwarren
96
6.6k
How to Ace a Technical Interview
jacobian
275
23k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
27
7.4k
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