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
[CA.unity #2] 動かないコードを マージさせないための コンパイルエラー検知くんを...
Search
sada
July 09, 2021
Technology
1
1.7k
[CA.unity #2] 動かないコードを マージさせないための コンパイルエラー検知くんを GithubActionで作った話
sada
July 09, 2021
Tweet
Share
More Decks by sada
See All by sada
コンパイルエラー検知くんその2
sada913
0
670
Other Decks in Technology
See All in Technology
SREが向き合う大規模リアーキテクチャ 〜信頼性とアジリティの両立〜
zepprix
0
480
GitHub Issue Templates + Coding Agentで簡単みんなでIaC/Easy IaC for Everyone with GitHub Issue Templates + Coding Agent
aeonpeople
1
260
22nd ACRi Webinar - ChipTip Technology Eric-san's slide
nao_sumikawa
0
100
顧客の言葉を、そのまま信じない勇気
yamatai1212
1
370
ランサムウェア対策としてのpnpm導入のススメ
ishikawa_satoru
0
230
ClickHouseはどのように大規模データを活用したAIエージェントを全社展開しているのか
mikimatsumoto
0
270
配列に見る bash と zsh の違い
kazzpapa3
3
170
CDK対応したAWS DevOps Agentを試そう_20260201
masakiokuda
1
440
usermode linux without MMU - fosdem2026 kernel devroom
thehajime
0
240
SREチームをどう作り、どう育てるか ― Findy横断SREのマネジメント
rvirus0817
0
360
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
5
1.6k
M&A 後の統合をどう進めるか ─ ナレッジワーク × Poetics が実践した組織とシステムの融合
kworkdev
PRO
1
520
Featured
See All Featured
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
9.6k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.2k
Mind Mapping
helmedeiros
PRO
0
90
Prompt Engineering for Job Search
mfonobong
0
160
Producing Creativity
orderedlist
PRO
348
40k
Automating Front-end Workflow
addyosmani
1371
200k
The SEO identity crisis: Don't let AI make you average
varn
0
330
Test your architecture with Archunit
thirion
1
2.2k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.3k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.1k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
150
Transcript
動かないコードを マージさせないための コンパイルエラー検知くんを GithubActionで作った話 Graffity株式会社 sada 1
自己紹介 sada @SAyanada9 Graffity株式会社所属 新卒1年目のクライアントエンジニア兼ARエンジニア兼CI/CDエンジニア 2
自己紹介 実はGraffityにはインターンなどを含むと3年弱在籍 Graffityではスマホ向けARシューティングバトル 「Leap Trigger」を開発、運営中! 3 ©2021 Graffity Inc.
開発経緯 • 弊社ではSlackでJenkinsおじさんにビルドコマンドを投げるような仕組みを使って いる 4
開発経緯 • Slackビルドはエンジニア以外のメンバーも利用可能 • セキュリティの関係上Jenkinsに自由にログインできないようにしている • Slackにはビルドの成功可否のみ通知させる エンジニアがいない場合ビルドが失敗すると色々大変 5
開発経緯 そこでビルドが失敗する原因で一番多かった コンパイルエラーなコードを 本流のブランチにマージできないような仕組みを作成 6
仕組み GitHubのプルリクエストにコミットがPushされるたびに コンパイルエラーかどうかをチェックする 7
実装 使用したもの • Unity • GitHub Actions ◦ SelfHostRunner 8
実装 Unity編 • バッチモードでUnityプロジェクトを開くとコンパイルエラーなどを起こしていたらエ ラーを吐いて exit 1で終了するという仕様を使っている ◦ https://docs.unity3d.com/ja/2020.3/Manual/CommandLineArguments.html 参考
• UnityEditorで一応開いているのでついでに.csprojなどの依存性も解決してくれる 9
実装 GitHubActions編 GitHubActionsとは • 自動化ツール • GitHubのさまざまなActionをトリガーに処理を作成可能 ◦ Pushされたら ◦
Issueをたてられたら • (ほぼ)同様なツールにGitLab CIなど 10
実装 GithubActions編 SelfHostRunnerとは これはGithubActionsの実行される仮想マシンを 自前のPCで実行することができる公式ツール 11
実装 GithubActions編 なぜSelfHostRunnerを使っているのかというと • GithubActionsのDockerでもUnityが使えるが、ライセンス処理がめんどう • プロジェクトが重たいため毎回Importが走ると時間がかかる • なにより、Privateだと流石にお高い •
ちょうどJenkinsに使っているMacのPCがあった など 12
実装 GithubActions編 SelfHostRunnerの注意点 • 任意コードが実行できてしまう • 絶対にパブリックなリポジトリで実行可能にしない ◦ https://docs.github.com/ja/actions/hosting-your-own-runners/about-self-hosted-runners 参考
• 実行速度はホストPC依存(MacProとかだと早い) 13
実装 GithubActions編 全体像 14
実装 GithubActions編 この部分はほぼおまじない 15
実装 GithubActions編 Unityを開いているだけ $UNITY_PATH はUnityの.appのPATH 上の方で指定してもよし、そのまま直書きしてもよし $GITHUB_WORKSPACE はGitHubActionsで提供されている環境変数の一つ そのリポジトリの直下のPATHを示している 16
実装 GithubActions編 この項は結果をGitHubのPull request上にコメントしている 17
実装 GithubActions編 secrets.GITHUB_TOKEN 便利なトークン、Botが返してくれる github.event.pull_request.comments_url イベントが発火されたプルリク エストのコメントURL このURLを使ってコメントするAPIをPOSTで投げてる 18
実装 GithubActions編 github.actor イベントが開始されたコミットをした人 github.sha コミットのハッシュ コミットのURLを特定するために使用 19
実装 GithubActions編 全部を実装するとこれがプルリクエストのコメントに表示される あとは、お好みで追加でSlackにもなげるようにしたりとかをする ここに全体のymlファイルを上げているのでご参考に https://github.com/sada913/CompileErrorCheckKun 20
効果 • 去年の10月あたりに導入した • 1回だいたい1分前後(Unityのインポート時間に結構左右される) ◦ 何も設定していない場合 Standaloneで開くため圧縮しない場合比較的はやい 21
効果 • ビルドが失敗することが減った ◦ アセットバンドル関連や using Editorなどがまだ検知できない ◦ 新バージョン構想中 •
コンフリクトの解決後のコンパイルエラーなコミットを Pushしてしまったときすぐに気づけるように • コミット忘れのファイルがあったときに気づけるように 22
効果 ちなみに実際のコンパイルエラー原因は • コミット忘れ • コンフリクト解決失敗でコンパイルエラー • そもそもコンパイルエラーのコード の順に多かった 23
最後に 元気に動いている様子 上記の実装に加えてSlackにも投げるようにしたあと コンパイルエラー検知くんが稼働している様子 24