# iPhoneアプリ開発者があえて言う。iPhoneは終わる。
_published: 2009/11/30_ 
私は、もともとWindows開発者(.NET)で、パッケージ基幹業務アプリケーションのベンダーで働いていました。同時に、家ではWeb開発をやっていました。最近は、フリーランスになって、iPhoneアプリ開発がメインになっています。ところが、iPhoneアプリ開発の比重が高まるにつれ、そのことに対する不安感が大きくなってきました。最近では、iPhoneアプリ開発の比重を減らすにはどうすればいいのか考えています。
iPhone 3GSが出てから、かなり売れてるみたいですね。私の住む熊本ではiPhoneユーザーはまだまだ少ないと思いますが、企業、団体、個人によるiPhoneアプリ開発に対する関心が高まっているのを感じています。東京あたりに行くとiPhoneアプリ開発者がゴロゴロいると聞きますが、熊本や福岡では開発者が足りていない状況です。
このような状況で、なぜ私がiPhoneアプリ開発の比重を減らそうとしているのか。結論から先に言いますと、「iPhoneはユーザーインターフェイスであり、ユーザーインターフェイスのライフサイクルは極めて短い」という考えがあるのです。以降、ユーザーインターフェイスをUIと略します。まずは、iPhoneがUIにすぎないというお話。
iPhoneアプリの単価が下がってきているのは周知の事実です。iPhoneアプリでは稼げないという声も聞こえてきそうです。少しニュアンスは違いますが、私もiPhoneアプリ単体では限界が来ていると考えています。では、どうするか?その答えは、いま流行の「クラウド」です。EC2やGAEなどの技術者的なクラウドではなく、一般に使われるクラウドです。
データやロジックを雲の向こうに置きサービス化します。そして、iPhoneをそのクライアントとして使います。サービスには、iPhoneだけでなく、WindowsやMacやLinuxのデスクトップアプリケーションからもアクセスできます。もちろん、Webインターフェイスを作ってもいいでしょう。そうすることで、iPhoneアプリの販売ではなく、クラウドサービス(という言葉で合ってる?)の利用料という課金モデルという選択肢が増えます。
こうなると、iPhoneはサービスにアクセスするためのUIとなります。なんとなく、iPhoneがUIにすぎないと言っているイメージが伝わりましたか?もちろん、iPhoneアプリにもロジックは組み込まれます、ですがそれはコアなビジネスロジックではありません。以降、ビジネスロジックをBLと略し、UIコンポーネントとBLコンポーネントのライフサイクルについてお話しします。
UIコンポーネントはライフサイクルが非常に短いと言えます。これは、BLコンポーネントに比べて短いということです。ここで、クライアントとサーバーの歴史について考えてみましょう。まずは、ホストと端末のシンクライアント。そして、C/S型のファットクライアント。次にブラウザをクライアントとしたシンクライアント。そして、上記のクラウド型に近いリッチクライアント。という具合に変遷してきました。
このようなアーキテクチャの変遷にともなって、UIのテクノロジーも移り変わってきました。もちろん、BLコンポーネントの配置場所によって、BLを実装するテクノロジーも移り変わっているわけですが、BL(ビジネスロジック)そのものに変化はありません。ここに、UIとBLの大きな違いがあるのです。
UIについて言えば、例えば、Windowsアプリケーション、JavaScript + DHTML、Flash、iPhoneアプリでは、ロジックそのものが違います。コンポーネントの再利用はもちろん、ロジックの再利用も不可能です。もっと言えば、デザインパターン(GoFじゃないよ)すら再利用できないのです。
一方で、BLに関して言えば、COMによる再利用をはじめ、既存のBLコンポーネントをラップして使うというケースがあります。また、コンポーネントをリプレースするにしても、ロジックは変わらないわけです。フレームワークを変更しても、ロジック自体はそのままです。JavaからRubyへの移行さえも可能でしょう。ライブラリとアルゴリズムのレベルでの差異はありますが。
PHP + MySQL(またはPostgreSQL)なんてシステムはいつまで経ってもそのままでしょう。しかし、UIに関しては、PHPの吐き出すものが違ってきています。最初は、HTML。そのうちに、Ajaxなんてのが出てきて。XMLやJSONを出力して、RIA (Rich Internet Application)を含むデスクトップアプリケーションが利用するようになるかもしれません。また、これは明日書く予定ですが、Flashが見直される時期に来ていると考えています。それでも、BLはプレーンなPHPのままなのです。
ところで、BLの変換点はまだ来ていないのでしょうか?私は、すでに始まっていると考えています。今度は、EC2やGAE的な「クラウド」(紛らわしい?)。さらに言えば、Key-Valueストア。Key-Valueストアって、RDBMSからデータ層が変わるだけじゃないのかと言われそうですが、BLそのものが大きく変化するはずです。そして、アプリケーションレベルでマルチコアやサーバークラスタを活用しようと思ったら、BLそのものの見直しが必要になるはずです。
このように、BLにも遷移する時期はあります。ですが、UIと比べると、その頻度は遥かに少ないわけです。この辺のキーワードを持ち出すのは微妙かもしれませんが、Web2.0が来てもSaaSが来てもBLは変化しませんでした。一方で、UIは変化しました。そして、UIの変化には互換性がありません。
iPhoneアプリはUIにすぎないというお話をしました。そして、UIのライフサイクルは短いと。すでに、Androidという競合が出ています。さらに、Microsoftも動き始めました。HTML5とCSS3への関心も高まっています。Adobeを中心にRIAも盛り上がりそうです。Windowsでは、WPFが。WPFがんばれ。Silverlightもがんばれ。
また一般的に言うクラウドの話になりますが、マルチプラットフォームが当たり前になっています。iPhoneアプリだけ作ってればいいという状況ではなくなってきています。もちろん、iPhoneアプリ単体でもまだ行けると思いますが、それをレッドオーシャンと呼ぶのか、沈みかかった船と呼ぶのかどうかは知りません。少なくとも、私はやりたくないです。
「iPhoneは終わる」と書きましたが、正確には「単体iPhoneアプリ開発熱が去る」と書くべきだったかもしれません。これからのiPhoneアプリ開発者は、iPhoneがマルチプラットフォームのうちの1プラットフォームにすぎないことを意識していく必要があるのではないでしょうか。