エクストリーム・プログラミングのプラクティスの一つに、継続的インテグレーション(CI)があります。iOSアプリ開発のフローにもCIを取り入れてみましょう。ここではJenkinsというツールを使って具体的にiOSアプリのビルド・テストの自動化を試みながら、iOSアプリ開発にCIを取り入れる上でのメリットや課題について見ていきます。
CI導入のメリット
バグの早期発見
実際にチームでプロジェクトを開発していると、バグは勿論、ビルドできないコードがコミットされてしまうことがあります。継続的にビルド・テストをしていると問題があるコードがコミットされた時にすぐに気がつきます。
ノンエンジニアへのビルドの共有
TestFlight等と組み合わせると、開発環境を持っていないノンエンジニアの人がいつでも開発中のアプリの最新版を自分の端末上にインストールできるようになります。これはエンジニア・ノンエンジニア両方にとってストレスと時間の削減になります。
ビルドの手間の削減(特にUnityを使う場合等)
Unityを使ったiOSゲーム開発で厄介な点はビルドで、特にNative Code Pluginの機構を使っているような場合は「UnityからXcodeプロジェクトを吐き出してXcodeでビルド用の設定をして、ビルドして転送」という一連の流れに数分かかってしまうことも珍しくありません。この作業は創造性が存在しないルーティンワークです。自動化できれば、エンジニアの集中力を節約できる上、ミスによるロスも削減できます。
CI導入の課題
OS Xマシンが必要
iOSアプリのビルドにはXcodeが必要なので、必然的にOS Xマシンが一台必要になります。Linuxサーバー上では動かすことができません。
Xcodeを使ったビルドの制約
自動ビルドではXcodeのUIの代わりにxcodebuildというコマンドラインツールを使います。xcodebuildコマンドで実行できる内容は限られているため、プロジェクトの内容/ビルド手順の内容によっては自動化できません。
テストできる内容の制約
テストの実行もxcodebuildコマンドかシェルから実行できるものに限定されます。実機を使うようなテストは現時点では基本的には自動化できません。
導入するべきか
実際のところ制約が多く、導入・導入後のメンテナンスは結構面倒で厄介です。(特にUnityを使ったプロジェクト)。テストできる内容が限られてしまうのがでかく、そこから得られる効果はまだ限定的ではあります。
一方で、iOSアプリ業界ではCIを導入するチームは確実に増えており、それに伴って補助ツール・プラグイン・情報も充実してきていて、導入のハードル/コストは日々下がっています。導入コストを導入メリットが上回るケースは今後確実に増えていくでしょうし、今はまさにクロスオーバーの時期でしょう。iOSアプリ開発チームの生産性をあげて、労働環境を改善していくにはチームの中で最低一人、自動化について意識を持っておくべきだと思います。
次のポスト以降で2012年5月現在僕が試した、実際の導入方法や問題点などを書いていきますので、参考にしていただければ幸いです。また、よい情報があればフィードバックをいただければありがたいです。
Jenkinsを使ったiOSアプリビルド自動化1 CI導入のメリットと課題 | なんてこったいブログ http://t.co/uCqJBpEn | この辺から見ていこうか。
これは面白そうなのであとでじっくり読ませてもらおう。 / “Jenkinsを使ったiOSアプリビルド自動化1 | なんてこったいブログ” http://t.co/28zNBTRY
Jenkinsを使ったiOSアプリビルド自動化のメリットと課題
http://t.co/Y1CLt2Qi んー現時点ではあんまりメリットないね。iOS開発でCIに入れ子みたい作業ってなんだろなぁ #jenkins