2014年11月20日木曜日

[Apple Watch] WatchKit AppがどれだけAndroid Wear Appと違うか。

 どうもどうも。

 WatchKitが公開されましたね。
 私はiOSアプリの開発は昔にちょっと遊んだ程度なんですが、最近Android Wearについてはわりと調べてるので、WatchKit AppとAndroid Wear Appのアーキテクチャを比較しつつApple Watchの将来を占いたいと思います。

TL; DR

  結論からいきますと、

  • Apple Watchではビューのみが動き、ロジックはiPhoneで動く。
  • 対するAndroid Wearでは、Androidアプリとほぼ同じコードがガッツリ動く。

 ということです。
 つまり、スマホ本体を置き忘れたことを時計が感知して知らせる、というようなアプリは、Android Wearならたくさん転がってますがWatchKit Appでは不可能っぽい。

WatchKit AppはiPhone上で動く

 な・・・何を言ってるかわからねーと思うが(略)という感じですが事実なんです。

 Apple Watchでアプリを動かすためには、まずはiPhoneアプリが必要です。WatchKit Appは、ExtensionとしてiPhoneアプリにくっつけて配布する形になります。
 そしてiPhoneにApple Watchがつながっていると、Extensionの内容の一部がApple Watchにロードされるという仕組みのようです。
 このときApple Watchにロードされるのはビューの部分のみ。Controllerやその他のロジックはiPhoneに残って、Apple Watchからの連絡を待ちます。
 Apple Watchに表示されたビューに対してユーザがなにか操作すると、その情報が無線でiPhoneに伝えられ、Controllerが反応するというわけです。
出典:WatchKit Programming Guide
 いうなれば、Apple WatchはiPhoneの外部ディスプレイというか、シンクライアントのような動きをするわけですね。

Android Wear AppはAndroid Wear上で動く

 これはあたりまえといえばあたりまえなのですが。
 Android Wearは、Androidと連携はするのですが、アプリのアーキテクチャ的には独立というか、対等な立場なんですよね。

 そもそもAndroid Wearは、小さいナリをしてますがあれもAndroidの一亜種としてできていて、Android WearアプリはほぼAndroidアプリと同じコードで動きます。
 AndroidアプリとAndroid Wearアプリはそれぞれが独立で動く。で、必要があるときにだけOSのAPIを使ってお互いにメッセージをやりとりする。という世界観になっているわけです。

 とはいえこちらのほうも時計であまりムチャをやることは考えていなくて、ビューとしての機能+アルファは時計でやりつつ、メインの処理はAndroidの方に投げるという実装方法が推奨されています。

開発者がうれしいのはどちらか?

WatchKit App vs. Android Wear App

  できることが多いほうがうれしいに決まってんだろ!訴訟!という人はアンドロイダー向きかもしれません。
 少し書きましたが、しっかりした機能を求めるとなるとAndroid Wearの方も結局、重い処理を本体に移譲して結果を受け取るというパターンをとらざるを得なくなります。特にネットワークアクセスが必要な場合はかならずこのパターンになるので。

 そのあたりを隠蔽してしまってロジックの本筋だけ考えればいいようにしてくれるというのは、AppleっぽいというかiOSっぽい考え方だと思います。
 ただここまでスパッと割り切られると、ちょっとぐらい時計側で独立の処理が動く余地を残してくれてもよかったんじゃねえの・・・と思わないでもありません。

 あとは、このアーキテクチャの違いが電池の具合にどれだけ影響するかが見ものですね。

 また、Apple Watchには話題となった心拍センサをはじめいくらかのセンサがついているはずなのですが、そのデータをどうやって取得するのかは謎です。このアーキテクチャを見るに、iPhoneがApple Watchからデータを取ってくるような仕組みになるんですかねぇ・・・?

WatchKitの通知 vs. Android Wearの通知カード

 Android Wearのいいところの一つに、普通のAndroidの通知を出すと、それがいい感じにAndroid Wear向けの通知カードに変換されて表示されるという点があります。
出典:Android Developers
 WatchKitの仕組みで発表された通知機能のひとつ「Actionable Notification」は、動きかたは通知なのですがWatchKitで実装しないといけないのでひと手間増える感があります。iOSの普通の通知も、おそらくApple Watchにいい感じに表示されるんだろうとは思うのですが、もしそれがない場合は開発者にとってはちょっとめんどくさいですね。

雑感:超こまけぇApple Watchとユーザの器用さをなめているAndroid Wear

 アプリのアーキテクチャに関係ない話。
  Apple WatchとAndroid Wearの画面を見比べると、Apple Watchには「どんだけユーザに細かい操作を求めんだ」Android Wearには「ユーザをゴリラかなんかと勘違いしとんのか」という正反対の感想が個人的にはでてきますが、みなさまはいかがでしょうか。

で、どっちが勝つの?

アップルじゃないすかねえ〜?(鼻ほじ