Androidのカメラアプリは難しい

先日、Androidのカメラアプリ開発者向けのイベント、Android Camera Forum 2011 に行ってきました。

いろいろなAndroidの実機が会場で自由にさわれたり、カメラアプリ開発者の方の濃いお話が聞けました。

ToyCamera をつくったきっかけ

まずは、深津貴之(@fladdict)さんのお話。 (じつは私はAndroidには個人的にはあまり興味がないので、このセミナーに参加したのも深津さんのお話を聞くのが一番の目的だったんですが……。)

ToyCameraを作った最初のきっかけは、iPhone3Gに搭載されていたカメラの性能がよくなかったことだったそうです。 当時流行していたトイカメラのように、画質の悪さを長所にしたほうがいいアプリをつくれるのでは、ということで世にだしたのがあのToyCameraアプリ。 お金をもうけたいということではなく、携帯カメラの新しい提案をしたいというのが動機でした。

深津さんの仕事のすすめかた

深津さんは、まずFlashでプロトタイプを作成。 iPhoneアプリはObjective-Cで作るので、Flashで作業するのは二度手間のように見えるけど、そこには二点理由があります。 深津さんは元々Flash使いの方なので、Flashの方が開発のスピードが大きいことが一点。 もう一点は、Flashならそのままウェブにおけば、ベータ版アプリ配布などという面倒くさい手続きをせずに、誰にでもベータテストをしてもらうことができる点。

Flashでプロトタイプを作った後は、Post-Itによるペーパープロトタイピング。 50mmx75mmのPost-ItがiPhoneのスクリーンサイズと同じなので、それに手書きで画面イメージを描く。 PhotoShopでグラフィックパーツをつくり始めてしまうと、コンピューターの画面上ではかっこよく見えても、実際にタッチスクリーンに配置すると(小さくて)押せないなどということが起こってしまう。 ペーパープロトタイピングだと、実物大で画面を確認できるからこそ、実際にタッチした時の使い勝手を確かめられる。

解像度は重要?

あとここで深津さんは「解像度は重要?」と会場に質問を投げかけました。 (このイベントのメインは高解像度を売りにしたXperia Arcだったんですが。(笑))

カメラの解像度が高いということはデータ量が大きい。 3G回線でのアップロードが難しい。 よって、ソーシャル系サービスと相性が悪い。 個人的にはソーシャル系では600x800くらいのサイズで十分。

ソフトウェアエンジニアとしては、性能のよすぎるデバイスも悪すぎるデバイスも切り捨てることにしている。 一機種だけに特別な機能があったとしても、それをサポートすることでユーザーが本当にハッピーになるどうかを考えている。

Androidでカメラアプリをつくるなら、深津さんのおすすめは、(特定の機種向けの)プリインストールのアプリ。 現状のAndroid Marketの規模では、なかなかペイするところまで持っていくのは難しい。 (ただ、深津さんみたいな著名デベロッパーならともかく、一般のデベロッパーにはプリインストールのアプリを作るという機会を作ることが難しいですよね。)

深津さんは今後Androidアプリを出す予定があるのでしょうか?と質問してみたら、プリインストールのアプリを作らないかというお話がいくつかきているとのことでした。

FxCamera、Androidの多機種への対応

次は山下盛史さん(@yyaammaa)のお話。 全世界で600万DLダウンロードされた脅威のカメラアプリ、FxCameraの作者さんです。

まず、Androidの本家Googleが開発したカメラアプリ、Google Gogglesのマーケットのレビューの紹介から。 「**すると強制終了」「Motorolaだと起動しない」「Samsung Momentだと必ずおちる」……。 Googleでさえ全機種で動作するカメラアプリは作れないんだから大丈夫!という力強いお言葉。

Androidはいろいろなメーカーが独自の機種を出しており、カメラ周辺機能についてはすべての機種で確実に動く(動くべき)手順が存在しない。 Androidの標準のカメラアプリのソースコードをもとに作っても動作しない機種もある。

Androieのカメラアプリがつくりにくい原因

山下さんによると、Androieのカメラアプリがこれほどまでつくりにくい原因はこれが主な理由だそうです。

  1. 貧弱なAPI
  2. メモリー不足
  3. 機種固有のバグ
  4. 謎の不具合(JPEGのcodecのバグなどもあるそうです)

もし実際にカメラアプリを作るなら、Intentで丸投げ処理にするか、がんばって独自で実装するかの二択。

ただし、Intentを使った場合にも機種によってはorientationを正しく返さない場合があるので、写真撮影の後に、ユーザーに回転をさせるユーザーインターフェース(回転ボタンなど)をつけるのがおすすめ。

もしがんばって独自で実装するなら、最初は対応機種をしぼること。 初期バージョンでは最新OSと特定機種に絞り、徐々に対応機種と対応OSをひろげていくのがよい、とのことでした。

Androidは難しい

最後は有山圭二さんの実際のカメラアプリの実装のお話。 (実装のお話より余談の方がおもしろかったんですが。)

それにしても、AndroidのカメラアプリはiPhoneとは全然違いますね。 私もお仕事でAndroidのカメラアプリを作っていたんですが、 iPhoneでは機種による違いがほとんどなく、せいぜい解像度が違うことを考慮するくらいでいいところが、Androidでは機種ごとにコードを書き直さないと動作しないような感じでした。 どちらかというと、ほとんど組み込みエンジニアの世界に近いという印象です。

今後、Androidはどんどん機種も増え、OSも増え、機種とOSの組み合わせが加速度的に増加していくなかで、アプリを作る側もさらに大変になりそうな予感がします。 Androidのカメラアプリもさらに難しくなりそうです。