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.1k
ビルドシステムを 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
690
unity1week でチーム開発を成功させる秘訣
monry
PRO
0
210
Unity で ARゲームを作った話
monry
PRO
1
730
Visual Programming Framework UniFlow のご紹介/Introducing UniFlow
monry
PRO
2
2.8k
UniFlow 完全に理解した / I can develop UniFlow a little.
monry
PRO
0
490
Democratized Unity Package Manager
monry
PRO
1
2.7k
使ってみよう! Unity RemoteSettings/Let's use Unity RemoteSettings
monry
PRO
1
1k
ごっこランドをささえる技術 〜AssetBundle 編〜/AssetBundle Fully Understood
monry
PRO
3
6.8k
Other Decks in Programming
See All in Programming
ISUCON14公式反省会LT: 社内ISUCONの話
astj
PRO
0
190
Kubernetes History Inspector(KHI)を触ってみた
bells17
0
220
Multi Step Form, Decentralized Autonomous Organization
pumpkiinbell
1
720
2,500万ユーザーを支えるSREチームの6年間のスクラムのカイゼン
honmarkhunt
6
5.2k
CloudNativePGがCNCF Sandboxプロジェクトになったぞ! 〜CloudNativePGの仕組みの紹介〜
nnaka2992
0
220
Honoをフロントエンドで使う 3つのやり方
yusukebe
7
3.1k
2024年のkintone API振り返りと2025年 / kintone API look back in 2024
tasshi
0
220
密集、ドキュメントのコロケーション with AWS Lambda
satoshi256kbyte
0
190
Domain-Driven Transformation
hschwentner
2
1.9k
時計仕掛けのCompose
mkeeda
1
290
Honoのおもしろいミドルウェアをみてみよう
yusukebe
1
200
XStateを用いた堅牢なReact Components設計~複雑なClient Stateをシンプルに~ @React Tokyo ミートアップ #2
kfurusho
1
870
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
22
1.3k
How to Ace a Technical Interview
jacobian
276
23k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Building Applications with DynamoDB
mza
93
6.2k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Testing 201, or: Great Expectations
jmmastey
42
7.2k
Docker and Python
trallard
44
3.3k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
A Philosophy of Restraint
colly
203
16k
Gamification - CAS2011
davidbonilla
80
5.1k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
12
960
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