UnityプロジェクトにおけるGitHub Actions活用

はじめに
株式会社QualiArtsの田村です。 Unityエンジニアとしていくつかのゲーム開発に携わったのち、現在は開発推進室という主にゲーム開発のための基盤を開発する組織に所属しています。
さて、QualiArtsのUnityプロジェクトでは、CIツールとして長らくJenkinsを活用しています。 Jenkinsでどのようなことをしているかについては、本ブログの以前の記事「Unity開発の現場でJenkinsがしていることの紹介」で書かれていますのでぜひ参照してみてください。 その記事の中で、別のCIツールとしてGitHub Actionsについても検証しているということが書かれていますが、実際に現段階でいくつかの処理についてはGitHub Actionsでの運用が行われています。 そこで本記事では、実際のUnityプロジェクトにおいてGitHub Actionsをどのように活用しているかを紹介します。
GitHub Actionsとは
GitHub Actionsとは、GitHub上でのワークフローの自動化を行うためのGitHub公式のサービスです。 ワークフローとは、開発プロジェクトにおける何らかの一連のタスクのことで、例えばコードの自動テスト、デプロイ、リリースなどが含まれます。
GitHub Actionsの特徴として以下のような点が挙げられます。
- ワークフローの処理内容はYAMLで記述され、GitHubのリポジトリ内で管理される
- プッシュやプルリクエストなど、GitHub上のイベントをトリガーとしたワークフローの実行が可能
- 公式・非公式含め、GitHub上で提供されている多数のアクションを自分のワークフローから利用可能
- ワークフローの実行環境として、GitHubが提供するクラウド環境の他に、自分で用意したビルド環境を選択可能
GitHub ActionsはGitHub公式のサービスなので、GitHubとの親和性が特に高いと感じます。 またGitHub Actionsは比較的新しいサービスで、開発も活発に行われているため、今後もより便利になっていくだろうという期待もしています。
Jenkinsの問題点とGitHub Actionsの選択
JenkinsはCIツールとして広く利用され、実際QualiArts内でも長く利用されていますが、社内ではいくつか問題が上げられてきました。
大きな問題の1つは、ジョブ(GitHub Actionsでいうワークフロー)の設定が大変という点です。 Jenkinsの設定はGUIで行われるため、気軽に設定可能という利点があるものの、コードで管理するのが難しく、履歴を追うのが難しかったり再利用性に乏しかったりします。 また、設定の変更をレビューするようなフローも作りづらいため、その設定について作った人しか知らないという属人化が発生しがちです。
もう1つ大きな問題は、管理が大変という点です。 Jenkinsはセキュリティの観点から継続的にアップデートが必要ですが、多数のプラグインがインストールされたJenkins環境では、プラグインの依存バージョンの問題などからアップデートは簡単ではありません。
このような問題を解消できるかもしれない策として、GitHub Actionsの利用を進めています。 特にワークフローの設定に関しては、YAML形式でGitHub上で管理されるのに加えて、再利用も可能なため、Jenkinsにおける問題を解消できそうだと手応えを感じています。