リクルートテクノロジーズのAndroid開発
スマートデバイスグループの片渕(@hotchemi)
スマートデバイスグループの片渕です。
この記事はリクルートテクノロジーズAdvent Calender 2014の19日目の記事です。
前日は,@ainoyaさんのモバイルアプリ開発で面倒なサーバAPIバックエンドの切り替えを動的に行うについてでした。
今回は,私が所属しているスマートデバイスグループでAndroidエンジニアがどんな技術を利用して開発を進めているかに関してご説明します。
組織
リクルートテクノロジーズのスマートデバイスグループはゼクシィやSUUMOなどリクルートの中でも比較的規模の大きいアプリ開発をミッションとしている組織です。
100人を超える大所帯ですが,その内Androidエンジニアは約30名程となっています。同様にiOSエンジニア,QAメンバーが30人程在籍しています。
技術
IDE
Androidといえば気になるのが開発環境だと思いますが,原則としてAndroid Studioの利用を推奨しています。
Android Studioは既に1.0がリリースされており,ADT Pluginの開発は実質凍結するのが確定している為,NDKを多用しているアプリでもない限り今後Eclipseを使うメリットはありません。
とはいえupdatesのchannelはさすがに怖いのでdev channelにする様にしています。
プラグインの導入も特に決まりはありませんが,この辺を使っています。特にEclipse Code FormatterはEclipseからのマイグレーション時に重宝します。
Build System
Gradle一択…と言いたい所なのですが,社内ではMavenを利用しているプロジェクトが多いです。
その理由は,弊社ではAndroid Gradle Pluginが登場する遥か前よりビルドの自動化を実施しており,既に100を超えるアプリにMavenが装着されてしまっていた為,マイグレーションのコストを一気には払えないという事があります。
が,将来的にGradleへ移行した方が管理コストが低くなるのは自明の事なので現在絶賛マイグレーションを推進している最中です。
Mavenでもprofileやmaven-android-pluginをフル活用する事でBuild variantsの様な事を実現できたりaarを利用した開発ができるのですが,その辺のノウハウは以前に勉強会で発表させて頂きました。
個人的にはライブラリを開発する際はdependencyのoptional依存を利用できたりmaven-release-pluginを使ったリリース作業自動化ができる為,便利な面も多いと感じています。
が,Android StudioではひっそりとMavenサポートが打ち切られていた事を最近知り非常にショックを受けています。
Jenkins
アプリ・ライブラリのビルドはJenkinsで自動化しており,ビルドボタンを押すだけでapkが開発者やQAに配布される仕組みになっています。
この辺は当たり前ですね。
Library
少し前までは社内で開発したライブラリを使用していましたが,最近はオープンソースへの切り替えを薦めています。以下の様なライブラリを利用する事が多いですが, 原則としてAndorid SDKやSupport Libraryに同等の機能が存在する場合はそちらを使う様にしています。
また,クラッシュ検知やPush通知配信基盤のシステムに関しては内製しており,専用のAndroid SDKを用意して各アプリへ装着しています。
Push通知配信基盤に関しては@ITの連載で詳しく語っておりますのでご参照下さい。
Challenge
R&Dという程ではないですが,Androidの新機能に関しても可能な限りキャッチアップする様にしており,例えばApp Indexingに関してはGoogle IO 2014に間に合わせる形で急ピッチで実装を進めました。現在では以下のアプリがApp Indexingに対応しています。
また,現在はAndroid TVに関しても検証を開始し,リクルートとして面白い試みができないか考えています。
Other
その他のツールに関しては以下の様なものを利用しています。
- タスク管理: Redmine
- ソースコード管理: GitLab
- ナレッジ共有: Qiita:Team
- チャット: Hipchat
大事にしている事
長々と書きましたが,我々が一番大事にしている事は, Pure Androidの思想に準じたAndroidらしいアプリを作る事です。
勿論ビジネス上の制約などがあり厳しい場合もありますが,可能な限りAndroidの思想に準じた実装をする事を心がけています。
AndroidのUIアンチパターンに関しては以下の動画が非常に参考になります。
最後に
ここまで弊社で実施しているAndroidの取り組みに関して書きましたが,勿論良い事ばかりではなく以下の様な課題も抱えています。
- Gradleへの移行をスムーズに進められていない
- Androidのベストプラクティスに関して社内で理解している人間が少なく,どうしてもiOSに押されてしまう
- そもそもAndroidエンジニアが圧倒的に足りていない
我こそはリクルートのAndroidアプリを良いものにしたい!という志持っておられる方がおりましたら,是非一緒に働きましょう!