写真●ネットエージェント研究開発部の池添徹氏
写真●ネットエージェント研究開発部の池添徹氏
[画像のクリックで拡大表示]

 「Androidアプリで重要なのは、そのアプリが何をするのかユーザーにしっかりと説明すること」---。ネットエージェント 研究開発部の池添徹氏はこう強調した(写真)。2011年12月13日から15日に開催中の「スマートフォン&タブレット2011冬」において、池添氏は「Androidアプリ開発で気をつけるべきこと---炎上しないアプリ開発」と題した講演を実施した。

 ここで言う「炎上」とは、ブログなどで発生するいわゆる炎上と同様のもの。Androidアプリが不審な挙動を示すと、そのアプリに関する悪い話題がTwitterなどで盛り上がってしまう。最近発生した炎上の例として、池添氏はユーザー情報を外部に送る「CARRIER IQ」(関連記事)、アプリの起動回数や通話記録などを保存していた「LifeLogService」、端末の位置情報や通話記録を保存する「カレログ」を挙げた。

 「カレログは開発会社が謝罪して、新しいアプリとして『カレログ2』を出したが、評判が落ちたのかダウンロード数はあまり伸びていない」(池添氏)。一度炎上してしまうと、開発会社自身が信頼を損ねてしまうというリスクがあるのだ。

 Androidアプリでは広告出稿機能などを他社製のソフトモジュールで組み込むケースもある。こうしたケースで炎上に至ったのが「Applog」だ。「どういう情報を取得するのか不明だったり、いったん利用を許諾したユーザーは止める方法がなかったりといった問題があった」(池添氏)ため、Twitter上で炎上する騒ぎになった。池添氏は「ユーザーに対する説明責任はモジュール開発者ではなく、アプリ開発者にある。仕様がよく分からないモジュールは使うべきではない」と言う。

パーミッションに要注意

 Androidアプリでは「パーミッション」と呼ぶ、端末内の各種データや端末機能へのアクセス制限機構に注意が必要という。ユーザーに対してはAndroidマーケットでパーミッションが表示され、それに同意した上でアプリをインストールすることになる。

 パーミッションを得たアプリは様々な情報を取得できる。「例えば『READ_PHONE_STATE』では、端末番号やSIM番号、電話番号などを取得できる。GPSで端末の現在位置を取得したり、電話を発信させたり、カメラや録音機能を使ったりするパーミッションもある」(池添氏)。悪用すると、個人情報を盗んだり、ユーザーをトラッキングしたりすることもできてしまう。

 このように危険な一面も持つパーミッションだが、「Androidマーケットでの説明は不十分なことが多い」(池添氏)という。「取得した情報をどう扱うのか分からないアプリが多い。炎上を防ぐためにも、アプリ開発者は情報をどう扱うのか明確に記述すべき」(池添氏)。

デバッグモードはきちんと止めておく

 このほか、Android特有の機能である「Intent」にも注意を払うべきとした。Intentとはアプリ間連携のためのメッセージングシステムのこと。異なるアプリの起動やURLを指定したブラウザのオープンのほか、同一アプリ内の画面遷移にもIntentを使う。「電話を掛けたかったら『tel:電話番号』と簡単に指定できる」(池添氏)。

 セキュリティの面で見ると、不要なパーミッションを取らずに済むようになる点がメリットだ。ほかのアプリと連携することで、自分のアプリではセンシティブなデータや機能を扱わずに済むようにできる。

 便利なIntentだが、使用方法次第では面倒を引き起こす。例えばIntentを利用して、デバッグ用画面を呼び出すケースが該当する。「通常はアプリ内で簡単にデバッグ画面に入れないように、外部からIntentを使ってデバッグ画面に入るようにする。アプリ開発に詳しい人はそれを見つけ出してしまう」(池添氏)。ゲームなどの場合、ユーザー間の不公平感につながってしまう可能性がある。

 この問題を防ぐには二つの方法がある。一つはデバッグ用の機能はすべてふさぐ方法。もう一つはデバッグ用の画面に「exported=false属性」を付与する方法だ。これによって、外部からの表示をできなくする。池添氏は「できればデバッグ機能は製品リリース段階では外した方がいい」とアドバイスする。