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] 動かないコードを マージさせないための コンパイルエラー検知くんを GithubActionで作った話
Search
sada
July 09, 2021
Technology
1
1.1k
[CA.unity #2] 動かないコードを マージさせないための コンパイルエラー検知くんを GithubActionで作った話
sada
July 09, 2021
Tweet
Share
More Decks by sada
See All by sada
コンパイルエラー検知くんその2
sada913
0
490
Other Decks in Technology
See All in Technology
「スニダン」開発組織の構造に込めた意図 ~組織作りはパッションや政治ではない!~
rinchsan
4
610
GrafanaMeetup_AmazonManagedGrafanaのアクセス制御機能とマルチテナント環境下でのアクセス制御について
daitak
0
380
コードファーストの考え方。 Amplify Gen2から学ぶAWS次世代のWeb開発体験
yoshiitaka
1
270
AOAI をきっかけに 社内の Azure 管理を見直した話
recruitengineers
PRO
1
430
Cypress or Playwright?
rainerhahnekamp
0
160
地理空間データ可視化・解析・活用ソリューション Pacific Spatial Solutions (PSS)
pacificspatialsolutions
0
330
Microsoft for Startups Founders Hub_20240429 update
daikikanemitsu
1
2.4k
アクセス制御にまつわる改善 / Improving access control
itkq
0
590
今日からできる!簡単 .NET 高速化 Tips -2024 edition-
xin9le
7
3.5k
チームでロジカルシンキングに改めて向き合っている話 〜学習環境と実践⽅法〜
sansantech
PRO
3
3.2k
データベース02: データベースの概念
trycycle
0
180
Python と Snowflake はズッ友だょ!~ Snowflake の Python 関連機能をふりかえる ~
__allllllllez__
2
140
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
34
8.9k
Being A Developer After 40
akosma
66
580k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
26
2.3k
The Illustrated Children's Guide to Kubernetes
chrisshort
32
46k
Building Your Own Lightsaber
phodgson
100
5.7k
Build your cross-platform service in a week with App Engine
jlugia
226
17k
Robots, Beer and Maslow
schacon
PRO
155
7.9k
For a Future-Friendly Web
brad_frost
172
9k
Building Applications with DynamoDB
mza
88
5.6k
The Invisible Customer
myddelton
114
12k
Product Roadmaps are Hard
iamctodd
45
9.7k
How GitHub (no longer) Works
holman
305
140k
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