リリースサイクルの改善、古い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ファイルから動的にクラスをロードする、あらかじめスクリプトを実行可能にするといった方法でホットパッチングを実行できる。
ホットパッチングの実施にあたって注意しなければならないこともある。まず、セキュリティだ。パッチは配信サーバーからユーザーのデバイスに配信されるが、その通信経路上で中間者攻撃による盗聴や改ざんのリスクがある。そのため、パッチファイルの暗号化、HTTPSなどセキュアな通信方法、電子署名のチェック等の措置が必要となる。また、iOSやAndroidのアプリ開発のガイドラインに抵触しないように注意する必要がある。アプリの主要な目的や機能を変更するような改修は行うべきではない。
最後に森氏はAndroidでスクリプトを使ったホットパッチングの方法を紹介し、デモを行った。競争が激化するモバイルアプリ市場ではアプリの改善速度を上げて差別化を図る必要があり、そのためにはホットパッチングが効果的であると述べてセッションを締めくくった。
お問い合わせ
ヤフー株式会社