mixi engineer blog

*** 引っ越しました。最新の情報はこちら → https://medium.com/mixi-developers *** ミクシィ・グループで、実際に開発に携わっているエンジニア達が執筆している公式ブログです。様々なサービスの開発や運用を行っていく際に得た技術情報から採用情報まで、有益な情報を幅広く取り扱っています。

Android開発の効率を今日から確実に5%改善する方法

暖かくなったり寒くなったり視界が真っ黄色になったり忙しい今日この頃ですが、皆様お元気でお過ごしでしょうか。動かないことで定評のある「右の方」raiです。mixiのAndroidクライアントアプリ初回リリース以来の登場です。部署もたんぽぽグループからイノベーションセンターという謎の組織へ移りました。大変ご無沙汰しております。

今回は、ミクシィにおけるAndroidアプリ開発現場で得られた経験から、意外と見えづらい開発プロセス上のボトルネックと、それを「いますぐ」「簡単に」改善できる、素敵なサービスについて簡単にご紹介したいと思います。

はじめに

さて、ミクシィもAndroidアプリ開発を始めてから2年半ほどが経ちました。

2年も経つと、結構いろんな課題が見えてきて、それらに対する解決策もいくつか生まれます。 Androidプラットフォーム上での開発そのものに関して言えば、以前のエンジニアブログでご紹介している端末ごとのフラグメンテーション対策 (Androidの機種依存問題を吸収するプロジェクトAndroid-Device-Compatibilityを公開したお話) もそうですし、日常の開発プロセスに関しては、JenkinsとGerritを組み合わせたレビュープロセス改善なんかもやっています。この辺りは、Software Design 2012年4月号で執筆させていただいた『ゼロから始める継続的なAndroidアプリケーション開発のしくみ』をご覧下さい。アプリの自動ビルドの仕組みからテスト用のダウンロードツールを作るところまでやって、開発現場のいろんなボトルネックを解消してきました。

開発やってるなら集中してコード書きたいよね

ところで、Androidアプリの開発現場では、Web開発には存在しなかった様々な「割り込み」が発生します。

割り込み 所要時間
「新しいバージョンできたよ」「あ、この端末にインストールして!」 約 5 分/回
不具合起きたから端末お持ちしましたー → ログの回収 約 10 分/回
既に改修済みの不具合を報告される → ヒアリング+アップデート 約 15 分/回
「なんか強制終了した!」報告対応 約 20 分/回
試してもらう人を探して連れてきて、インストールしてお渡しする 約 15 分/回
それぞれのコミュニケーション待ち時間、スイッチングコスト 約 5〜15 分/回

(※他に思いついたら突っ込んでください)

開発者の皆さんは、こういった割り込みに日々何気なく対応しているのではないかと思います。趣味で個人的に開発されている場合は、ほとんどのやりとりがネットワーク越しになるので、コミュニケーションコストが余計に掛かります。

個々の時間はそれほど掛かっていないので、おそらく苦痛というほどのものではないでしょう。でも、リリースを控える忙しい時期は、それに比例してアップデートの回数も増え、ただでさえ足りない時間に拍車を掛けてきます。そのとき初めて、時間を奪われている!ということを実感します。

開発者の所にはいろんな人がやってくるよの図

ちなみに、1日に大体480分働いているとするならば、5分で約1%になります。毎日1〜2件を対応しているとすると、スイッチングコストを含めて毎日5%はこの割り込みに割いていることになります。5%をお給料にそのまま掛けてみると…なかなか馬鹿にできませんね!

リリース前のバタバタしている時期。実機確認がままならずに「直せるはずのデザイン崩れが実機確認されないままリリース」なんて事案が発生したりすることもあります。それが「エンジニアって鬼の形相で画面見てて怖くてなかなか声かけづらいんだよね…!」なんて、 そんなんどないせいっちゅーねん! という理由だったりするわけですが、こうなるといよいよ、人に依存しない、自動化された再発防止策を考える必要が出てきます。

見えないコスト

Webの開発には存在しなかった、これらの「コスト」はどこから生まれてくるのでしょう。

Androidアプリは、 実際に動作を見るために手元の端末にアプリをダウンロードしてインストールする必要がある という点が、プログラム+データの両方を毎回配信しているWebと大きく異なります。

でも、AndroidはAPKファイルを自由にインストールできるから、配布も簡単!

…な、はずでした。しかし、実際にやってみると現実はそんなに甘くないことに気づきます。Playストア以外からアプリを「ダウンロード」して「インストール」する手段を知っている私たちは、世の中からすると圧倒的にマイノリティなのです。

実際、開発途中のアプリを社内で共有しようとすると、大体次のような課題と対策リストが生まれます。

  • 「アプリ試してみたい人!気軽に端末持ってきてね!」と周知しても、そのコンバージョンが非常に低い
    各自が手軽に試せるような簡単な導入手順を書いて共有しましょう。
  • 各自試せるように導入手順をしっかり書いても、「わかんなかった!」「なんか怖い画面出てくる!」
    最初は開発者が手動でインストールしましょう。
  • 更新版出しても、なかなかアップデートしてもらえない
    毎度メール送るか、アプリ内に更新通知の仕組みを作りましょう。
  • 自分の端末では起きないクラッシュログを回収したい!LogCatも見たい!
    端末を持ってきてもらうか、送りつける仕組みを作りましょう。 (ACRABugSenseも良い選択です)

しかし、この「導入手順書」ひとつとってみても、これまた地味な困難が待ち受けています。 例えば「Playストア以外からのアプリのインストール」を許可する設定変更の方法は、 2.x 系と 4.x 系の端末では設定の位置が異なっているので、それぞれの手順を別に用意する必要があります。

また、同様の差異は今後も発生します。国内ではまだ Android 4.2 端末が出ていないのであんまり目立っていませんが、 4.2 では「アプリをアップデートできないことがある!」という事象に直面することがあります。このとき実際の端末上では、インストール後に「× アプリケーションはインストールされていません」とだけ表示されます。 4.2 からは古いversionCodeのパッケージを上書きできないように変更されているからなのですが、これを知らないまま伝聞で現象を伝えられた日には、問題解決に軽く1日潰れてしまうでしょう。

何か大事なパーツが足りていない!

でもこんな対策、本当に皆がやる必要があるんでしょうか。

そんなに簡単に配りたいならGoogle Playストアでベータ配布すればいいのでは、と思われるかもしれません。しかし、それは少し需要が異なります。開発途中の試作品は、配布する数を絞って評価を行いたいですし、そもそも毎度のversionCodeのインクリメントが必須だったり、更新の反映に数時間掛かったりする現状のPlayストアは、ひとつのチームや組織内での開発イテレーションに対して重すぎます。

どうやら、現在のAndroidアプリの開発現場には、明らかに何かが不足しているようです。

  • チームの人、社内の人、身近な人に、手間を掛けずにサッとアプリを配って試してもらえて
  • インストールの手順や導入までの障壁に巻する対応も勝手にガイドしてくれて(もちろん日本語で)
  • アプリの更新もプッシュで通知してくれちゃって
  • クラッシュしたときにスタックトレースとかLogCatも勝手に集めちゃってくれて
  • 既にある自動ビルドの仕組みとも簡単に連携できる

そんな素敵なソリューション、誰か用意してくれないかなー?かなー!

…ってずっと思ってたんですが、 誰も作ってくれなかったので作っちゃいました。

DeployGateを使えば、たった今から解消できます

そんなわけで、生まれたのがDeployGateです。

いまお手持ちのアプリを そのまま アップロードするだけで、上で書いた配布の問題がまるっと解決できるようになっています。さらに、SDKを1行組み込むことで、クラッシュレポートを集めたり、任意のログを送信したりすることも簡単にできます。

昨年の9月にリリース後、個人・企業の開発者の方に幅広くご利用いただいており、Android開発に関わる方は別々のところで似たような課題に直面していたことが分かりました。

Zaimの閑歳さんや、

Simejiのadamrockerさんにも、

リリース当初よりご利用いただき、さらに多くの開発者の方からもフィードバックを頂いています。このフィードバックにお答えする形で、先日のアップデートから 無料で使える Free プランをご利用いただけるようになりました! 加えて、

  • ある程度、機能が固まった段階での「最新版」をチームの外の社員全員にさっと配ったり
  • 安定したところで、 1,000 人ぐらいのベータテスターを囲ってプレリリース版を配布して意見を集めたり

をほぼワンクリックで実現可能な「配布ページ機能」をご利用いただけるようになりました。詳細については、前回のエントリをご覧ください。

ちなみに前者は、自動ビルドでぽんぽん生成されるmixiクライアントアプリの最新版をチーム外の人に配り続けたら、頻度が高すぎてみんなアップデートしてくれなくなる という、最近社内で得られた結果に基づくものです。ちゃんと、それぞれの需要は尊重しないといけませんね!

DeployGateは、 世界中のAndroidアプリ開発の現場の効率化 にフォーカスして、現在も開発を進めています。Amazon.comのインフラ技術からAmazon Web Servicesが生まれたように、mixi.jpのAndroidアプリ開発資産を基にDeployGateは作られています。 近年、開発者向けの *aaS 系のサービスが増えていますが、これらのサービスを活用して、次々と素晴らしいアプリやサービスが生まれる土壌が国内にも広がりつつあり、その一端を担っていければと願っております。

ABC 2013 Spring に出展&登壇します!

また、DeployGateチームは、今週末の 3/15(金)、 3/16(土) に明星大学日野校で行われる、 ABC 2013 Spring にも出展させていただきます。 16 日は、登壇発表もさせていただきますので、 DeployGate の詳細や Android アプリ開発プロセスの改善について、個人でもチームでのお仕事でも役に立つお話をご紹介できればと思います。ぜひお越しください!

今後、エンジニアブログの方でも DeployGate と Jenkins との連携や DeployGate SDK の活用方法、 DeployGate の内部の仕組みから、 Android 開発で使うと便利な外部サービス、プラットフォーム間の思わぬ落とし穴 (4.2は地味に前述したような "小骨" が多いです) など、予定は未定ですが何かしらご紹介できればと思いますので、引き続きよろしくお願いいたします。

 

最後に: DeployGate は、 https://deploygate.com から無料でご利用いただけます!