Webアプリの限界
経験豊富なwebプログラマなら、Webでは実現困難な機能を知っているでしょう。
ローカルの特定のパスに存在するファイルを自動的にアップロードしたい、
ブラウザからクローラーを起動して情報収集したい、などなど。
Webをよく知らない顧客や、技術不足のSEがそんな機能を開発しろと言い出します。
あなたは「セキュリティ上の理由から、ブラウザでそんなことは出来ない」と断ってきたことでしょう。
それ実現できます。そう、WebSocketならね。
WebSocket
WebSocketがどのようにWebアプリの限界を突破するか、説明しましょう。
WebSocketの特徴と言えば、双方向の通信が上げられます。
しかしここでは別の特徴、クロスドメインのアクセスが許可されていることに注目します。
Webアプリはブラウザ上でWebSocketチャンネルを開き、他ドメインのアプリケーションと通信が可能です。
他ドメインとは、インターネット上に限らず、ブラウザを立ち上げている自分のマシンであるローカルホストも含まれます。
つまり、Webアプリは、ユーザーのマシンに立てたWebSocketサーバーと通信できるのです。
手順
手順は次の通り。
- WebSocketサーバーを実装したネイティブアプリをユーザーが起動する
- Webアプリをブラウザで開き、ローカルホスト上のWebSocketサーバーと接続を行う。
- Webアプリからブラウザを通じて命令を送信し、ネイティブアプリを操作する。(またはネイティブアプリがWebアプリに情報を送信する)
非常にシンプルかつ自然にアプリケーション同士が統合されているのがわかるでしょう。
パラレルハイブリッドアプリ
これまでのハイブリッドアプリは、WebViewをネイティブアプリでカプセル化することによって、ネイティブ機能を提供してきました。
これらの形態を仮にサンドボックス型とします。
サンドボックス型に対し、WebアプリとネイティブアプリがWebSocketで通信し、並行して協調動作する形態は、パラレル型と言えるでしょう。
サンドボックス型の問題点は、結局サンドボックスから提供される機能以上のことは出来ない点です。
しかしパラレル型では、Webアプリ、ネイティブアプリがそれぞれの得意分野で本領を発揮し
しかもそれがHTML5既存の技術によって自然に統合されているのです。
何が作れるのか
この技術によってWebアプリの可能性は大きく広がります。
基本的にPCと繋がるデバイスは全てWebアプリで使えるようになります。
例えばカメラやマイク、カードリーダーなどとWebアプリを連携させ、新たな機能を実現することが出来るでしょう。
新規開発だけでなく、既存のクラサバアプリをWebアプリにマイグレーションする際にも有用です。
既存のアプリケーションの帳票部分を切り出し、Webアプリと連携するようにすれば
既存の帳票資産をそのまま流用できるのです。
スマートフォンアプリの開発においても、Web部分は通常のWebアプリ開発を行い
各種センサー機能だけをネイティブアプリに切り出すことが可能です。
WebUSBなんていらんかったんや!
サンプル見てみました。
アイデアは面白いですが、PCもSPもまず最初にネイティブアプリをインストール&起動しなければならない手間が実際にサービスで活用することを考えた場合に課題になるかなー、と思いました。
また、通信内容とWeb側のソース見ればある程度できることが第三者にも推測できてしまいそうなので、変なダミーページにネイティブアプリとやりとりしてるデータを悪用されないように工夫が必要、という感じでしょうか。
うまくこのあたりが解決できれば、Webとネイティブのいいとこどりなサービスが作れそうで、可能性を感じますね!