Cygames Tech Fes フォローアップ: Unity開発現場を支えるJenkins


みなさん、初めまして!
Cygamesエンジニアの古閑です。

本記事は先月に開催された”Cygames Tech Fes”で発表させていただいた、
「Unity開発現場を支えるJenkins」のフォローアップ記事となります。

発表の際の資料はこちら

当日はアンケートにご協力頂きまして、貴重なご意見ありがとうございました!
その中のいくつかのご質問を元にし、本記事でフォローさせていただければと思います。

いつ静的解析をかけるのか

現在の主なフックポイントは2点です。

I. ビルド時

意図は「全体的な品質の指標の確認」です。
ビルド時というスナップショットに解析をかける事で、
プロジェクト全体の品質を知ることができます。

II. Pull-request時

意図は「自分の書いたコードの品質の確認」です。
仮にビルド時まで静的解析の結果が確認できないと、

  • 警告を修正したつもりが直っていない
  • 新規で警告を増やす書き方をしている

などが、マージをしてビルドをし、静的解析をかけるまでわからない事になります。

これにはJenkinsのpluginである、”GitHub Pull Request Builder Plugin”を使用し、設定しています。( https://wiki.jenkins-ci.org/display/JENKINS/GitHub+pull+request+builder+plugin )

Pluginの詳細な使用方法は省略させて頂くとして、主な流れは

  1. GitHub Pull Request Builder PluginでPull-requestを検知する
  2. 検知したらバッチモードでUnityを立ち上げ、Assembly-CSharp.dllを確定させる
  3. Assembly-CSharp.dllを解析にかける

となります。

導入するまでは、Pull-request時に毎回Unityを立ち上げて解析することは重いのでは?
と思っていたのですが、実際のところ気になる速度ではありませんでした。

画像のような「All checks have passed」が出れば成功です。

git commit/add時のチェックは?

git-hookをかけるなりの、Pull-requestを投げる前のチェックは理想的な形だと思います。

現在ではgendarmeの結果は指標としか扱っていない為、必ず直さなければいけないという方針ではないので、後々の検討事項です。

 また、アンケートの中に「ReSharperが使える」というアドバイスも頂きました。ありがとうございます!
一時期PythonではPyCharmを使用していたこともあるのですが、Jetbrains製のものは総じてよいですね!

その後、成果は出たのか?

発表時から現在までに数プロジェクトに同様の仕組みを展開しました。
エラーが減ったか?という点においてはまだまだ大きな変化は無しかなと思います。
これはgendarmeが構文的なバグを見つけることには弱い(元々そういう目的でも無い?)と捉えている為、あまりエラーが減る点に関しては期待をしていない所があります。

では使えないのかというと、静的解析の結果を見た所ではMono/.Net Frameworkを知る上で必要な情報がいくつかあります。
結果を通して知見を深めるという点においては今後効果が出てくるかと思い、
「静的解析から学ぶ.Net Framework」という題の話も社内勉強会に向け企画中です。

他の解析ツールは使わない?

C#の解析ツールとして使用できるものは多数ある為、現在検討中です。
前述の通り、gendarmeは構文的バグの検知には弱いと感じている所はありますが、.Net Frameworkを知る上では良きツールとも思いますので、特にコンパイラに依存をしないC#の構文バグを検知できる良いものが見つかれば、おそらく併用して使うことになるでしょう。

最後に

懇親会時には「Jenkinsで話してた人ですよね」というより「ピタゴラスイッチの人ですよね」と話しかけられるくらいに、印象に残ってくれた方が多かったようです!
当日の内容を補足すると、Jenkinsのビルドエラーにピタゴラスイッチを使えば面白いのではというお話をさせていただきました。
ビルドエラー出した人に旗が立ったり、某麻雀プロジェクトでは役満を振り込むギミックを仕込むとかどうだろうとか話しもあったり…
頂いたアンケートの中には「楽しそうに開発をしているのが伝わった」というお言葉もあり、そこが伝わった事がすごく嬉しく思いました!

afplayで音を鳴らすことも同様ですが、そのプロジェクト固有の効果音、テーマ曲などがあれば曲を鳴らすなどをして、プロジェクトごとの色を出してみるというのも面白いのかなーと思います。

開発も楽しくやりたいですね!

おまけ

Jenkinsでビルドエラーを検知し、シリアル通信でArduinoからUSB扇風機を回し、風力歩行器を歩かせ、ピタゴラスイッチを押すという想定の画像です。

結果:風が弱くて足が上がりませんでした。

ピタゴラの道は険しい

それではまた!