PhoneGap Day US 2012にて、待望のPhoneGap 2.0.0がリリースされました。本連載では、PhoneGap 2.0.0の変更点をはじめとして、新機能の紹介やFile APIを使ったアプリケーションの開発方法について紹介していきます。どうぞお楽しみください。
PhoneGap/Cordovaとは
PhoneGapはAdobeが開発、公開しているクロスプラットフォーム・モバイルアプリケーションの開発フレームワークです。詳細については、前回の連載の記事をご参照ください。
もともとPhoneGapはNitobi社が開発・公開していましたが、2011年10月2日(米国時間)にAdobe社がPhoneGapの開発元であるNitobi社を買収したと発表しました。PhoneGapは開発体制や配布方法が変更され、Apacheに寄贈され、現在にいたります。
PhoneGapはAdobeの商標となり、PhoneGapという名称はAdobe以外使用できなくなりました。Apacheに寄贈されたソースコードは、Apache Callbackプロジェクトとなり、その後名称が変更されてApache Cordovaプロジェクトとなります。現在、PhoneGapはCordovaのディストリビューションの1つとして公開されています。
PhoneGap 2.0.0の変更点
PhoneGap 2.0.0のおもな変更点は次のとおりです。
- Xcodeテンプレートを使用しないように(iOS)
- 専用のコマンドラインツールを使用してXcodeプロジェクトを作成するように(iOS)
- コマンドラインからプロジェクトのビルド、エミュレータ起動、各種ロギングがおこなえるように(iOS, Android, BlackBerry)
- サポートするiOSバージョンが4.2以上に。iOS 3はサポート対象外となる(iOS)
- 必要動作環境のOSがLion (10.7)およびMountain Lion (10.8)のみに。Snow Leopard(10.6)はサポート対象外となる(iOS)
- Cordova WebViewサポート(iOS)
- Cordovajs導入、プラットフォーム間で統一したJavaScriptをサポート
- WeinreをNode Package Managerに移行
- Windows Phone正式対応
以下、それぞれの点について解説します。
Xcodeテンプレートを使用しないように(iOS)
PhoneGap 2.0.0以前では、iOSアプリケーションを開発する際、Xcodeでプロジェクト作成時に「Cordova-based Application」と呼ばれるXcodeテンプレートを使用していました。
PhoneGap 2.0.0では、このXcodeテンプレートが廃止され、あらたに専用のコマンドラインツールを使用してXcodeプロジェクトを作成するようになりました。
専用のコマンドラインツールを使用してXcodeプロジェクトを作成するように(iOS)
PhoneGap 2.0.0では、専用のコマンドラインツールを使用してXcodeプロジェクトを作成します。このコマンド群はインストーラでは配置されませんので、DMGファイルをマウントし、手動にてbinディレクトリをローカルハードディスクにコピーする必要があります。
新規プロジェクトを作成するには、ターミナル上で次のコマンドを実行します。
新規プロジェクトの作成方法~Hello, World!の手順は、第2回で詳しく取りあげたいと思います。
Xcodeテンプレートを廃止するに至った理由について、Cordovaの主要開発者の一人、Shazron Abdullah氏のブログ - Shazron's Cordova (aka PhoneGap) Blogにて、Xcode 4のテンプレートを使うことにより、ユーザエクスペリエンスに限界が生じていたことが述べられています。
However, because of Xcode 4′s template limitations, this resulted in a poor user experience when first creating a new Cordova-based Application.
PhoneGap 1.9.0以前では、ビルドを実行してはじめてwwwディレクトリが作成されます。作成したwwwディレクトリをFinderで開き、ドラッグ&ドロップでXcodeプロジェクトと関連付けをおこない、開発を開始します。この一連の手順があるために、特定の環境下による不具合の切り分けや、Cordovaライブラリ自体のデバッグを困難にしていました。
これらの問題を改善すべく、PhoneGap 2.0.0ではXcode 4のテンプレートを廃止し、専用のコマンドラインツールを使ってXcodeプロジェクトを作成するように方針を変更しました。
コマンドラインからプロジェクトのビルド、エミュレータ起動、各種ロギングがおこなえるように(iOS, Android, BlackBerry)
コマンドラインからプロジェクトのビルド、エミュレータを起動できるようになりました。また、各種ロギングもコマンドでおこなえます。
たとえばiOSの場合、ターミナル上でプロジェクトの作成からエミュレータを起動して動作を確認するまで、すべてターミナルで操作することが可能になります。
- createコマンドでXcodeプロジェクトを作成
- vim, emacsなどのエディタでアプリケーションを作成
- プロジェクトディレクトリに用意されているdebugコマンドでビルド
- 自動的にiOSシミュレータが起動する
使用するにあたり、各OSごとに準備が必要になります。たとえばiOSの場合、事前にios-simが必要になります。
サポートするiOSバージョンが4.2以上に。iOS 3はサポート対象外となる(iOS)
iOS 4以降ではブロック構文(クロージャ)をサポートしています。Cordovaで提供される、APIを含むすべての機能はプラグインという形で提供されています。
サポートするiOSバージョンを4.2以上に引き上げることで、Cordovaを利用する開発者は、プラグインの作成時にブロック構文を含めることができるようになりました。
またiOS 4.2以降では、WebSocketsや加速度センサやジャイロスコープへアクセスするためのAPIが標準でサポートされています(参考: Safari on iPhone & iPad 4.2: Accelerometer, WebSockets & better HTML5 support)。Cordova APIでは、プラットフォームとなるOSがネイティブでその機能をサポートしている場合、Cordovaの機能を使わずにOS標準の機能を利用する仕組みとなっています。
これらの経緯について詳しく知りたい方は、JIRAの該当チケットをご参照ください。
なお、iOS 3系で動作するアプリケーションをPhoneGapで開発したい場合は、PhoneGap 1.9.0以前のバージョンを利用する必要があります。注意点として、PhoneGap 1.9.0にはiOS 5.1以上でないとSymbol not found: _NSURLIsExcludedFromBackupKeyが発生してアプリケーションが起動しないバグがあります。
PhoneGap 1.9.0でSymbol not foundエラーが発生する場合、次の手順でフィックスします。
- ~/Documents/CordovaLib/Classes/CDVFile.mを開き、29行目に extern NSString * const NSURLIsExcludedFromBackupKey __attribute__((weak_import)); を追加
- Xcodeで該当プロジェクトの Targets → Build Phases → Link Binary with Librariesを開き、「CoreFoundation.framework」を追加。RequiredをOptionalに変更する
必要動作環境のOSがLion(10.7)およびMountain Lion(10.8)のみに。Snow Leopard(10.6)はサポート対象外となる(iOS)
今秋にリリースが予定されているiOS 6 SDKでは、Snow Leopard(10.6)がサポートから外れると予想され、PhoneGap 2.0.0ではこれに先駆けて必要動作環境をLion(10.7)以降に絞りました。PhoneGap 2.0.0は現在、Lion (10.7)およびMountain Lion(10.8)上のXcode 4でのみ動作します。
Cordova WebViewサポート(iOS)
Cordova WebViewはCordova 1.4.0に導入された、ネイティブのWebViewを拡張するコンポーネントです。このコンポーネントは「Cleaver」と名付けられています。
このCordova WebView(Cleaver)を、ほかのiOSネイティブアプリケーションで利用することができるようになりました。Cordova 2.0.0をインストールしてXcode上でサブプロジェクトとしてCleaverを追加し、関連付けの操作をおこないます。
なお、Android向けのCordova WebViewはCordova 1.9.0にてサポートされました。
Cordovajs導入、プラットフォーム間で統一したJavaScriptをサポート
プラットフォーム間で統一したJavaScriptをサポートし、パフォーマンス面やセキュリティ、APIの対称性が改善しています。
WeinreをNode Package Managerに移行
Weinre(WEb INspector REmote)は、スマートフォンデバイス上で表示しているHTMLのデバッグや、DOMインスペクタをリモートマシンで実現するためのオープンソースソフトウェアです。
Weinreはnodejsに移行され、Node Package Manager(NPM)から簡単にインストールできるようになりました。関連して、GitHub下にあった該当リポジトリ(http://phonegap.github.com/weinre/)は現在404となっています。
Windows Phone正式対応
PhoneGap 2.0.0を持って、Windows Phone 7がCordova APIで提供されるすべての機能を利用できるようになりました。
PhoneGapのJavaScriptパフォーマンス測定(iOS)
iOS向けアプリ開発者にとって気になるのは、やはりJavaScriptの動作速度でしょうか。PhoneGapで開発したアプリケーションはUIWebView経由で描画されます。
UIWebViewではセキュリティの理由により、Just-in-Time(JIT)コンパイラが利用できません。このためNitroエンジンの恩恵を受けることができず、実行速度がMobile Safariより落ちてしまいます。
ベンチマークを取り、比較してみましょう。動作環境は次のとおりです。
実行結果は次のとおりです。SunSpider JavaScript Benchmarkは値が小さいほど、V8 Benchmark Suiteは値が大きいほど高い性能であることを示します。
動作環境 |
SunSpider JavaScript Benchmark [ms] |
V8 Benchmark Suite [score] |
Mobile Safari |
1806.6 |
449 |
PhoneGap 1.2.0 |
7212.8 |
109 |
PhoneGap 2.0.0 |
7207.6 |
110 |
上記はCordova APIの性能ではなく、JavaScript実行速度のベンチマークであることにご注意ください。PhoneGap 2.0.0でもUIWebViewを利用する以上、Nitroの恩恵を受けることができていないことがわかりました。
マルチプラットフォームなスマートフォン向けアプリケーションを高速に展開したい、と考えているユーザはPhoneGapを。高速動作を要求される場合は、現時点ではネイティブのアプリケーションを開発した方が良いでしょう。
次回は、iOS向けのプロジェクト作成方法がどのように変わったかを紹介します。乞うご期待ください!