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
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.3k
はじめての C# 大統一理論
monry
PRO
0
650
unity1week でチーム開発を成功させる秘訣
monry
PRO
0
180
Unity で ARゲームを作った話
monry
PRO
1
670
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.6k
使ってみよう! Unity RemoteSettings/Let's use Unity RemoteSettings
monry
PRO
1
1k
ごっこランドをささえる技術 〜AssetBundle 編〜/AssetBundle Fully Understood
monry
PRO
3
6.7k
Other Decks in Programming
See All in Programming
Laravel や Symfony で手っ取り早く OpenAPI のドキュメントを作成する
azuki
1
110
ピラミッド、アイスクリームコーン、SMURF: 自動テストの最適バランスを求めて / Pyramid Ice-Cream-Cone and SMURF
twada
PRO
10
1.3k
受け取る人から提供する人になるということ
little_rubyist
0
230
シールドクラスをはじめよう / Getting Started with Sealed Classes
mackey0225
4
640
Ethereum_.pdf
nekomatu
0
460
Streams APIとTCPフロー制御 / Web Streams API and TCP flow control
tasshi
2
350
型付き API リクエストを実現するいくつかの手法とその選択 / Typed API Request
euxn23
8
2.2k
レガシーシステムにどう立ち向かうか 複雑さと理想と現実/vs-legacy
suzukihoge
14
2.2k
詳細解説! ArrayListの仕組みと実装
yujisoftware
0
580
Enabling DevOps and Team Topologies Through Architecture: Architecting for Fast Flow
cer
PRO
0
310
ローコードSaaSのUXを向上させるためのTypeScript
taro28
1
610
Hotwire or React? ~アフタートーク・本編に含めなかった話~ / Hotwire or React? after talk
harunatsujita
1
120
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.8k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
33k
Product Roadmaps are Hard
iamctodd
PRO
49
11k
Building Applications with DynamoDB
mza
90
6.1k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
840
KATA
mclloyd
29
14k
GraphQLとの向き合い方2022年版
quramy
43
13k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
720
Practical Orchestrator
shlominoach
186
10k
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