初めまして。 株式会社DeNAポータル事業本部システム部アバターシステム開発Gの岸です。
最近iPhoneアプリ開発について色々調べています。 一時期iアプリの開発に関わっていたことがありますので、今回はその経験を踏まえて開発の視点から簡単に両者の比較を行ってみたいと思います。
iPhoneアプリ
ご存知、iPhoneおよびiPod touchなどのAppleが提供する携帯端末で動くアプリケーションです。同社が提供しているiPhone SDKを使って開発を行います。
iPhone SDKは高品質なアプリケーションを簡単に作るためのフレームワークを多数提供してくれます。ボタンやテーブルなどのUIを実現するためのUIKitやいい感じのエフェクトを使うことのできるCore Animationなど高レベルなフレームワークから、Quartz 2DやOpenGL ESのような低レベルなフレームワークまで用意されています。
その他にも動画やサウンドやネットワークを扱うフレームワークや位置情報やアドレス帳などから情報を取得するためのフレームワークなどがあります。
iアプリ
iアプリはDoJaプロファイルと呼ばれるJava実行環境で動きます。DoJaはJava MEにおけるCLDCプロファイルの一つです。
以前のiアプリ開発は・・・
昔iアプリ開発をされていた方だと、アプリのサイズが数十KBまでしか使えないので、最終的なアプリのサイズが小さくなるようにクラスを一つのファイルにまとめたり、デフォルトよりも圧縮効率のよいjar生成を行ったり、初回アプリ起動時に必要なリソースをスクラッチパッド(iアプリが使える記憶領域)にダウンロードしたり、と言ったような様々な工夫が必須でした。
最近のiアプリ開発
DoJa5.0(端末だと903i)以降からアプリの実行ファイルとスクラッチパッドの両方を合わせて1024KBとなりメガiアプリと呼ばれるようになりました。このため開発者としては上記のようなノウハウに気を配らなくても比較的楽に開発ができるようになっています。
その他にDoJa4.0からCLDC1.1になったことで1.0では扱えなかった浮動小数点が使えるようになったり、3DエンジンのMascotCapsuleが基本APIから使えるようになったりと色々機能も追加されています。
Starプロファイルの登場
2008年秋以降の端末ではStarプロファイルという新しいプロファイルが登場しました。
アプリのサイズが2048KBになり、タッチパネルのサポート、iアプリオンラインと呼ばれるTCP/UDPを使ったレスポンスの良い通信など多くの機能が追加されています。DoJaとは互換性はないですが、今後しばらくの端末ではDoJaとStarの両方のプロファイルを搭載するようです。
Starプロファイルを搭載した端末の普及率はまだそこまで高くなっていないため、私が以前開発した時にはDoJa5.0の端末を対象に開発を行いました。
今回の話も主にDoJa5.0を対象にしています。
iアプリDX
iアプリDX(トラステッドiアプリ)とは普通のいくつかの制限のかかっている機能を使うことのできるiアプリのことです。主にセキュリティ上問題がありそうな機能を制限しています。iモード公式サイト契約を結ぶことで開発することができます。
iアプリDXだと以下のような機能を使うことができます。
- アドレス帳や着信履歴などへのアクセス
- Felicaへのアクセス
- GPS
- Bluetooth
- アプリダウンロード元以外へのアクセス
- OpenGL ES
- iアプリオンライン(TCP/UDP)
公式サイトの審査は結構厳しいらしいので、個人の開発者がこれらの機能を使ったiアプリを提供することは難しいです。
iPhoneアプリとiアプリを比較
開発環境
iPhoneアプリはObjective-CというCにオブジェクト指向の拡張を加えた言語を使って開発をします。Objective-Cは Smalltalkの影響を受けていると言われています。Cの拡張なのでフレームワークを使わない部分をC/C++として書くこともできます。iPhone SDKはMac用しか提供されていないので、開発するOSはMacに限定されます。
iアプリはJavaを使って開発します。iアプリ用のJavaはCLDCの仕様上にあるクラス+独自拡張クラスからなっています。DoJaの開発ツールがWindows向けにしか提供されてないので、開発するOSはWindowsに限定されます。
通信
iPhoneアプリはCFNetworkフレームワークを使えばHTTPやTCP/UDPを簡単に扱うことができます。Safari(すなわちUIWebView)には1リソースあたりのサイズの制限があります。(参考:Safari Dev Center: Safari Web Content Guide: Creating Compatible Web Content)
iアプリは基本的にHTTP通信しか行うことができず、1度に送受信可能なサイズに上りは80KB、下り150KBの上限があります。上限を超えると以降のバイトデータは強制的に途切れます。同一ドメインへのアクセスしかできない、同時に1つのコネクションしか持てないという制限もあります。StarプロファイルでiアプリDXであればTCP/UDPを使うことができます。
GPS
iPhoneアプリはCoreLocationフレームワークを使うことでGPSから座標を取得することができます。
iアプリでは前述した通り、GPSはiアプリDXでしか使えません。
カメラ
iPhoneアプリはUIImagePickerControllerを使えばカメラを使ったアプリケーションを作ることができます。
iアプリはCameraクラスを利用すればカメラを使うことができますが、ネイティブのカメラを起動して撮影した結果をアプリケーション側に渡すだけなので、カメラに重ねて何かを表示するといったことはできません。
Web連携
iPhoneアプリはアプリケーションからSafariを起動する方法と、アプリ内でWebKitを利用するためのUIWebViewを使ってWebページを表示する方法の2つがあります。ブラウザからもアプリケーションを起動することができます。 iアプリはアプケーションからブラウザを起動する方法しかWeb連携する方法がありません。ブラウザからアプリケーションを起動できます。
3D
iPhoneはOpenGL ESを使うことができるので、本格的に3Dプログラミングを行うことができます。自前で0から実装するのは結構骨が折れるので、SIO2やUnityのような3Dゲームエンジンを使うことも少なくないと思います。
iアプリもDoJa5.0からOpenGL ESをオプションでサポートしていますが、iアプリDXでなければ利用できません。そのかわりDoJa4.0以降ではMascotCapsuleという3Dエンジンを使うことができます。 (参考:MascotCapsule Developer Network -Samples)
アプリの公開
iPhoneアプリはAppStore経由でアプリを公開することになります。課金の仕組みをこちらが用意する必要がないなどのメリットも多いですが、Appleの審査に通らなければ公開できないため若干難易度が高いです。
iアプリはiアプリDXの場合は公式サイトになる必要がありますが、そうでなければWebページを用意するだけで簡単に公開することができます。
| iPhoneアプリ | iアプリ | |
|---|---|---|
| 開発環境 | Mac, Objective-C | Windows, Java |
| 通信 | 特に制限なし | HTTP通信、TCP/UDP(Star・iアプリDXのみ)、同一ドメイン・1コネクション、上り80KB・下り150KB |
| GPS | ○ | △(iアプリDXのみ) |
| カメラ | ○ | △(ネイティブカメラの起動) |
| Web連携 | ブラウザ、UIWebView | ブラウザ |
| 3D | OpenGL ES | OpenGL ES(iアプリDXのみ)、MascotCapsule |
| アプリの公開 | AppStore | 公式サイト、勝手サイト |
終わりに
高レベルのUI関係のフレームワークと開発できる幅の広さがiPhoneアプリ開発に人気が集まる一つの要因だと思います。セキュリティ上の問題から公式契約を結ばなければ使えない機能が多いですが、iアプリもiPhoneと同様の機能を結構持っています。機密性と可用性はトレードオフなので、こうした情報を扱うことに対するユーザからの信頼を得ることが今後iPhoneアプリを提供する上で重要になってくるのではないかと思います。
iアプリの開発で大変な点は端末の種類が多様なことです。iPhoneアプリもiPadや次世代iPhoneが登場して種類が増えた時に同様の問題にぶつかるかもしれません。
次回はコーディングの話を書こうと思います。

