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
700
unity1week でチーム開発を成功させる秘訣
monry
PRO
0
210
Unity で ARゲームを作った話
monry
PRO
1
750
Visual Programming Framework UniFlow のご紹介/Introducing UniFlow
monry
PRO
2
2.8k
UniFlow 完全に理解した / I can develop UniFlow a little.
monry
PRO
0
500
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.8k
Other Decks in Programming
See All in Programming
お前もAI鬼にならないか?👹Bolt & Cursor & Supabase & Vercelで人間をやめるぞ、ジョジョー!👺
taishiyade
7
4.2k
Introduction to kotlinx.rpc
arawn
0
770
Jakarta EE meets AI
ivargrimstad
0
540
ML.NETで始める機械学習
ymd65536
0
240
仕様変更に耐えるための"今の"DRY原則を考える
mkmk884
9
3.2k
LINE messaging APIを使ってGoogleカレンダーと連携した予約ツールを作ってみた
takumakoike
0
120
dbt Pythonモデルで実現するSnowflake活用術
trsnium
0
270
ソフトウェアエンジニアの成長
masuda220
PRO
12
2.1k
読まないコードリーディング術
hisaju
0
110
DRFを少しずつ オニオンアーキテクチャに寄せていく DjangoCongress JP 2025
nealle
2
280
Lambdaの監視、できてますか?Datadogを用いてLambdaを見守ろう
nealle
0
100
Kotlinの開発でも AIをいい感じに使いたい / Making the Most of AI in Kotlin Development
kohii00
5
1.4k
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
40
2k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
175
52k
Speed Design
sergeychernyshev
27
810
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.2k
Music & Morning Musume
bryan
46
6.4k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
193
16k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
Testing 201, or: Great Expectations
jmmastey
42
7.2k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
114
51k
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