clock2015.04.22 09:12
SERVICE
home

クロスプラットフォームアプリ開発の落とし穴|スマホアプリ開発を考える(第3回)

AUTHOR :   ギックス

クロスプラットフォームも万能ではない!知られざる落とし穴を解説。

前回は、Webアプリ開発者をスキルチェンジさせて、健全な開発方法として、クロスプラットフォームを紹介しました。今回は、私が開発者として経験した、クロスプラットフォームのデメリットを中心に記載しようと思います。

クロスプラットフォームのメリット

前回、クロスプラットフォームについて、簡単にメリットに付いて記載しましたが、アプリの構造を理解を深めて頂くために、図解しながら、より詳細に説明します。sumaho_cross_platform

開発の分業化

上図で分かる通り、ブラウザパーツ(HTML+JavaScript)とネイティブ(iOSはXcode、AndroidはJava)のデータのやり取りは、JavaScriptの関数によって行われるため、双方の開発処理の分担とJavaScript関数のインターフェースが設計できれば、プログラムとして完全に分けることができます。また、双方に固定値を返すテスト代用の関数(スタブ)を用意することで、ブラウザパーツ側の表示試験、ネイティブ側の処理試験を独立して行えるため、試験の効率も上がります。

必須スキルはHTMLとJavaScriptだけ

ネイティブの処理をPhoneGapやCordovaなどのフレームワークに任せた場合、既にネイティブ側の処理を行うJavaScriptは用意されていますので、ネイティブの開発スキルがなくとも開発が行えます。この場合、スマホアプリに必要なスキルは、ブラウザパーツで表示するHTMLとJavaScriptのスキルだけになります。

初期開発にはスマホは必要ありません。ブラウザパーツで表示する画面の大まかなレイアウトや、JavaScriptの開発を行う場合、パソコンのGoogle Chromeなどのブラウザには、プログラムの検証と機種別のスマホでの表示イメージを検証できる機能が付属していますので、開発初期からスマホの小さい画面でHTMLの開発の必要がなく、JavaScriptもブラウザで検証(デバック)が行えますので、障害の発見が早くなります。なお、Google Chromeでスマホの画面表示にする方法は、「右上のメニュー → その他のツール → ディベロッパーツール」を選択し、表示されたHTMLソースコードの画面の左上のスマホマークをクリックしてください。sumaho_chrome1sumaho_chrome2

クロスプラットフォームのデメリット

ブラウザパーツとネイティブは非同期

クロスプラットフォームのスマホアプリのブラウザパーツとネイティブは、非同期で処理を行っています。非同期処理とは、関数などを使用した後、処理結果が返ってくるのを待たず、次の処理を行う処理です。非同期処理をそのままスマホアプリにした場合、ブラウザパーツのボタン処理が、ネイティブ側で処理を通って、遅れて画面に反映されるため、利用者は、処理中に気づかず何度もボタン連打し、アプリが異常処理する可能性があります。

非同期処理を同期処理にするためには、ブラウザパーツは、JavaScriptでネイティブの処理結果が返ってくるまで待つ処理が必要になり、また、ネイティブ処理は、ブラウザパーツに表示変更処理を依頼してから、定期的にブラウザパーツの状況を確認して、ブラウザパーツの表示完了を待つ必要があります。そのため、Webアプリの開発に比べて、高いJavaScriptのスキルが必要になります。sumaho_cross_platform2

ブラウザ表示は遅い

ブラウザパーツで表示するHTMLは、スマホの標準ブラウザと同じ方法で処理をしています。そのため、複雑なHTMLの表示には、それに比例した時間が掛かります。また、ボタン処理などを行うJavaScriptも、ネイティブの処理と比較して遅いです。簡単なスマホアプリでは問題ありませんが、画面の表示切替をスムーズに行いたい場合は、ブラウザパーツで画面を表示する方法は使えません。

PhoneGap/Cordovaは万能ではない

PhoneGapとCordovaは、フレームワーク本体にスマホ機能を使うための多くの関数が用意されています。また、フレームワーク関数の他に、有志によって関数が頻繁に開発され、インターネットから最新版が入手可能です。しかし、これらの有志によって提供される関数には、フレームワーク本体や他の有志によって開発された関数との相性が合わないことや、デグレードを起こすことも稀にあります。

フレームワーク自体は、大変多くのスマホ機種に対応していますが、多くの機種に対応させるために、内部で複雑な処理を行っている場合があります。そのため、フレームワークを使用しない場合より、処理が遅くなる機能もありますし、最悪、古い機種になると動かなくなる場合もあります。

PhoneGapとCordovaは、ネイティブの開発スキルがない状態でも開発自体は可能ですが、スマホアプリの実行ファイルを作成(コンパイル)するスキルは最低限必要です。また、iOSの実行ファイルを作成する場合は、MacBookなどのMac OSが入っているパソコンが必要です。

クロスプラットフォームの開発提案は難しい

クロスプラットフォームは、確かにスマホアプリを短期間に低予算で開発するための選択肢の一つとしてありますが、クロスプラットフォームを選択した時点で、様々な制約事項が発生します。開発依頼者であるお客様の多くは、開発内部の細かい仕様まで知らないため、クロスプラットフォームの開発提案をした場合でも、洗練されたスマホアプリが短期間に完成すると思ってしまいます。後から「クロスプラットフォームの仕様ですから仕方ありません」と言っても納得して頂けません。

クロスプラットフォーム開発を導入する前に、お客様にメリットとデメリットを説明し、お客様と開発者双方が、期間と開発費からアプリの妥協点を決めなくてはいけません。次回は、今まで紹介してきたスマホアプリ開発手法が、どのようなスマホアプリ開発案件に最適かをまとめようと思います。

【以下連載記事】
1. スマホを取り巻く環境を見てみよう
2. 既存のスキルを使い健全な開発を目指す
3. クロスプラットフォームアプリ開発の落とし穴
4. クロスプラットフォームのすみわけ

SERVICE