毎日のように「iPhoneアプリでApple Design Awardを取るぞ!」と騒いでいるので、知り合いに「それって(現実が分かっていない)大学生のノリですよ」と指摘されてしまった私だが、マイクロソフトを2000年に退社してからは、ひたすらモバイル・組み込みの世界で仕事をしてきた私としては「俺が取らなくて誰が取る?」という気分。その超楽天的な態度が彼が言うところの「大学生のノリ」なのだろう。
市場に受け入れられるアプリを作るためには、もちろん「誰にどんな価値を提供するのか」が一番大切。しかし、そこには残念ながら成功の一般方程式はないので、今日は比較的に一般化しやすい「どう作るか」という部分に関して、まとめることにした。
1. ユーザーの利用シーン・使用パターンを良く考えて作る
パソコンやゲームコンソール向けのソフトと大きく違うのが、ユーザーの使用パターン。iPhoneに限らず、携帯電話用のアプリは基本的には「一回のセッションはわずかな時間、でも一日に何回も使う」もの。例えばゲームであれば、1時間ぶっ続けに遊ばないと楽しめないゲームではなく、ちょっと電車を待つ時間に2〜3分遊んだり、タマゴッチのように「基本的にはずっと遊んでいるが実際にアプリとやり取りをするのは時々」なゲームを作るべき。
2. 1回に一つのアプリしか走らせられないことを強く意識して作る
パソコンから来た人たちは、iPhone OSがアプリをバックグラウンドで走らせることを許さないことに不満なようだが、まさにここをキチンと理解して作り込むことが「良い携帯アプリ」を作るために大切。パソコンと違ってメモリの限られた携帯電話では、バックグラウンド・アプリを走らせる余裕などないし、そんなことを許してしまっては、Windowsパソコンのように「長く使っているとどんどんと遅くなるマシン」になってしまう(これって、自分に対する皮肉か?^^;)。途中で電話がかかって来ても、ユーザーがいきなりホームボタンを押してしまっても、ユーザーの大切なデータがなくなったり壊れたりしない、そんなアプリを作らねばならない。
3. ハードを強く意識して最適化する
iPhoneの場合は、「CPUは非力だが強力なGPUを積んでいる」、「メインメモリは限られているが、フラッシュメモリは豊富にある」、「通信は遅いGPRSと早いWiFiの二種類がある」などの特徴があり、そのあたりを強く意識したアプリケーションの設計が必要となる。特に「どの処理をGPUが助けてくれるのか」を強く意識して設計すると、見栄えが良くて消費電力の少ない優秀なアプリが作れる。たとえば、viewを書き換えるのはCPUだが、viewそのものを変形したりアニメーションしたりするのはGPUの役目なので、そこを意識してviewの書き換えを極力減らしながら、フェードインなどの効果はGPUにさせる。
4. ネットワーク遅延によるストレスを極力減らす
これはAJAXでも同じ話だが、特にネットワーク遅延の大きいモバイル・ネットワークを利用したアプリケーションを作る場合、通信による遅延をいかにユーザーから隠し、ストレスの少ないおもてなしを提供するかが鍵となる。軟弱なプログラマーはマルチスレッドにたよりがちだが、そこにある「排他制御のワナ」にハマらないように気をつけなければならない。私は基本的には「シングルスレッドで複数の非同期通信を同時に使いこなすことに命をかける」タイプだが、こちらはこちらで気をつけなければならないことが沢山ある(メモリーリークとか、プログラムの煩雑さ、だとか)。
5. 機能の豊富さではなく、シンプルさと分かりやすさで勝負する
機能が多すぎる携帯アプリを使っていて一番イライラするのは、UIが複雑すぎて一度何とかたどり着くことが出来た機能にもう一度たどり着くことができなくなってしまうこと(私の経験ではN900iがまさにそんな端末 )。携帯アプリの場合、「どれだけ豊富な機能を提供するか」ではなく「(ユーザーに提供する価値を損なわずに)どこまで絞り込めるか」が勝負である。もちろん、絞り込みすぎたら役に立たないアプリになってしまうので、そのバランスが一番難しい。N900iは、撮影時の解像度は指定できるしマクロ撮影もでき、機能的にはとても充実していたが、肝心の撮影をしたい時に4つもクリックが必要、という最悪の作りであった(参照)。
ということで、「どう作るか」に関しては良く理解しているつもりなので、後の問題は「何を作るか」。Apple Design Award 2008向けのiPhoneアプリの提出期限まであと約二週間。ブログなんて書いてる時間はないぞ、と。