インフィニティソリューションズ株式会社ブログ

モバイルのクロス・プラットフォーム対応のヒント

モバイル・プラットフォームの主流としては、iOS、Android、そしてWindows。米国ではこれに、まだ完全には無視できない存在のResearch In Motion(RIM)がある。これらの複数のプラットフォームに対応しようとすると、それぞれ個別に対応するか、サードパーティ製のツールを使って、1つのアプリで複数対応するか、どちらかの選択をすることになる。個別対応の場合、プラットフォームによって言語や開発環境も異なってくるため、相当な労力が必要。1つのアプリで対応する方が当然開発が楽になることが期待できるが、各プラットフォーム固有の使い勝手を実現できないかもしれない。そこで、InformationWeekのBen Dupont氏がApple、Google、Microsoft、Research In Motion、クロスプラットフォーム・ツールとしてAirとPhoneGapを調査しているのでそちらを紹介しょう。

Tips For Writing Multiplatform Mobile Apps(マルチプラットフォームのモバイルアプリを開発するヒント)

もっとも、この記事はモバイルアプリ開発の関するサプリメント7月号の概要のみを記載しており、サプリメント自体は登録しないとダウンロード不可となっている。本稿ではサプリメントも参照する。

著者Ben Dupont氏がテストした環境は以下の通り。

  • Motorola Droid running Android 2.3.5
  • Apple  iPhone version 4.2.1
  • Windows Phone version 7.5
  • Research In Motion BlackBerry Bold version 7
  • Research In Motion BlackBerry Play-Book version 1

ちょっとBlackBerryに偏ってはいるが。

Google、Apple、Microsoft、Research In Motionの4社とも、もちろん個別に開発環境を持っている。クロスプラットフォームのツールはというと、

‘Instead of accessing the app from a Web server, the Web files (HTML/JavaScript/CSS) are packaged for the
device and executed in a browser container on the device. A number of third-party tools such as PhoneGap take advantage of this feature by creating a common JavaScript API with platform-specific code underneath, giving programmers access to multiple platforms with a single code base.’

「ウェブサーバのアプリアクセスする代わりに、ウェブファイル(HTMP/JavaScrpit/CSS)をデバイス用のパッケージ化し、デバイスのブラウザコンテナの中で実行されるようにする。PhoneGap等、数多くのサードパーティ製ツールがこの機能を活用し、共通のJavaScript APIながら、プラットフォーム個別のコードを裏側に持たせ、開発者が単一のコードで複数のプラットフォームにアクセスできるようにしている。」

では1つづつ見てみよう。

モバイルアプリ開発環境のOS対応状況(出典:InformationWeek)

Android

言語はJava、開発環境はEclipseとなる。Android開発にはAndroidソフトウェア開発キット(SDK)とEclipse用のAndroid Development Toolsプラグインが必要となる。SDK自体は他の環境でも動作可能だが、GoogleはEclipseを推奨している。

またAndroidネイティブ開発キット(NDK)を使えばC/C++を選択することも可能。NDKはSDKとセットで使用する。NDKで共有ライブラリをts栗、Javaネイティブインタフェースを使ってコードを実行することになる。

‘While the NDK can be used to improve performance, Android documentation warns that using it may not improve performance, but it will always increase complexity because you’ll have to manage your own memory. It also will be harder to debug the code.’

「NDKはパフォーマンス改善に用いることができるが、Androidのドキュメントによれば、必ずしもパフォーマンス改善に至るとは限らず、その一方、メモリ管理を行わねばならなくなるため、確実に複雑度が増す。またコードのデバッグがより難しくなる。」

ちなみに、開発環境のOSは、Windows、Mac、Linuxに対応。

— とは言え、ゲームメーカなどパフォーマンスが重要なアプリでは、NDKを使わざるを得なくなり、苦労することになる。

Apple

XcodeがiOS、Mac、Safariで動作するアプリ開発用のIDE。これ自体は無料。言語はObjective-C。

‘If you’ve never used this language, you may find the syntax to be bizarre, so prepare to do some homework.’

「この言語を使ったことが無ければ、構文が奇妙だと思うかもしれない。なので、予め予習しておく必要がある。」

‘Apple also limits the number of test devices to 100 per year per account. Adding a test device and later removing it still counts as one.’

「Appleはテストデバイスの数を1アカウントあたり年間100までと制限している。テストデバイスを追加して後で削除しても1つとカウントされる。」

Microsoft

Windows Phone用の開発ツールは数多くあれど、どれもWindows 7かVistaのみ対応。現時点では、Windows 8用開発にはVisual Basic 11(ベータ版)が必要。

‘Development is done in Visual Studio with a combination of Silverlight/XAML, C# and VB.NET, HTML/JavaScript, and Expression Blend. Free tools are available for personal use; professional developers are required to have a Visual Studio license.’

「開発はVisual Studioに、Silverlight/XAML、C#、VB.NET、HTML/JavaScript、Expression Blendを組み合わせて行う。個人利用ならツールは無料だが、企業利用にはVisual Studioのライセンスが必要。」

BlackBerry

もともと開発言語はJavaであったのだが、

‘The next generation, version 10, is based on a Unix-like OS called QNX. The new operating system is microkernel-based and has been used in a variety of places, including cars, network switches, and nuclear power plants. BlackBerry 10 will run on phones and PlayBooks (RIM’s tablet) and is
due out in the second half of the year.’

「次世代のバージョン10は、UnixのようなOS、QNXをベースとする。新しいOSは、マイクロカーネルベースのもので、車、ネットワークスイッチ、原子力発電所など様々な場所で使われているもの。BlackBerry 10はスマートフォンおよびPlayBook(タブレット)で動作し、今年後期にリリース予定。」

これにともなって、言語もC/C++で、Momenticsと呼ぶEclipseベースのIDEが用意されている。HTMLアプリ用には別にRippleと呼ぶSDKが用意されている。

Android向けにはEclipse用プラグインでリパッケージすることによりBlackBerryでも動作するようになるらしいが、コード修正無く動作するのは55%から75%と、なにやら怪しい。むろんGoogle独自APIや、Javaネイティブ拡張、Bluetooth、カメラなどはサポートされない。

Air

AdobeのAirはFlashにかなり似たものだが、Flashはブラウザ拡張として動作し、Airはブラウザなしで動作する。むろんFlashはファイルシステム等へのアクセスが不可だが、AirならOK。Airを実行するにはランタイムが必要なのだが、

‘Because of Apple restrictions, every iOS Flash program must ship with the runtime built in; it can’t be installed separately.

「Appleの制約のため、iOS向けのFlashプログラムはすべて、ラインタイムを組み込んだ形で提供する必要があり、ランタイムだけを個別にインストールできない。」

Androidなら組み込んでも組み込まなくてもOK。組み込まれておらず、ランタイムが存在しない場合には、自動的にダウンロードされる。ただし、現時点ではWindows Phoneは未対応(対応予定ではあるが)。

PhoneGap

これもAdobeのもの。昨年Adobeが買収したNitobi社によって開発されたもので、HTML5、CSS3、JavaScriptを使ってアプリを開発することになる。先に述べた通り、JavaScript APIが個別プラットフォーム間の差異を覆い隠してくれる。

iOS、Android、Windows PhoneのIDEとPhoneGapは統合可能だが、BlackBerryのC/C++ IDEとは合わない。BlackBerryならRippleを使うことになる。

クロスプラットフォーム・ツールを使う場合、の問題点は、

‘writing for the least common denominator (also known as write once, run everywhere) can take away from the user experience. In Forta’s words, such an app can “result in a user experience that’s non-native or counterintuitive.” For example, iPhone apps
commonly have an on-screen “back button” while Android devices are required to have a back button on the physical device.’

「最小公倍数(Write once, run everywhereとしても知られている)向けに書くと、ユーザエクスペリエンスの面ではダメだ。Adobeのデベロッパ・リレーションズのディレクターBen Forta氏の言葉を借りれば、そのようなアプリは『ネイティブっぽくない、あるいは直感的ではないユーザエクスペリエンスになってしまう』。例えば、iPhoneアプリでは、画面上に『戻るボタン』があるのが普通だが、Androidデバイスでは、物理デバイス上に戻るボタンがあるのが前提だ。」

その他にwikipediaに多数のクロスプラットフォームが掲載されている。