伊藤直也氏が語る、モバイルアプリケーション開発のいまとこれから(後編)~Salesforce Developer Conference Tokyo 2013
9月6日開催されたSalesforce Developer Conference Tokyo 2013のセッション「B2Cからみたモバイルアプリケーション開発のいまとこれから」では、コンシューマ向けサービス開発の現場に身を置いてきた伊藤直也氏が、モバイルアプリケーション開発を成功させるための方法をこれまでの経験や現在の開発現場のノウハウを基に語っています。
試行錯誤の回数を増やす、iOSとAndroidは同じように作ってはいけないなど、モバイルアプリケーション開発に関わるエンジニアやデザイナーにとって非常に参考になる内容が込められたセッションの内容を、ダイジェストで紹介しましょう。
(本記事は「伊藤直也氏が語る、モバイルアプリケーション開発のいまとこれから(前編)~Salesforce Developer Conference Tokyo 2013」の続きです)
モバイル開発の落とし穴
iOS/Android開発でよくある罠がこれで、iOSとAndroidは同じデザインでよろしく、というオーダーをついしてしまいますが、これはやってはいけないことなんですね。

なぜかというと、iOSの画面遷移は基本的にアプリの中で完結するという考え方です。つまり、アプリを使っていて突然別のアプリの画面が割り込んできて、そこから元のアプリに戻る、ということはあまりないはずなんです。

一方でAndroidは、アプリ内のある画面から別の画面に飛ぶのと、あるアプリから別のアプリの画面に飛ぶのは概念上あまり区別がないんです。Webブラウザで、同じWebサイトでも別のWebサイトでもURLという全く同じ概念で画面が遷移したり戻ったりというのに似ています。

これはUIの基本思想が大きく異なっていることなんです。でも見た目は似ているので、ふだんiPhoneしか使ったことのない人がAndroidも同じだろうと思って発注するとチグハグになって失敗するんです。なので両方を開発するときは、別の開発ラインにするか、iPhone版の開発が終わってからAndroid版の開発をするというのがいいと思います。
それから、これはこういうところで初めて言うことですが、ワンソースでクロスプラットフォームに対応する開発方法はお勧めしません。どっちつかずのアプリになってしまいます。ユーザーに受け入れられやすいアプリを作るなら、(プラットフォームごとに)分けて作った方がいいです。

HTML5とJavaScriptでネイティブアプリっぽいのを作るのは、いろいろ早く作れそうに思いますが、JavaScriptのクセやOSのクセなどの落とし穴にはまって時間ばかりかかってしまうと思います。
モバイルアプリの開発手法
落とし穴が分かったとして、どうやってアプリを素早く、試行錯誤を繰り返しながら作っていくのかというと、キーワードはオープンソースソフトウェアの活用です。ここ1~2年、すごい勢いで環境が整っています。
CocoaPodsだと1500以上のライブラリがあって、ライブラリをダウンロードしてセットアップしてくれ、依存関係なども管理してくれます。

UIのコンポーネントもCocoa Controlsにたくさん提供されています。
ただ、Cocoa Controlsだけで作っていくとちょっと足りないとかちぐはぐだったりして、最後は自分で作ることになると思いますが、プロトタイプとかにはいいと思います。

いま、モバイルのバックエンドにクラウドを使うのは当たり前になってきています。バックエンドは、基本的にはAPIで構成されます。最近ではHTTP/JSONを用いることが多いですね。BtoCの新規開発でオンプレミスのサーバを選ぶことはたぶんほとんどないです。

なぜクラウドを使いたいか、その理由として、インフラの納期を縮めたいとか、トラフィックのピークが予測できないからといったことがありますが、ことBtoCではやっぱりDevOpsしたい、というのがあります。バックエンドを自動化してしまって、ボタン1つでGithubのコードをデプロイできる、といったことをするときにクラウドだとやりやすい。

これから盛り上がるのはMBaaS(Mobile Backend as a Service)です。IaaSやPaaSは自分たちでバックエンドのコードを書いてそれをホスティングします。例えばユーザー登録の機能を作ろうとすると、メールアドレスを登録してもらったらハッシュ値をメールして、といったコードを書かなくてはいけません。しかしMBaaSはそういうコードを書かなくてもSDKとAPIだけで作れるとか、TwitterやFacebookのIDでログインできるアプリも簡単にできるといった機能を提供してくれます。

いま見てきたMBaaSはモバイルアプリの裏側を全部まかなうわけではなく、かなり上のレイヤーの機能なので、IaaS/PaaSと組み合わせてバックエンドを構成し、そこにiPhone/Androidからリクエストを投げる、ということになると思います。

HeliosはBaaSのようなものを自分で作れるフレームワークですね。BaaSが作れるオープンソースのフレームワークはちょこちょこ出てきているので、これから盛り上がってくると思います。
デベロッパー向けサービスの活用
最近は用途特化型のデベロッパー向けサービスがたくさんあって、自分はすごくよく使っています。

TestFlightはチームのメンバーに新しいバージョンのアプリを配布したいときに使えます。これがないと、いちいちメンバーの端末にケーブルをつなげて1台ずつ配布しなければいけないのですが、TestFlightはオンラインで配布できるのでものすごく重宝します。
BugSenseはアプリがクラッシュしたときのレポートをオンラインで集めてくれて、デベロッパーに送ってくれます。コードのスタックトレースが載っているので、どこを実行中にクラッシュしたかなどが分かります。
NewRelicはRuby on Railsを使うときの定番のモニタリングで、HTTPリクエストがどれくらい飛んで、どれくらい失敗したかといったネットワークのモニタリングができるようになっています。
Travis CIはテストを自動化するためのホスティングサービスです。
ちなみにこれ、全部無料で使えます。こうしたものを自分で作るとしたらかなり手間がかかりますが、サービスを利用することで開発スピードを高めることができます。

やはりWebの開発といっしょで、楽できるところは楽して、自分でやるべきところに集中するべきです。ただ、先ほども言ったようにiOSとAndroidは一緒に作らないとか、UIが80%とか、そういうところを間違わずにやっていく。そして開発プロセスを自動化し、試行錯誤の回数を増やしていく、というのが最近のBtoC開発のトレンドです。
あわせて読みたい
PostgreSQL 9.3正式版が公開。1秒以下の高速フェイルオーバー、データチェックサムによる高信頼性、マテリアライズドビューなどの新機能
≪前の記事
伊藤直也氏が語る、モバイルアプリケーション開発のいまとこれから(前編)~Salesforce Developer Conference Tokyo 2013