Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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
660
Other Decks in Technology
See All in Technology
法人支出管理領域におけるソフトウェアアーキテクチャに基づいたテスト戦略の実践
ogugu9
1
220
eBPFとwaruiBPF
sat
PRO
4
2.6k
AWSを使う上で最低限知っておきたいセキュリティ研修を社内で実施した話 ~みんなでやるセキュリティ~
maimyyym
2
310
大企業でもできる!ボトムアップで拡大させるプラットフォームの作り方
findy_eventslides
1
710
評価駆動開発で不確実性を制御する - MLflow 3が支えるエージェント開発
databricksjapan
1
120
Gemini でコードレビュー知見を見える化
zozotech
PRO
1
250
ガイドラインを軸にしたウェブアクセシビリティ改善
lycorptech_jp
PRO
1
100
今年のデータ・ML系アップデートと気になるアプデのご紹介
nayuts
1
280
生成AI時代におけるグローバル戦略思考
taka_aki
0
130
新 Security HubがついにGA!仕組みや料金を深堀り #AWSreInvent #regrowth / AWS Security Hub Advanced GA
masahirokawahara
1
1.8k
AIと二人三脚で育てた、個人開発アプリグロース術
zozotech
PRO
1
710
Reinforcement Fine-tuning 基礎〜実践まで
ch6noota
0
170
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
970
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.3k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.7k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.1k
RailsConf 2023
tenderlove
30
1.3k
Mobile First: as difficult as doing things right
swwweet
225
10k
The Pragmatic Product Professional
lauravandoore
37
7.1k
GraphQLとの向き合い方2022年版
quramy
50
14k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
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