mixiエンジニアがおくるソーシャルアプリ開発実践講座

第5回 ゼロから始める継続的なAndroidアプリケーション開発のしくみ

この記事を読むのに必要な時間:およそ 3 分

コードレビューの効率化

開発者が1人増えた時点で,新しく学んだ知識や気づいたことを社内Wikiにまとめてもらったので,以降の環境構築やコーディングルール作成などはそれをベースとして進めましたが,既存コードを全部把握するには相当な時間がかかるため,コードレビューでそれを補いつつ細かいポリシーを適宜作り上げていくことにしました。しかし,レビューという仕事は開発後期にはボトルネックとなりがちです。本当は全員でペアプログラミングが実施できるとよかったのですが,なかなか踏み出せないまま,結局すぐに2人目のレビュアが誕生してマンパワーで解決する形となりました。それでも,自分で書いた場所以外のレビューにはやはり時間がかかることが多く,不安になります。良い手段はないだろうか,と考えていたころ,別の方面から「ソース管理のリポジトリをGitにしよう」という話が転がり込んできました。

そこで筆者たちは,Gitを導入するならばと,ツールも一新して,複数人でレビューできるしくみを考えることにしました。そのために目を付けたのがAndroidオープンソースプロジェクト(AOSP)で使われているGerritですEclipseのGit設定にもGerritサポートが含まれているなど,すでに使用しているツールとの全体的な統合が望めそうなのも決め手となりました。

Gerritの導入とJenkinsとの連携

Gerritは,オープンソースのGit向けレビューシステムで,AOSPのコードレビューのために作られました。デフォルトでログインユーザ全員がレビューを行えるようになっており,コードに行単位でコメントを書くこともできるため,細かい指摘も手軽にできます。また,レビューからリポジトリへのマージまでをWeb上で実行できます図4)⁠

図4 Gerritによるレビュー管理

図4 Gerritによるレビュー管理

Gerritにおいて特徴的なのは,ReviewとVerifyという2つの概念が存在することです。Reviewはその名のとおりコードレビューを,Verifyは「コードのマージが正しく実行され,動作するかどうか」を指しており,デフォルトではこの2つに付けられたスコアがそれぞれ一定以上にならないとコードがマージできないようになっています。さらに,この2つのほかに独自のフラグを設定することもでき,たとえばEclipseのGerritでは,IP-Cleanという「知的財産権を侵害していないかどうか確認済み」フラグを持ったもののみがマージ可能,という設定がなされています。Review,Verify,その他のスコア付けの権限は,ユーザやグループ単位で管理することができ,たとえばReviewedフラグを立てられるのはReviewerグループに所属するメンバーだけ,といった設定を行うことができます。

小規模な開発チームとしては,Verifyは機械に任せてしまいたいところです。そこでJenkinsとの連携を考えます。Jenkinsには,Gerritのストリームを監視して,pushされたコードのビルドを自動的に行い,結果を報告するGerrit Trigger Pluginというプラグインがあります。この結果をVerifyに反映するよう設定すれば,Verifyの自動化が実現できます図5)⁠

図5 JenkinsによるVerify

図5 JenkinsによるVerify

これによって,作業の終わったコードをGerritへpushするだけで,レビュー用のチケットが作成され,Jenkinsによってビルドされ,テストが通ることを確認できるので,それをレビュアがレビューするというフローができあがりました図6)⁠さらに,これらの状況はGerritbotを利用して,すべてIRCに流すようにしました。⁠レビューしてよ」「レビュー終わってマージしたよ」という情報がすべて自動で送られるため,チケットが来たのに気づかずスルーしてしまうことがなくなりました。

図6 GerritとJenkinsを利用したコードレビューの手順

図6 GerritとJenkinsを利用したコードレビューの手順

Gerritによって,複数人でのレビューや突っ込みがしやすくなったほか,マスターのリポジトリに対する変更手続きが1ヵ所に集約されたことで,マージそのものがレビューされないという問題もなくなりました。結果的にほとんどAOSPと同様のしくみになりつつあるため,Android本体の開発者にとっては,すぐに馴染める環境となっています。

開発プロセスもリファクタしよう

本稿では,ミクシィでのAndroidプロジェクトの開発プロセスとそこで使っているツールについてご紹介しました。最近では,弊社iOSプロジェクトでもJenkinsやGerritが試用されています。2012年の今日,スマートフォンアプリ開発は珍しいことではなくなりましたが,その開発プロセスにおけるデファクトスタンダードはまだ確立されていないように思います。プラットフォームそのものがまだ枯れ切ってない状況なので,その上で展開される開発プロセスもまだまだこれから成熟していく過程にあると考えています。

しかし,繰り返し作業を積極的に機械化していくことは,どんな場合でも有益です。⁠コードをコミットしたあとでテストする」という作業は,手動で行っていると絶対に忘れることがあります。⁠レビューのためにチケットを書く」という細かい作業も,見えづらいものですが確実に時間を消費しています。1人では小さく見積りがちな雑務も,100人規模のプロジェクトであれば100倍の時間を無駄にしていることになるのです。

筆者たちは,コードと同様プロジェクトそのものも,ツールを積極的に活用しながらボトルネックを見つけてはつぶすことで,常にリファクタリングできると考えています。本稿がみなさんの参考になれば幸いです。

mixiでは開発エンジニアを募集しています。

詳細はこちら
http://career.mixi.co.jp/

著者プロフィール

藤崎友樹(ふじさきゆうき)

(株)ミクシィ 技術部 たんぽぽグループ