GotAPI

GotAPI とは、Web 技術を使ってスマートフォンと外部デバイスの連携などを実現するフレームワークのことを指し、標準化団体 OMA (Open Mobile Alliance) にて Generic Open Terminal API Framework Version 1.0 として標準化された仕様書の名前です。
GotAPI は、本コンソーシアムが扱うテーマの中核となる技術です。ここでは、その GotAPI、そして、本コンソーシアムのテーマに関連する技術について解説します。
GotAPI のアーキテクチャー
GotAPI が実現するフレームワークの目的は、Web ブラウザー上で動作する Web アプリや、スマートフォン OS 上で動作するネイティブアプリケーションから、多種多様な外部デバイスへアクセスするためのインタフェースを統一するところにあります。
本来、外部デバイスとの連携を実現するためには、そのデバイスに合わせた連携用のソフトウェアを開発する必要があります。デバイスメーカーによっては、スマートフォンのネイティブアプリケーション向けに ソフトウェア開発キット (SDK) を提供している場合もあります。しかし、各デバイスメーカーが提供する SDK の使い方は、当然ながら統一されていません。アプリケーション開発者は、対象のデバイスごとに SDK を開発アプリに組み込む必要がありました。また、デバイスのメーカーが異なれば、たとえ同じような機能を提供するデバイスであっても、それぞれ独自のインタフェースが用意されるため、ソースコードの再利用に限界があります。
一方、Web ブラウザー上で動作する Web アプリは、そもそも、外部デバイスとの連携に限界がありました。近年、数多くの標準 API がブラウザーに実装されてきたものの、デバイス連携に必要な Bluetooth などの API の実装はあまり進んでおらず、連携できるデバイスは限定されているのが実情です。
GotAPI は、これらの課題を解決するべく、HTTP を使って、外部デバイスとの連携を中継する枠組みを提供します。
スマートフォン内部では、GotAPI Server と呼ばれる HTTP サーバーが起動されます。実際には、この GotAPI Server は OS から見るとひとつのネイティブアプリとしてインストールされるものです。GotAPI Server は、REST (Representational State Transfer) ベースの API をアプリに提供します。

各デバイスへのアクセスは、プラグインと呼ばれるソフトウェアが担います。プラグインも GotAPI Server と同様に、OS から見れば、ひとつのネイティブアプリとしてインストールされるものです。
GotAPI は、API リクエストとレスポンスを中継する GotAPI サーバーと、実際に外部デバイスと通信するソフトウェアを分離することで、柔軟にアクセス可能なデバイスを追加できるアーキテクチャーを採用しています。
GotAPI は、アプリ開発者には、デバイスとの連携を扱うアプリの開発を容易にします。そして、デバイスのメーカーには、サードパーティ製のアプリを自由に作ってもらう環境によって、その製品の利用が促進されることが期待されます。
WebAPI
前述のとおり、GotAPI がアプリに提供する API は REST ベースの API ですが、ここではそれらを総称して WebAPI と呼びます。
WebAPI は、アプリに対しては HTTP といった標準化された通信プロトコルのみで API を提供するため、OS に依存しないマルチプラットフォームの API を提供することになります。
また、WebAPI のレスポンスは、Web では一般的に使われている JSON を採用しています。とりわけ、Web ブラウザー上で動作する JavaScript ベースの Web アプリには親和性が高いといえるでしょう。

OMA GotAPI 仕様が規定している WebAPI は、アプリの認証やセキュリティー対策などの具体的な API と、実際にデバイスと連携する際に使われるデータのコンテナーを規定しています。このデータコンテナーは、アプリと GotAPI サーバーの間の通信に加え、GotAPI Server とプラグインとの間の通信も規定しています。
しかし、OMA GotAPI 仕様は、現在のところ、実際にアプリがプラグインとやりとりする具体的な WebAPI を規定していません。これが OMA GotAPI 仕様がフレームワークと呼ばれる所以です。
この具体的なプラグインの機能面の WebAPI の標準化はこれからの作業となります。OMA では、すでにヘルスケア分野を手始めに、これらの具体的な API 仕様の検討が始まっています。今後、さらなる標準化が期待されます。
プラグイン
GotAPI で、プラグインというアーキテクチャーが採用された意義について、もう少し詳しく解説しましょう。
ひとつ目の目的は、デバイスごとの通信プロトコルなどの相違を吸収するためです。スマートフォンと連携するデバイスの通信方式は多種多様です。Bluetooth、Wi-Fi といった低レイヤーの通信レイヤーだけでなく、通信手順、データコンテナー、データの値の意味など、あらゆるものが異なります。アプリ開発において、この相違は、開発コストに大きな影響を与えます。これらの違いをプラグインが吸収し、GotAPI Server に対しては、標準化されたインタフェースを使って結果を返します。アプリは、外部デバイスの通信方式の違いを意識せず、統一されたインタフェースを使って、外部デバイスと連携することが可能となります。
ふたつ目の目的は、デバイスが違っても同じ用途には同じ WebAPI を提供することです。前述のとおり、現在のところ OMA GotAPI 仕様はフレームワークが標準化されただけで、この部分については規定していません。この 統一化された WebAPI の模索および検討は、本コンソーシアムの大きなテーマのひとつとなります。
DeviceConnect

これまで解説してきた GotAPI 仕様に基づいた実装(ソフトウェア)のひとつが、DeviceConnectです。DeviceConnect は、NTTドコモ社によって開発され、GitHub でオープンソース・ソフトウェアとして MIT ライセンスで提供されています。誰でもこのソースコードの改良や機能追加などの開発に貢献することができます。また、このソースコードを使って、自由に GotAPI の仕組みを使ったアプリを開発することもできます。
DeviceConnect は、標準化を先取りして、まだ OMA GotAPI 仕様で規定されていない機能を追加しています。たとえば、GotAPI 仕様では、非同期にイベントを受信するための枠組みが規定されていません。そのため、DeviceConnect は、GotAPI Server に WebSocket サーバーとしての役割を追加し、非同期のイベント受信の枠組みも提供しています。
この DeviceConnect の取り組みの成果は、今後、OMA での標準化提案に活かされる予定です。
※ "DeviceConnect" は株式会社NTTドコモの登録商標です。
デバイスアクセスのための API
DeviceConnect は、GotAPI 仕様ではまだ規定されていない個別のデバイスアクセスのための API を数多く用意しています。近接検知、デバイスの傾きの検知、温度検知、バッテリー情報取得、バイブレーション、ライトの点灯と消灯、音楽や動画の再生制御、録画や録音や写真撮影といった API をすでに実装済みです。もちろん、ここで紹介した API は一部でしかなく、その他にも WebAPI を用意しています。また、今後、さらに数多くの WebAPI が追加されていくことでしょう。

これらの WebAPI は、同じ目的には同じ API が使えるよう考慮されています。たとえば、バッテリーの状態を取得したい場合、接続されているデバイスの種類ごとに別々の API を用意するのではなく、あらゆるデバイスに対して、統一された API が提供されることになります。今後、さまざまなデバイスのプラグインが追加されていく中で、本当に必要とされる機能を網羅した API として改良されていくことが期待されます。そして、それが今後の標準化活動にも活かされることとなります。
プラグインのラインナップ
DeviceConnect では、すでに多種多様なプラグインを用意しています。これらはすべて GitHub に公開されています。Chromecast、Android Wear、Sony SmartWatch 2、pebble、sphero、Hue、IRKit などが公開されています。

GitHub には、これらプラグインのソースコードが公開されていますので、これらのサンプルを参考に、多くのデバイスメーカーから自社製品のプラグインが提供されることが期待されます。また、デバイスの詳細な技術情報が公開されていれば、製品のファンによるプラグイン開発も期待されます。
Device WebAPI Manager
最後に、DeviceConnect の配布アプリをご紹介しましょう。ソースコードだけでは、開発者でない限り使うことができません。また、GotAPI 対応のアプリを開発したとしても、利用者のスマートフォンに GotAPI Server やプラグインがインストールされている必要があります。
Android や iOS で誰でもすぐに DeviceConnect をインストールして利用できるように配布用アプリとして用意されたのが Device WebAPI Manager です。
Device WebAPI Manager は、GClue 社が無償で提供しており、すでに Google Play および Apple App Store にて配布されていますので、誰でもすぐに試すことができます。

Device WebAPI Manager は、利用者のスマートフォンに GotAPI Server に相当する Manager や、プラグインがインストールされていない場合でも、利用者がアプリをすぐに使って頂けるよう、アプリ画面からそれらのインストールを誘導する仕組みも用意されています。