PhoneGapを使ったモバイルアプリのネイティブ化は、銀の弾丸ではない
jQuery MobileやSencha Touchなど、Web技術でモバイルアプリケーションを開発するためのHTML5/JavaScriptフレームワークが普及し始めています。と、同時にそうしたアプリケーションをラップし、AppStoreなどで販売できるようなネイティブアプリケーション化する「PhoneGap」(オープンソースのプロジェクトはCordova)なども注目されつつあります。
しかしこうしたアプリケーション、これを「Shell App」と呼ぶそうですが、このShell Appには期待しすぎないほうがいい、と警告する次の2本の記事が話題になっています。
どちらもHTML5-Developers-jpのメーリングリストで取り上げられていました。
Shell Appsに対する警告
1つ目の記事「Shell Apps and Silver Bullets」は、ストレートにShell Appsに対して警告を発する記事です。
1つ目の警告は、HTML5/JavaScriptの開発は最初は簡単だけれども、機能が増えるに従って複雑さが増していくため、一定以上の規模の開発ならば最初からObjective-CやJavaなどでネイティブ開発した方がいい、というものです。
At first things are easy. For simple screens, using a webview might be faster than writing a native implementation. As you add functionality to the webview, the complexity increases until you give up and write everything native.
最初はとても簡単だ。シンプルな画面で、WebViewを使うのはネイティブに実装するより早い。しかしWebViewに機能を追加して行くにつれて複雑性は増していく、それは開発を途中であきらめてネイティブ開発に切り替えるまで続く。
2つ目の警告は、フレームワークを使う限り、フレームワークの提供する機能しか利用できない、ということ。
If the native platform introduces a new API, or you run into an edge case that requires extending the shell framework, it could be months before you can implement your own app’s functionality.
もしもネイティブなプラットフォームが新しいAPIを提供したら、あるいは(PhoneGapのような)フレームワークの拡張が必要になるようなケースに遭遇したら、望みの機能を利用できるようになるまでには数カ月かかるかもしれない。
このほか、ブラウザ互換の問題、アプリのバージョンアップの問題、操作性の問題などが指摘されています。
そもそも誰も「銀の弾丸」などと言っていない
2つ目の記事「Responding to "Shell Apps" Anti-PhoneGap Article | DZone」は、上記の記事に対する意見として書かれています。
冒頭で「PhoneGapが銀の弾丸と言っている人なんて誰もいないのでは?」と、上記の筆者をいさめています。
I have never seen it stated anywhere that PhoneGap is a “Silver Bullet” that will solve every problem for every application developer.
PhoneGapが“銀の弾丸”で、どんなデベロッパーのどんな問題も解決する、などと言っている人に会ったこともない。
そして「複雑性の増大」については、ネイティブ実装でも複雑に書いてしまうプログラマは結局複雑にしてしまうものだ、と。
1. You can write a “bad” or overly-complex application in any langauge. Native development is not a silver bullet that prevents you from building “Bad” apps.
1. デキの悪い、あるいは複雑なアプリケーションはどんな言語でも書けてしまう。ネイティブ実装はそうしたデキの悪さを防ぐ“銀の弾丸”ではない。
2. Native applications can also be extremely complicated – they are not inherently more simple.
2. ネイティブ実装であっても恐ろしく複雑な記述はできる。それらが本質的によりシンプルなものというわけではない。
フレームワークの課題については、そもそもPhoneGapの目的はすべてのネイティブなAPIを提供するものではないのだ、と一蹴しています。
The goal of PhoneGap is not to recreate & mirror every native API on every platform. Rather, to provide a consistent API for building your applications across multiple platforms, using familiar web development skills, and to push the web forward.
PhoneGapはどのプラットフォームに対してもネイティブAPIの全部を再創造、複製することが目的ではない。むしろ、複数のプラットフォームに対応したアプリケーションを、Web開発のスキルによって開発し、Webを前進させていくための、一貫したAPIを提供することを目的としている。
技術を見極めて使う
2つの記事を並べて読むと、後者の主張の方に分があるように思います。結局必要なことは、目的にあった技術を選んでいるかどうか、です。その技術、ここではPhoneGapがどのような技術であるかを理解し、それにあった使い方をすべきである、という当たり前のことですね。
これはWeb技術やPhoneGapに限った話ではありません。しかしこういう話題がこの分野で行われるようになったことが、モバイルアプリケーションとWebアプリケーションの普及を示すことなのかもしれません。