連載
» 2013年05月27日 18時00分 公開

Androidアプリのビルド/テストはCIでここまで変わるグリーはいかにしてJenkinsを導入したのか(3)(2/2 ページ)

[岡崎隆之,グリー]
前のページへ 1|2       

スマホ向けアプリ開発/テストと継続的インテグレーション

 スマホ向けのアプリ開発では、どのテストソリューションを使うかによりますが、iOSやAndroidアプリのようなデバイス向けのテストを継続的インテグレーションするには、PC向けのWebアプリなどと比べれば一気に難易度が上がります。

 例えば、ある時期からエミュレータが頻繁にクラッシュするようになったり、実機でのテストを行う場合も不意に実機がリブートしてしまうなど多くの問題に直面することになります。

 これらの問題に対して、それぞれJenkinsから問題なく制御できるようになるまでには、かなりの努力が必要ですし、iOSやAndroid SDKのバージョンや機種が変われば、また新しくノウハウを積み重ねなければならないなど自動テストを資産として活用するまでの道のりは平坦ではありません。

 最近は、そういった苦労を吸収するような商用のテストソリューションも選択肢が増えてきました。開発プロジェクトとして、自動テスト資産をどのように運用するか評価しておくと良いでしょう。

組み合わせの選択

 開発しているアプリの性質を考慮したうえで継続的インテグレーション適用の範囲を決めていきます。UIに変更が入りやすい場合には、あえて自動化を試みずに、人力でテストをするという選択もあるでしょう。

 ツールやフレームワークの個別の評価は日本Androidの会テスト部が一覧を作成しており、参考になります。

 いずれにせよ、なるべく手軽に始められる部分から自動化していくことをお勧めします。テストまで実施するのが難しいようであれば、「Checkstyle」「FindBugs」などを使った静的品質検査などを継続的に行うところから始めるのが良いでしょう。

グリーでの継続的インテグレーション

 最後に、グリーでのスマホアプリ開発と継続的インテグレーションの取り組みについて紹介します。グリーで提供しているようなソーシャルゲームの場合、UI部分は変更頻度が比較的高いため、テスト自動化のためのコストが高くなりがちです。このため自動化する対象は、なるべく多くのアプリに共通して効果が高い部分を探していくことになります。

 今回は1つの事例としてGREE Platformについて紹介しておきます。GREE Platformは現在日本語、英語を含めて14の言語に対応しています。そうすると、1つのテストを行う場合でも、ほぼ同じテストシナリオを言語ごと、中国語は繁体/簡体の両方に対応しているので、合わせて15回繰り返し実行する必要があります。翻訳の修正があるたびに、このテストを繰り返すのは非常に大きなコストとなるため、言語ごとのテストについては自動テストを作成し、各言語設定でのスクリーンショットが撮れるようにしました。

国際化と継続的インテグレーション

 GREE Platformの画面はグリーのソーシャルアプリをはじめとしてゲームアプリ、スマホ版のSNSやゲームでも共通的に利用する部分で、基本的にはWebアプリケーションです。

 最初の段階では、なるべくユーザー環境に近い環境でテストするためにAndroid端末実機とmonkeyrunnerを使ったテストを実装しました。テスト自体はうまく動作したのですが、問題はテストに時間がかかることでした。この種の問題は、「スローテスト問題」といわれ、継続的インテグレーションに取り組むうえでは避けて通れない問題として知られています。

 このような場合には、テストを分割して並列実行したり、テスト内容を見直して毎回テストを実施するものとリリース前の検査として時間をかけて実行するテストとして分割する方法、またはより軽量な方法でテストを実装し直すといった解決法が代表的です。

 ある程度テスト端末を増やして対応していたのですが、そもそも1テスト当たりの実行時間が長く1テストシナリオ当たり数分〜数十分かかり、またそれを15言語分実行するとなるとリリーススケジュールへの影響が考えられました。

 このため、GREE Platformの国際化を行った際には「Capybara-Webkit」を利用した通常のWebアプリケーションテストに近い方法でテストを実装し直し、より軽量で素早いテストを実行するようにし、実機での動作差分は人力でのテストを組み合わせて問題解決を行いました。

自動化資産の戦略

 最初は、すべてのテストを実機で行い、受け入れテストまでを自動化しようとしていましたが、前述の通りテスト時間などの問題があったため自動化して高頻度にテストをする部分を分割しました。高頻度で実行できるようになったことにより、テストシナリオのカバレッジを結果的に広くすることができました。

次回は、PHPなどサーバサイドの継続的インテグレーション

 今回紹介したように、まずAndroidアプリ開発の際には、apkの作成までの自動化を手始めに徐々に自動化の資産を積み上げていくことで開発ワークフローを改善していくことになります。

 テスト自動化までの難易度とコストは一般的なWebアプリ開発とは大きく差が開く部分もあるため、よく検証をして戦略を立てて開発ワークフローを組み立てていく必要があります。

 iOS、AndroidでのJenkins活用はここで一段落して、次回はPHPなどサーバサイドの継続的インテグレーションを取り上げます。

著者プロフィール

岡崎隆之


グリー株式会社にて、iOSアプリ開発、SNSバックエンドエンジニアを経て、現在は国際化の技術リード。


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。