SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

【デブサミ2017】セッションレポート(AD)

より良いアプリを開発するためのYahoo! JAPANの取り組み~ホットパッチングのススメ【デブサミ2017】

【16-A-6】ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術

  • このエントリーをはてなブックマークに追加

 アプリストアには数多くのモバイルアプリがあふれている。その中からユーザーに選んでダウンロードしてもらうには、高水準のユーザー体験を提供し続けるためにアプリ改善のサイクルをスピーディーに回していかなければならない。本セッションでは、ヤフー株式会社の黒帯 Android.*である森洋之氏が、国内市場でトップパブリッシャーとなったYahoo! JAPANで、ユーザーが使いやすいアプリを開発するためにどのような取り組みを行っているのかを紹介。また、審査なしに修正コードを配信できるなどのメリットから、モバイルアプリ開発で一般化しつつあるホットパッチングについて解説した。

  • このエントリーをはてなブックマークに追加
ヤフー株式会社 ヤフオク!カンパニー ヤフオク!開発本部 / 黒帯 Android.* 森洋之氏
ヤフー株式会社 ヤフオク!カンパニー ヤフオク!開発本部 / 黒帯 Android.* 森洋之氏

激化するモバイルアプリ市場を勝ち抜くために

 Google Playのアプリ数は2017年1月現在で約270万、App Storeでは約220万に上る。1年前のアプリ数と比較すると、前者では月平均で約6万、後者では約3万のアプリがリリースされている計算だ。しかし米国での統計では、平均的なユーザーが1日に使用するアプリはわずか4~6個。アプリの利用時間や収益は伸びているものの、アプリのダウンロード数は先進国では横ばい、日本ではマイナス成長となっている。すなわち、モバイルアプリ市場では競争が激化しており、アプリを出せばよいという時代は終わったということだ。

 そういった状況のもと、Yahoo! JAPANは2014年~2016年、3年連続でアプリの国内トップパブリッシャーの座を獲得(App Annieの調べによる/2014年、2015年はゲームアプリを除く)。ユーザーが使いやすいアプリを開発するために、いくつかの取り組みを行っている。

 まず、「あたりまえ」品質の基準を定義することである。具体的には、「信頼性」=安心・安全に使用できること、「市場性」=市場優位性や新規性があること、「使用性」=使いやすいこと、「機能性」=合目的的で想定どおりに動くこと、「改善性」=迅速に改修可能であることなどが挙げられる。例えば、「信頼性」については、ソフトウェアの安定性に加え、コンプライアンスの遵守、正確なコンテンツの提供、ユーザー情報の保護など、ユーザーが安心して使用するための基準をまとめている。

 これらの基準を満たすために並行して行っているのが、プラットフォームやツールの整備だ。例えば、全社でCI環境を構築し、GitHubでコードをコミットすると、Jenkinsでビルド、Robolectricでユニットテスト、AppiumでUIテストが行われるようになっている。テスト結果は社内チャットなどで通知され、さらに生成物がArtifactoryなどにアップロードされる。社内システムではビルドやテストを実施する部分をビルドエンジンとして抽象化しているため、ビルドパイプラインを容易に作成し、組み替えることが可能だ。そのため、フロントエンドもバックエンドも開発に同じ社内システムを利用している。

 その他にも、Yahoo! JAPANでは、アプリを改善していくためにユーザーの声を聞くことを重視。Google Playや、アプリやWebページなどからユーザーの意見を得て分析し、その一部を開発上のタスクとしている。

品質基準を満たすように全社CI環境を整備
品質基準を満たすように全社CI環境を整備

リリースサイクルの改善、古いOSのサポートなどに効果的なホットパッチング

 一方で、ネイティブアプリならではの課題もある。アプリ開発では、企画、開発、テスト、リリースを行い、計測した効果をもとに再び企画を立てるという形で回すのが理想的だ。しかし、実際にはテスト後、審査や部分リリースなどの段階を経るため、完全リリースまでに時間がかかってしまう。ヤフオク!では2週間に一度のペースでリリースを行っているが、2週間たってもそのバージョンの普及率が100%にならないという問題が発生する。また、部分リリース期間中に大きな不具合が発生すると、リリースを中断して不具合の修正を優先するため、完全リリースが遅れてしまう。

 こういった問題の回避策として、アプリをアップデートせずにパッチを配信して適用するホットパッチングが有効だ。ホットパッチングによってリリースサイクルを維持でき、さらに重大な不具合が発生したときもユーザーがアプリを使用できない期間を最小限に抑えられる。

 Androidアプリでは、古いバージョンのOSをサポートするケースで活用可能である。Androidの最新バージョンは7.xだが、約3割のユーザーはバージョン4.xを利用している。バージョンの古いOSをサポートする場合、非推奨になった機能や不具合に対応するためにコードが複雑になり、生産性が低下する。しかし、3割のユーザーも無視できない。そこで、古いOSにはアップデートによる新機能は配信しないが、不具合の修正をホットパッチで配信するという形で、ユーザーへのサポートを継続できる。

 これらのメリットから、モバイルアプリ開発ではホットパッチングが一般化しつつあり、さまざまなライブラリが提供されている。

 Android用のtinkerは、既存のapkファイルと新しいapkファイルの差分から作成したパッチをアプリ内のdexファイルと合わせて、アプリの起動時に読み込んで反映する。メソッド、クラス単位でのコードの置き換えが可能だ。AndFixは、apkファイルの差分をパッチとして読み込ませる。置き換えはメソッド単位のみだが、起動中のアプリにも適用できる。JSONデータからレイアウトを動的に作成することで、デザインを置き換えるjson2viewというライブラリもある。Androidでは、Classオブジェクトのメソッドテーブルを書き換える、外部のjarファイルから動的にクラスをロードする、あらかじめスクリプトを実行可能にするといった方法でホットパッチングを実行できる。

Androidでtinkerを使ったホットパッチング
Androidでtinkerを使ったホットパッチング

 ホットパッチングの実施にあたって注意しなければならないこともある。まず、セキュリティだ。パッチは配信サーバーからユーザーのデバイスに配信されるが、その通信経路上で中間者攻撃による盗聴や改ざんのリスクがある。そのため、パッチファイルの暗号化、HTTPSなどセキュアな通信方法、電子署名のチェック等の措置が必要となる。また、iOSやAndroidのアプリ開発のガイドラインに抵触しないように注意する必要がある。アプリの主要な目的や機能を変更するような改修は行うべきではない。

 最後に森氏はAndroidでスクリプトを使ったホットパッチングの方法を紹介し、デモを行った。競争が激化するモバイルアプリ市場ではアプリの改善速度を上げて差別化を図る必要があり、そのためにはホットパッチングが効果的であると述べてセッションを締めくくった。

お問い合わせ

 ヤフー株式会社

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/10052 2017/04/14 21:35

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング