以下、図面に基づいて実施形態を説明する。
<第1実施形態における機能拡張システムの概略構成例>
図1は、第1実施形態における機能拡張システムの概略構成例を示す図である。図1に示す機能拡張システム10は、アプリサーバ11と、拡張機能プラグインサーバ12と、1又は複数の端末装置13−1〜13−n(以下、必要に応じて「端末装置13」という)とを有する。アプリサーバ11、拡張機能プラグインサーバ12、及び端末装置13は、例えばLocal Area Network(LAN)やインターネット等に代表される通信ネットワーク14によりデータの送受信が可能な状態で接続される。通信ネットワーク14は、有線でも無線でもよく、これらの組み合わせでもよい。
アプリサーバ11は、例えば端末装置13が使用するアプリ一式(例えば、アプリ(例えば、処理を実行するためのソフトウェアやプログラム、ツール等)やアプリが利用する予定の機能をリストにした機能情報リスト等)を管理する。また、アプリサーバ11は、場所等の所定の状態毎に利用可能なアプリ一式や場所等の所定の状態で利用可能な機能をリストにした機能情報リスト等を管理してもよい。アプリサーバ11は、例えば場所等の所定の状態に対応して実行できる1又は複数のアプリ(例えば、モバイルアプリ)等を有し、端末装置13からのアプリや他の情報の取得要求等に応じて、要求に対応するアプリ等を通信ネットワーク14を介して端末装置13に配信する。なお、本実施形態におけるアプリは、必ずしも一つの周辺機器15だけを利用するものではなく、複数の周辺機器15を利用して一つの役に立つアプリとなっている場合もある。例えば、ある環境中における周辺機器15の例としての「赤外線センサ」と「照明」とを用いて、人が席に着いたときに、その席の照明をONにするアプリ等であるがこれに限定されるものではない。
拡張機能プラグインサーバ12は、例えば予め設定された拡張機能プラグイン(後述する第2のプラグイン)を保管する。例えば、拡張機能プラグインサーバ12は、端末装置13が接続する1又は複数の周辺機器(例えば、センサ)15−1〜15−n(以下、必要に応じて「周辺機器15」という)に対するプラグインの機能を実現するプログラムを保管する。拡張機能プラグインサーバ12は、端末装置13からの機能の取得要求等に応じて対応する機能を通信ネットワーク14を介して端末装置13に配信する。
上述したアプリサーバ11や拡張機能プラグインサーバ12は、例えば1つのサーバ(例えば、提供サーバ等)であってもよい。また、アプリサーバ11や拡張機能プラグインサーバ12は、例えばPersonal Computer(PC)等でもよく、一以上の情報処理装置を有するクラウドコンピューティングにより構成されるクラウドサーバ等であってもよいが、これに限定されるものではない。
端末装置13は、アプリから周辺機器15を接続制御する場合に、アプリを実行する実行環境に周辺機器15の種別に関わらず共通する第1のプラグインを予め組み込み配置する。また、端末装置13は、各周辺機器15の各機器それぞれを制御するプログラムが格納された拡張機能プラグインを第2のプラグインとして、第1のプラグインを介して、アプリの実行環境に接続して配置する。
端末装置13は、拡張機能プラグイン(第2のプラグイン)を用いて周辺機器15を利用する。また、端末装置13は、配信されたアプリが使う周辺機器15を利用する上で必要な拡張機能プラグイン(第2のプラグイン)がない場合に、その必要な拡張機能プラグインをアプリサーバ11に要求して取得する。
端末装置13は、他の周辺機器15を追加する場合には、他の周辺機器15に対応する拡張機能プラグインを第1のプラグインを介して、アプリの実行環境に接続して配置する。また、端末装置13は、周辺機器15を制御する拡張機能プラグインを削除する場合には、アプリの実行環境と第1のプラグインの接続関係を維持しつつ、削除する周辺機器に対応する拡張機能プラグインを削除する。これにより、端末装置13は、アプリが周辺機器15を利用するための機能拡張を迅速に行うことができる。
例えば、端末装置13は、アプリ実行部へのライブラリの動的読み込みを行うことができないOSにおいて、スクリプトで記述されたアプリを実行するアプリ実行部に第1のプラグインを予め組み込んでおく。また、端末装置13は、例えば拡張機能を実行する拡張機能プラグインと、拡張機能プラグインのOSへのインストール状態を管理し、第1のプラグインと拡張機能プラグインとの通信を中継する拡張機能プラグイン管理部とを用いて、スクリプトに提供する機能を拡張するための複数の拡張機能の組み込みや取り外しを、アプリ実行部を実行したまま可能とする。
端末装置13は、例えばタブレット端末、スマートフォン等のモバイル端末等であるが、これに限定されるものではなく、PCやノート型PC、ゲーム機器、カメラ(撮像装置)、音楽再生装置等でもよい。
周辺機器15は、例えばマイクやプロジェクタ、スキャナ、カメラ電子ボード、携帯情報端末機能を持つ腕時計や頭部に装着するディスプレイ等のようなウェアラブル端末等であるが、これに限定されるものではない。周辺機器15は、例えば端末装置13の中の加速度センサ等であってもよい。本実施形態における周辺機器15とは、機器そのものだけでなく、例えば端末装置13に搭載されたOSが提供する機能やセンサデータを取得する機能であってもよい。端末装置13に搭載されたOSが提供する機能としては、例えばある所定の時刻にイベントを発行する機能があり、拡張機能プラグイン(第2のプラグイン)は、この機能を利用しアプリへ通知するプログラムを内蔵するが、これに限定されるものではない。また、端末装置13に搭載されたセンサデータを取得するOSの機能を周辺機器15として用いた拡張機能プラグイン(第2のプラグイン)の検知機能としては、例えば端末装置13のセンサにより歩いたり、止まったこと等を検知する機能があるが、これに限定されるものではない。ここで、検知に用いられるセンサとしては、例えば加速度センサ、地磁気センサ、ジャイロセンサ、近接センサ、照度センサ、音量センサ、温度センサ、湿度センサ、気圧センサ、赤外線センサ、歩行センサ、活動量計、埃センサ、煙センサ、ガスセンサ、放射線量計、衝撃センサ、ウィルスセンサ、塩分センサ、味覚センサ等があるが、これに限定されるものではない。
周辺機器15は、拡張機能プラグイン(第2のプラグイン)を介して、端末装置13のアプリ実行部において、アプリによる各種制御が行われる。
例えば、第1実施形態では、端末装置13の位置情報に対応して実行可能な周辺機器15の情報を取得し、取得した周辺機器の情報に基づいて、周辺機器に対応する第2のプラグインの接続制御を行う。また、第1実施形態では、位置情報だけでなく、端末装置13の位置や時刻、端末内部状態の変化、周辺の変化、及び外部からのイベント受信のうち、少なくとも1つを含む状態変化に対応して、現在の状態で実行可能な周辺機器15の情報を取得してもよい。
<第1実施形態>
次に、上述した機能拡張システム10を用いた第1実施形態について具体的に説明する。
<第1実施形態における端末装置13の機能構成例>
図1に示す端末装置13の機能構成例について図を用いて説明する。図2は、第1実施形態における端末装置の機能構成の一例を示す図である。図2に示す端末装置13は、入力部21と、出力部22と、記憶部23と、アプリ実行部24と、拡張機能プラグイン管理部25と、通信部26とを有する。
入力部21は、ユーザ等から本実施形態における機能拡張処理に関する各種設定情報等の入力等を受け付ける。なお、入力部21は、キーボードやマウス、タッチパネル等の入力インターフェースから入力された各種情報や指示の入力等を受け付けることができるが、これに限定されるものではない。
出力部22は、入力部21により入力された各種設定情報、入力された指示に対応する処理を実行した結果等を画面に表示してユーザに提示する。出力部22は、例えばディスプレイやモニタ、タッチパネル等であるが、これに限定されるものではない。
記憶部23は、本実施形態における端末装置13の処理で必要な各種情報を記憶する。記憶部23は、例えばユーザ等から入力された設定情報、アプリ、プラグイン情報、アプリサーバ11や拡張機能プラグインサーバ12と接続するためのアドレス情報や認証情報等を記憶するが、これに限定されるものではなく、実行結果や履歴情報エラー情報等を記憶してもよい。
アプリ実行部24は、記憶部23に記憶されたモバイルアプリや、アプリサーバ11からダウンロードしたり、アプリサーバ11から配信されたモバイルアプリを実行する。アプリ実行部24には、予め第1のプラグイン31が組み込まれている。アプリ実行部24は、例えばアプリが利用する拡張機能情報(機能情報リスト)を第1のプラグイン31へ渡したり、モバイルアプリに対して拡張機能共通のインターフェースを提供してもよい。
拡張機能プラグイン管理部25は、例えば各周辺機器15のそれぞれに対応する拡張機能プラグイン(第2のプラグイン)32を、第1のプラグイン31を介してアプリの実行環境に接続して配置する。また、拡張機能プラグイン管理部25は、端末装置13が制御する他の周辺機器15を追加する場合には、アプリの実行環境と第1のプラグイン31との接続関係を維持しつつ、他の周辺機器に対応する拡張機能プラグイン32を第1のプラグイン31を介してアプリの実行環境に接続して配置する。また、拡張機能プラグイン管理部25は、端末装置13が制御している周辺機器15を制御する拡張機能プラグイン32を削除する場合には、アプリの実行環境と第1のプラグイン31の接続関係を維持しつつ、削除する周辺機器15に対応する拡張機能プラグイン32を削除する。
アプリ実行部24に組み込まれた第1のプラグイン31及び拡張機能プラグイン管理部25は、周辺機器15が検出する例えば現在の場所等の所定の状態毎に、その状態で利用可能な周辺機器15を活用する機能を端末装置13内の機能と同じインターフェースでスクリプトに提供する。第1のプラグイン31及び拡張機能プラグイン管理部25は、例えば会議室A等の所定の場所毎に、その場所に付属する周辺機器15を操作する機能を端末装置13内の機能と同じインターフェースでスクリプトに提供する。第1のプラグイン31は、例えば現在の場所等の所定の状態で利用できる機能の一覧である「状態毎の機能情報リスト」を取得し、拡張機能プラグイン管理部25に渡す。例えば、端末装置13の現在の場所を状態とする場合は、「状態毎の機能情報リスト」は場所毎の機能情報リストとなる。拡張機能プラグイン管理部25は、そのリストに基づいて拡張機能プラグイン32を拡張機能プラグインサーバ12等から取得する。
また、拡張機能プラグイン32は、周辺機器15を制御するだけでなく、例えば周辺機器15から得られたセンサ情報等を処理して、「どこに近づいた」等の情報を得るプラグインであってもよい。この場合、拡張機能プラグイン32は、「ある場所にいる」等の場所の条件を満たす場合に、イベントを発行する。上述したアプリ実行部24は、そのイベントを元に、アプリサーバ11にアクセスしてアプリを取得してもよい。拡張機能プラグイン32は、センサ情報等を処理するアルゴリズムを含んだライブラリ、又は第1のプラグインと通信する独立のアプリケーションであってもよい。
通信部26は、通信ネットワーク14を介してアプリサーバ11や拡張機能プラグインサーバ12、端末装置13、他の外部装置とアクセスし、データの送受信を行う。
<端末装置13のハードウェア構成例>
次に、端末装置13のハードウェア構成例について図を用いて説明する。図3は、端末装置のハードウェア構成の一例を示す図である。図3の例において、端末装置13は、マイクロフォン(以下、「マイク」という)41と、スピーカ42と、表示部43と、操作部44と、センサ部45と、電力部46と、無線部47と、近距離通信部48と、補助記憶装置49と、主記憶装置50と、Central Processing Unit(CPU)51と、ドライブ装置52とを有し、これらはシステムバスBで相互に接続されている。
マイク41は、ユーザが発した音声や、その他の音を入力する。スピーカ42は、通話相手先の音声を出力したり、着信音等の音を出力する。マイク41及びスピーカ42は、例えば、通話機能等により通話相手と会話するとき等に用いることができるが、これに限定されるものではなく、音声による情報の入出力に用いることができる。
表示部43は、ユーザに対してOSや各種アプリケーションで設定された画面を表示する。また、表示部43は、タッチパネルディスプレイ等でもよく、その場合には表示部43は、入出力部としての機能を有する。
表示部43は、例えばLiquid Crystal Display(LCD)や有機Electro Luminescence(EL)等のディスプレイである。
操作部44は、表示部43の画面に表示された操作ボタンや端末装置13の外部に設けられた操作ボタン等である。操作ボタンは、例えば電源ボタンや音量調整ボタンでもよく、所定の順番で配列された文字入力用の操作キー等でもよい。
ユーザは、例えば表示部43の画面上で所定の操作を行ったり、上述した操作ボタンを押すことで、表示部43により画面上のタッチ位置が検出される。また、表示部43は、画面上にアプリ実行結果やコンテンツやアイコン、カーソル等を表示することができる。
センサ部45は、端末装置13のある時点又は継続的な動作を検出する。例えば、センサ部45は、端末装置13の傾き角度、加速度、方向、位置等を検出するが、これに限定されるものではない。なお、センサ部45としては、例えば傾きセンサや加速度センサ、ジャイロセンサ、Global Positioning System(GPS)、地磁気センサ、近接センサ、照度センサ、音量センサ、温度センサ、湿度センサ、気圧センサ、赤外線センサ、歩行センサ、活動量計、埃センサ、煙センサ、ガスセンサ、放射線量計、衝撃センサ、ウィルスセンサ、塩分センサ、味覚センサ等であるが、これに限定されるものではない。
電力部46は、端末装置13の各構成に対して電力を供給する。電力部46は、例えばバッテリ等の内部電源であるが、これに限定されるものではない。電力部46は、電力量を常時又は所定の時間間隔で検出し、電力量の残量等を監視することもできる。
無線部47は、例えばアンテナ等を用いて基地局からの無線信号(通信データ)を受信したり、アンテナを介して無線信号を基地局に送信する通信データの送受信部である。
近距離通信部48は、例えば赤外線通信やWi−Fi(登録商標)、Bluetooth(登録商標)等の通信手法を用いて、他の端末装置13等のコンピュータと近距離通信を行うことができる。上述した無線部47及び近距離通信部48は、他のコンピュータとのデータの送受信を可能とする通信インタフェースである。
補助記憶装置49は、例えばHard Disk Drive(HDD)やSolid State Drive(SSD)等のストレージ手段である。補助記憶装置49は、CPU51からの制御信号に基づき、本実施形態における実行プログラム(機能拡張プログラム)や、コンピュータに設けられた制御プログラム等を記憶し、必要に応じて入出力を行う。補助記憶装置49は、CPU51からの制御信号等に基づいて、記憶された各情報から必要な情報を読み出したり、書き込むことができる。
主記憶装置50は、CPU51からの指示により補助記憶装置49から読み出された実行プログラム等を格納したり、プログラム実行中に得られる各種情報等を記憶する。主記憶装置50は、例えばRead Only Memory(ROM)やRandom Access Memory(RAM)等である。
CPU51は、Operating System(OS)等の制御プログラム、及び主記憶装置50に格納されている実行プログラムに基づいて、各種演算や各ハードウェア構成部とのデータの入出力等、コンピュータ全体の処理を制御することで、出力制御における各処理を実現する。
具体的には、CPU51は、例えば操作部44等から得られるプログラムの実行指示等に基づき、補助記憶装置49にインストールされたプログラムを実行させることにより、主記憶装置50上でプログラムに対応する処理を行う。例えば、CPU51は、アプリ実行部24によるスクリプトの実行、拡張機能プラグイン管理部25によりプラグインの配置、実行、削除、通信部26によるデータの送受信等の処理を行う。CPU51における処理内容は、上述した内容に限定されるものではない。CPU51により実行された内容は、必要に応じて補助記憶装置49等に記憶される。
ドライブ装置52は、例えば記録媒体53等を着脱自在にセットすることができ、セットした記録媒体53に記録された各種情報を読み込んだり、所定の情報を記録媒体53に書き込むことができる。ドライブ装置52は、例えば媒体装填スロット等であるが、これに限定されるものではない。
記録媒体53は、上述したように実行プログラム等を格納するコンピュータで読み取り可能な記録媒体である。記録媒体53は、例えばフラッシュメモリ等の半導体メモリであってもよい。また、記録媒体53は、USBメモリ等の可搬型記録媒体であってもよいが、これに限定されるものではない。
本実施形態では、上述したコンピュータ本体のハードウェア構成に実行プログラム(例えば、機能拡張プログラム等)をインストールすることで、ハードウェア資源とソフトウェアとが協働して本実施形態における表示処理等を実現することができる。
また、上述した表示処理に対応する機能拡張プログラムは、例えば装置上で常駐している状態であってもよく、起動指示により起動させてもよい。
<第1実施形態における機能拡張処理の概要>
図4は、第1実施形態における機能拡張処理の概要を説明するための図である。図4の例では、アプリサーバ11と、拡張機能プラグインサーバ12と、端末装置13の各処理内容が概略的に示されている。
第1実施形態において、端末装置13は、アプリの一例であるモバイルアプリ61と、アプリ実行部24と、第1のプラグイン31と、拡張機能プラグイン管理部25と、拡張機能プラグイン(第2のプラグイン)32a,32bとを有する。拡張機能プラグイン32aは、例えばディスプレイによる通知機能や音声発話機能、目線検出機能等であり、Bluetooth(登録商標)等により周辺機器15−1と接続されている。また、拡張機能プラグイン32bは、動き検出機能であり、例えば加速度センサ15−2等と接続されている。
モバイルアプリ61は、例えばHTML5、Javascript等の所定のプログラミング言語を用いて開発されたアプリの一例であり、ウェブアプリ等でもよい。モバイルアプリ61は、アプリサーバ11から取得してもよく、記憶部23等に記憶されていてもよい。
アプリ実行部24は、アプリ実行環境の一例であり、上述したモバイルアプリ等を実行する。アプリ実行部24は、例えばHTML5とJavascriptプログラムを実行するWebブラウザのような仮想マシンであるが、これに限定されるものではない。
第1実施形態における機能拡張処理では、アプリ実行部24や他の機能(ソフトウェア機能)を動作させたまま、必要な拡張機能のインストールやアンインストールを可能にする。そのため、第1の実施形態では、例えばアプリ実行部24に予め1つのプラグイン(第1のプラグイン31)を組み込んでおき、モバイルアプリ61に共通のインターフェース(IF)を提供する。また、端末装置13は、拡張機能の管理機能(拡張機能プラグイン管理部25)を有し、インストール時やアンインストール時にモバイルアプリ61と各拡張機能(拡張機能プラグイン32)との通信を中継する。
例えば、拡張機能プラグイン管理部25は、アプリサーバ11から得られるモバイルアプリ61が利用する予定の状態毎の機能情報リスト62にあり、インストールされていない拡張機能を拡張機能プラグインサーバ12から取得しインストールを行う端末装置13内の機能管理を行う。
拡張機能プラグイン32は、例えば端末装置13内のセンシング機能や周辺機器15を利用するためのインターフェースの拡張を行う。また、拡張機能プラグイン32は、例えば、端末装置13内の拡張機能プラグイン管理とプログラム間通信を行う共通のインターフェースを持たせた独立アプリケーション(第2のプラグイン)である。
なお、図4の例において、拡張機能プラグインサーバ12に端末種別の項目が設けられている。これは、例えばA社製の端末装置とB社製の端末装置とにおいて、A社製の端末装置では独自のマイコンを搭載し、その中のプログラムで加速度センサデータ等を処理して歩行検知ができるが、B社製の端末装置ではマイコンがなく加速度センサデータ等を処理する端末のCPU上で動作するプログラムで歩行検知を実行する場合がある。このような場合に、拡張機能プラグインのA社版は、マイコンと通信するプログラムになり、B社の端末装置は加速度センサの値を取って処理するプログラムになる。このように、実行内容が異なるため、端末種種別毎に異なる拡張機能プラグインが予め用意され、機種に対応する拡張機能プラグインが拡張機能プラグインサーバ12から提供される。
<第1実施形態における機能拡張処理の一例を示すシーケンス>
図5は、第1実施形態における機能拡張処理(アプリ開始時)の一例を示すシーケンスである。図5の例では、モバイルアプリ61、アプリ実行部24、アプリサーバ11、第1のプラグイン31、拡張機能プラグイン管理部25、拡張機能プラグイン(第2のプラグイン)32、及び拡張機能プラグインサーバ12を用いた処理の一例を示している。
図5の例では、例えばユーザからの指示やGPS機能を用いたジオフェンシング等により、ある場所(位置)に入ったというイベントをモバイルアプリ61の切り替えトリガとしてモバイルアプリ61を開始する。ジオフェンシング機能は、拡張機能プラグイン(第2のプラグイン)32として実行され、拡張機能プラグインから第1のプラグイン31を介してイベントをアプリ実行部24に発行してもよい。なお、モバイルアプリ61の開始は、これに限定されるものではなく、例えばユーザの画面操作等の所定の動作をトリガとしてモバイルアプリ61を開始してもよい。なお、イベントは、モバイルアプリ61の開始や停止、切替だけに用いるのではなく、その情報をモバイルアプリ61に通知し、それをモバイルアプリ61が受けて利用してもよい。例えば、ユーザが入った場所に関連する情報を提示する等に利用することができる。
図5の例において、ある場所に入った場合等の状態変化情報に基づいてモバイルアプリ61の切り替えイベントがアプリ実行部24に入力される(S01)。アプリ実行部24は、実行対象のモバイルアプリ61が記憶部23にあるか否かを判断し、記憶部23にない場合にアプリサーバ11にアプリ取得要求を行う(S02)。取得要求時のパラメータとしては、場所情報(位置情報)等であるが、これに限定されるものではない。
次に、アプリ実行部24は、アプリサーバ11から場所情報に関連付けられたモバイルアプリ61一式(例えば、アプリやアプリに対応する機能情報リスト等)を受信する(S03)。なお、アプリ実行部24は、記憶部23にモバイルアプリ61が存在する場合は、アプリサーバ11にアクセスせずに記憶部23から対象のモバイルアプリ61を取得する。
次に、アプリ実行部24は、アプリIDを生成し、モバイルアプリ61一式から取り出した機能情報リストに登録して第1のプラグイン31に送信する(S04)。機能情報リストは、例えばそのモバイルアプリ61が使う拡張機能のリストを意味する。
第1のプラグイン31は、機能情報リストを拡張機能プラグイン管理部25に登録する(S05)。拡張機能プラグイン管理部25は、後述するインストール済み機能情報リストと比較し、インストールされていない機能を拡張するため、拡張機能プラグインサーバ12に取得要求を行う(S06)。取得要求時のパラメータとしては、例えば機能名、機種名、バージョン情報等があるが、これに限定されるものではない。拡張機能プラグイン管理部25は、拡張機能プラグインサーバ12から未インストール機能一式を受信する(S07)。
次に、拡張機能プラグイン管理部25は、受信した未インストール機能一式に基づいて、端末装置13内の機能プログラム(拡張機能プラグイン32)をインストールし(S08)、対応するプラグイン名(一意名)等を登録する(S09)。S09の処理では、例えばプラグイン名以外にもバージョン情報等を登録することができる。
次に、拡張機能プラグイン管理部25は、アプリ実行部24に対して準備完了通知を行う(S10)。アプリ実行部24は、拡張した機能に対応するモバイルアプリ61に処理を開始させる(S11)。
図6は、第1実施形態における機能拡張処理(アプリ実行中)の一例を示すシーケンスである。図6の例では、モバイルアプリ61、アプリ実行部24、第1のプラグイン31、拡張機能プラグイン管理部25、及び拡張機能プラグイン32を用いた処理の一例を示している。
図6の例において、モバイルアプリ61は、例えば第1のプラグイン31等に対して機能名と指示で呼び出す(S21)。例えば、機能名「歩行検出」に対して、指示「歩行開始イベント通知」等で呼び出す。第1のプラグイン31は、呼び出しIDを生成し、生成した呼び出しIDやコールバック関数(例えば、プログラム中で、呼び出し先が処理を実行して完了した時やエラーが発生した時に、呼び出し元に通知するために、予め指定しておく関数)等を保存する。
ここで、第1のプラグイン31は、拡張機能プラグイン管理部25を呼び出す(S22)。拡張機能プラグイン管理部25は、機能情報リスト62を参照して機能名からプラグイン名(一意名)を取得し、対応する端末装置13内の拡張機能プラグイン32を呼び出す(S23)。拡張機能プラグイン32は、指示に従って処理を実行し、処理の完了通知や、状態変更イベント等の発行を行う(S24)。
次に、拡張機能プラグイン管理部25は、第1のプラグイン31に出力する(S25)。第1のプラグイン31は、呼び出しIDからコールバック関数を特定し、コールバック関数を呼び出し、モバイルアプリ61にイベントが発行された旨の情報等を出力する(S26)。上述したような条件変更は、例えば場所やユーザの状況等に応じて実行するアプリを切り替える場合に必要となる。
図7は、第1実施形態における機能拡張処理(アプリ終了時)の一例を示すシーケンスである。図7の例では、アプリ実行部24、モバイルアプリ61、第1のプラグイン31、拡張機能プラグイン管理部25、及び拡張機能プラグイン32を用いた処理の一例を示している。また、図7の例では、ある場所(位置情報)から離れる(退く)場合に発生するイベントをトリガとしてモバイルアプリ61を終了する例を示しているが、モバイルアプリ61終了時の処理を行うトリガは、これに限定されるものではない。例えば、「教室Aで1時限目が開始」というような、場所と時間との組み合わせ条件をイベントとしてもよく、またセンサ情報により検出した「車で移動開始」といった場所に限らない状況によるイベントでもよい。
図7の例において、ある場所から離れたことを検知することで発生したアプリ切り替えイベントがアプリ実行部24に入力されると(S31)、モバイルアプリ61に該当アプリの停止指示を出力する(S32)。モバイルアプリ61は、指示されたアプリを停止し、停止が完了した旨の通知をアプリ実行部24に出力する(S33)。
アプリ実行部24は、停止したモバイルアプリ61に対応する機能情報リストの削除要求を第1のプラグイン31に出力する(S34)。削除要求時のパラメータとしては、例えばアプリID等があるが、これに限定されるものではない。
次に、第1のプラグイン31は、アプリ実行部24から取得した機能情報リストの削除要求を受け取ると、その内容を拡張機能プラグイン管理部25に出力する(S35)。拡張機能プラグイン管理部25は、指定アプリIDの機能情報リスト削除、残りの機能情報リスト(残リスト)とインストール済み機能情報リストとの照合を行い、不要機能の抽出を行う。不要機能とは、例えば所定時間以上使用されていない機能やバージョンが古い機能等があるが、これに限定されるものではない。
そして、拡張機能プラグイン管理部25は、端末装置13内の不要な拡張機能プラグイン32を呼び出し、その不要な拡張機能プラグイン32をアンインストールする(S36)。拡張機能プラグイン管理部25は、アンインストールされた拡張機能プラグイン32に対応する情報をインストール済み機能情報リストから削除する(S37)。なお、不要な拡張機能プラグイン32は、上述したように必ずアンインストールするのではなく、停止した状態で再度利用されるまでそのまま保存しておいてもよい。
上述した図7の例では、端末装置13が制御する周辺機器に対応する第2のプラグインを削除する場合に、アプリケーションの実行環境と第1のプラグインとの接続関係を維持しつつ、削除対象の周辺機器に対応する第2のプラグインが削除される。
<第1実施形態に適用される各種データ例>
図8は、第1実施形態に適用される各種データ例を示す図である。図8(A)は、第1のプラグイン31で管理されるデータ例を示す。図8(B)は、拡張機能プラグイン管理部25で管理されるデータ例を示す。
図8(A)に示す第1のプラグイン31のデータには、アプリID毎のモバイルアプリ61が利用する機能情報リスト62aが存在する。機能情報リスト62aの項目としては、例えば「機能」、「バージョン等条件」等があるが、これに限定されるものではない。機能は、対応するアプリIDが利用する1又は複数の機能を識別するための情報である。バージョン等条件は、その機能を利用するためのアプリのバージョン情報等の各種条件を示す情報である。
図8(B)に示す拡張機能プラグイン管理部25のデータには、端末装置13にインストールされた拡張機能プラグイン32の情報であるインストール済み機能情報リスト62bが存在する。また、第1のプラグイン31から取得した、アプリID毎の機能情報リスト62aが存在する。
例えば、アプリID=0001が「notify」機能を開始する場合に、拡張機能プラグイン管理部25で「notify」機能に対応する拡張機能プラグイン32がインストールされ、図8(B)に示すように、その拡張された「notify」機能に対応するプラグイン名(一意名)とバージョン情報等の条件がインストール済み機能情報リスト62bに登録される。これにより、アプリID=0001のアプリで、インストールされた「notify」機能が実行可能となる。
また、第1実施形態において、モバイルアプリ61終了時には、例えば図8(A)に示す第1のプラグイン31の対象のアプリに関する機能情報リスト62aが削除され、また上述した拡張機能プラグイン管理部25の対象のアプリに関する機能情報リスト62aが削除される。また、拡張機能プラグイン管理部25が保持する全ての機能情報リスト62a,62bにない機能の拡張機能プラグインがアンインストールされ、図8(B)に示すインストール済み機能情報リスト62bから削除される。図8(A),(B)に示す各データは、例えばアプリID毎に設定されているが、これに限定されるものではない。
上述したように、第1実施形態によれば、アプリ実行部24や他の機能を動作させたまま、必要な拡張機能のインストールやアンインストールを可能にする。そのため、アプリが周辺機器を利用するための機能拡張を迅速に行えるようにすることができる。
例えば、第1実施形態では、端末装置13は、実行プログラムへのライブラリの動的読み込みを行うことができないOS等において、アプリ実行部24に予め組み込む一つの第1のプラグイン31と、拡張機能を実行する拡張機能プラグイン(第2のプラグイン)32とを有する。また、端末装置13は、拡張機能プラグイン32のOSへのインストール状態を管理し、第1のプラグイン31と拡張機能プラグイン32との通信を中継する拡張機能プラグイン管理部25により、スクリプトに提供する機能を拡張するための複数の拡張機能の組み込み・取り外しを、アプリ実行部24を実行したまま可能とする。
また、第1実施形態では、端末装置13が、アプリサーバ11等の外部装置から実行するモバイルアプリ61とセットでそのモバイルアプリ61が利用する機能情報リスト62を取得する。また、モバイルアプリ61実行時に、機能情報リスト62に基づいて、拡張機能プラグイン管理部25が拡張機能プラグイン32のインストール状況を確認し、インストールされていない拡張機能プラグイン32を拡張機能プラグインサーバ12等の外部装置から取得してインストールする。また、端末装置13は、モバイルアプリ61が実行終了されたとき、対応する機能情報リスト62も拡張機能プラグイン管理部25から削除し、拡張機能プラグイン管理部25が保持する全ての機能情報リスト62になくなった拡張機能プラグイン32はアンインストールする。
これにより、第1実施形態では、例えば実行するアプリや場所によって異なる拡張機能を利用したいときに、アプリ実行部24を停止して実行プログラム毎に差し替える必要がなくなる。また、第1実施形態では、例えば場所等のセンサ処理情報に応じて、アプリを切り替えて、そのときの端末装置13の状態に応じたサービスを提供することを、シームレスに行うことができる。
<第2実施形態における機能拡張システムの概略構成例>
次に、第2実施形態について説明する。図9は、第2実施形態における機能拡張システムの概略構成例を示す図である。なお、図9に示す機能拡張システム10'において、上述した第1実施形態における機能拡張システム10と同様の構成については、同一の符号を付するものとし、具体的な説明は省略する。
図9に示す機能拡張システム10'は、アプリサーバ11'と、拡張機能プラグインサーバ12'と、1又は複数の端末装置13'−1〜13'−n(以下、必要に応じて「端末装置13'」という)と、1又は複数のサーバ16−1〜16−n(以下、必要に応じて「サーバ16」という)と、拡張機能プラグイン管理装置17とを有する。アプリサーバ11'、拡張機能プラグインサーバ12'、端末装置13'、サーバ16、及び拡張機能プラグイン管理装置17は、通信ネットワーク14によりデータの送受信が可能な状態で接続される。
アプリサーバ11'は、例えば端末装置13'が使用するモバイルアプリ一式を保管する。また、アプリサーバ11'は、場所等の所定の状態毎に利用可能なモバイルアプリ一式や場所等の所定の状態で利用可能な機能情報リスト等を管理してもよい。アプリサーバ11'は、例えば場所等の所定の状態に対応して実行できる1又は複数のアプリ等を有し、端末装置13'からのアプリや他の情報の取得要求等に応じて、要求に対応するアプリ等を通信ネットワーク14を介して端末装置13'に配信する。
なお、本実施形態におけるモバイルアプリは、必ずしも一つの周辺機器15、周辺機器15'や一つのサーバ16だけを利用するものではなく、複数の周辺機器15や周辺機器15'、サーバ16を利用して一つの役に立つモバイルアプリとなっている場合もある。例えば、ある環境中におけるサーバ16と周辺機器15の例としての「メールサーバ」と「照明」とを用いて、メールが到着したら照明をONにするモバイルアプリ等があるがこれに限定されるものではない。
拡張機能プラグイン管理装置17は、端末装置13'の第1のプラグインとネットワークを介して接続し、拡張機能プラグイン(上述した第2のプラグイン又は後述する第3のプラグイン)を配置し、端末装置13'から拡張機能プラグインを利用可能とする。
拡張機能プラグインサーバ12'は、例えば予め設定された拡張機能プラグイン(上述した第2のプラグイン又は後述する第3のプラグイン)を保管する。例えば、拡張機能プラグインサーバ12'は、拡張機能プラグイン管理装置17が接続する1又は複数の周辺機器(例えば、センサ)15'−1〜15'−n(以下、必要に応じて「周辺機器15'」という)、又はサーバ16に対する拡張機能プラグインを保管する。拡張機能プラグインサーバ12'は、拡張機能プラグイン管理装置17からの機能の取得要求等に応じて対応する機能を通信ネットワーク14を介して拡張機能プラグイン管理装置17に配信する。
アプリサーバ11'、拡張機能プラグインサーバ12'、サーバ16、及び拡張機能プラグイン管理装置17は、例えばPC等でもよく、一以上の情報処理装置を有するクラウドコンピューティングにより構成されるクラウドサーバ等であってもよいが、これに限定されるものではない。
端末装置13'は、アプリから周辺機器15'又はサーバ16を接続制御する場合に、モバイルアプリを実行するアプリ実行部24に周辺機器15又はサーバ16の種別に関わらず共通する第1のプラグインを予め組み込み配置する。また、端末装置13'は、拡張機能プラグイン管理装置17に指示して、各周辺機器15'又は各サーバ16の各機器それぞれを制御するプログラムが格納された拡張機能プラグインを第2のプラグインとして、又は、各サーバを制御するプログラムが格納された拡張機能プラグインを第3のプラグインを配置させ、第1のプラグインと拡張機能プラグイン管理装置17を介して、拡張機能プラグインをアプリの実行環境に接続する。
端末装置13'は、周辺機器15'又はサーバ16を接続して利用するための拡張機能プラグインを拡張機能プラグイン管理装置17を介してアプリ実行部24に接続し、周辺機器15'又はサーバ16を利用する。また、拡張機能プラグイン管理装置17は、周辺機器15'又はサーバ16を利用する上で必要な機能がない場合に、その必要な機能を拡張機能プラグインサーバ12'に要求して対応する機能を取得する。
端末装置13'は、他の周辺機器15'又はサーバ16を追加する場合には、拡張機能プラグイン管理装置17に指示して、他の周辺機器15'又はサーバ16に対応する拡張機能プラグインを配置させ、第1のプラグインを介して、アプリの実行環境に接続する。また、端末装置13'は、周辺機器15'又はサーバ16を制御する拡張機能プラグインを削除する場合には、アプリの実行環境と第1のプラグインの接続関係を維持しつつ、拡張機能プラグイン管理装置17に指示して、削除する周辺機器15'又はサーバ16に対応する拡張機能プラグインを削除する。これにより、端末装置13'は、モバイルアプリが周辺機器15'又はサーバ16を利用するための機能拡張を迅速に行うことができる。
サーバ16は、例えばメールサーバやニュースサーバ等の他システムであるが、これに限定されるものではない。第2実施形態において、拡張機能プラグイン(第3のプラグイン)は、例えばサーバ16のような、他のシステムの変化を検知し通知する機能であるが、これに限定されるものではない。例えば、メールサーバに新着メールがあったこと、ニュースサーバに新着ニュースがあったこと等、サーバ16からの通知情報の少なくとも一つを発行する機能等がある。サーバ16は、拡張機能プラグイン(第3のプラグイン)を介して、端末装置13のアプリ実行部において、アプリ等による各種制御が行われる。
第2実施形態において、例えばユーザは、端末装置13を持って移動し、様々な場所で周辺機器15'又はサーバ16等を利用することが想定される。このような場合、場所に応じて利用できる周辺機器15又はサーバ16は異なり、周辺機器15'又はサーバ16との接続インターフェースも異なる。この場合、従来では、それぞれの場所に応じたアプリと、アプリ実行プログラムと、プラグインとのセットを準備する必要があった。
そこで、第2実施形態では、例えば会議室A等の所定の場所等の状態毎に、その場所に付属する周辺機器15'を操作する機能(場所等の状態依存機能)やサーバ16を制御する機能等を、第1実施形態に示した端末装置13内の機能と同じインターフェースを拡張機能プラグイン管理部で用意して通信ネットワーク14上に公開する。なお、第2実施形態では、第1実施形態における拡張機能プラグイン管理部に対応して実行される処理を(端末内)拡張機能プラグイン管理部とし、通信ネットワーク14上で実行される拡張機能プラグイン管理部と同じ処理を(ネットワーク上)拡張機能プラグイン管理部とする。
例えば、(ネットワーク上)拡張機能プラグイン管理部は、その場所にある外部装置(PC)等の拡張機能プラグイン管理装置17に設けられ、場所等の状態に付属する周辺機器15又はサーバ16は、アプリサーバ11や外部装置等に接続される。なお、拡張機能プラグイン管理装置17、サーバ16、アプリサーバ11'、拡張機能プラグインサーバ12'は一つの外部装置(PC等)でもよい。また、場所等の状態に付属する周辺機器15'又はサーバ16への制御等は、(ネットワーク上)拡張機能プラグイン管理部を介して端末装置13'から、モバイルアプリ等により実行される。
上述したように、第2実施形態では、端末装置13'が、1又は複数のサーバ16を制御するアプリケーションの実行環境に、サーバ16に共通する第1のプラグインを接続し、サーバ16のそれぞれに対応する第3のプラグインを、第1のプラグインを介してアプリケーションの実行環境に接続されるように配置する。また、端末装置13'が制御する他のサーバを追加する場合に、アプリケーションの実行環境と第1のプラグインとの接続関係を維持しつつ、他のサーバに対応する第3のプラグインを、拡張機能プラグイン管理装置17と第1のプラグインを介してアプリケーションの実行環境に接続する。
また、端末装置13'が制御するサーバ16に対応する第3のプラグインを削除する場合に、アプリケーションの実行環境と第1のプラグインとの接続関係を維持しつつ、削除対象のサーバに対応する第3のプラグインを削除する。
また、上述したように、第2実施形態では、端末装置13'が、1又は複数の周辺機器15'を制御するアプリケーションの実行環境に、周辺機器15'とサーバ16に共通する第1のプラグインを接続し、周辺機器15'のそれぞれに対応する第2のプラグイン又はサーバ16のそれぞれに対応する第3のプラグインを、拡張機能プラグイン管理装置17と第1のプラグインを介してアプリケーションの実行環境に接続されるように配置する。また、端末装置13'が制御する他の周辺機器を追加する場合に、アプリケーションの実行環境と第1のプラグインとの接続関係を維持しつつ、他の周辺機器に対応する第2のプラグインを、拡張機能プラグイン管理装置17と第1のプラグインを介してアプリケーションの実行環境に接続する。
また、端末装置13'が制御する周辺機器15'に対応する第3のプラグイン又はサーバ16に対応する第3のプラグインを削除する場合に、アプリケーションの実行環境と第1のプラグインとの接続関係を維持しつつ、削除対象のサーバに対応する第2のプラグインを削除する。
<第2実施形態における端末装置13'の機能構成例>
図10は、第2実施形態における端末装置の機能構成の一例を示す図である。なお、以下の説明では、第1実施形態における端末装置13と異なる部分について具体的に説明する。また、図10に示す端末装置13'において、図2に示す第1実施形態における端末装置13と同様の構成については、同一の番号を付するものとし、ここでの具体的な説明は省略する。
図10に示す端末装置13'は、入力部21と、出力部22と、記憶部23と、アプリ実行部24と、(端末内)拡張機能プラグイン管理部25−1と、通信部26とを有する。第2実施形態において、アプリ実行部24は、端末装置13'が所定の場所に入った場合に、その位置情報に対応させてアプリの切り替えイベントが発生した場合に、アプリサーバ11からモバイルアプリを取得したり、モバイルアプリに対応する機能情報リストの取得を行う。この場合、アプリ実行部24は、例えば場所情報等を送信して、場所に対応するモバイルアプリ等を取得する。
アプリ実行部24は、上述した(端末内)拡張機能プラグイン管理部25−1や(ネットワーク上)拡張機能プラグイン管理部25−2に拡張機能情報(例えば、機能情報リスト62)を渡す。また、アプリ実行部24は、(端末内)拡張機能プラグイン管理部25−1や(ネットワーク上)拡張機能プラグイン管理部25−2とアプリ間を中継する。ここで、(端末内)拡張機能プラグイン管理部25−1は、機能情報リストに基づいて(端末内)拡張機能プラグイン(第2のプラグイン)32−1を拡張機能プラグインサーバ12'等から取得し、インストールしたりアンインストールしたりする。また、(端末内)拡張機能プラグイン管理部25−1は、第1のプラグイン31と(端末内)拡張機能プラグイン(第2のプラグイン)32−1間通信(例えば、アプリからの呼び出しやアプリへのイベント)を中継する。
また、(ネットワーク上)拡張機能プラグイン管理部25−2は、端末装置13'の通信部26から送信された機能情報リスト62(その場所等の所定の状態にある機能の一覧である「所定の状態における機能情報リスト62」)を受信する。また、(ネットワーク上)拡張機能プラグイン管理部25−2は、受信した機能情報リスト62に基づいて場所毎に登録された(ネットワーク上)拡張機能プラグイン(第2のプラグイン)32−2又は拡張機能プラグイン(第3のプラグイン)33を通信ネットワーク14を介して拡張機能プラグインサーバ12等から取得し、所定の装置等に配置する。また、(ネットワーク上)拡張機能プラグイン管理部25−2は、第1のプラグイン31と(ネットワーク上)拡張機能プラグイン(第2のプラグイン)32−2との間の通信(例えば、アプリからの呼び出しやアプリへのイベント)、又は(ネットワーク上)拡張機能プラグイン(第3のプラグイン)33との間の通信を中継する。アプリ実行部24は、インストール等により実行準備が完了すると、アプリを実行する。
なお、(端末内)拡張機能プラグイン管理部25−1は、端末装置13'が制御する他の周辺機器15を追加する場合には、アプリの実行環境と第1のプラグイン31との接続関係を維持しつつ、他の周辺機器に対応する(端末内)拡張機能プラグイン32−1を第1のプラグイン31を介してアプリの実行環境に接続して配置する。また、(端末内)拡張機能プラグイン管理部25−1は、端末装置13'が制御している周辺機器15を制御する(端末内)拡張機能プラグイン32−1を削除する場合には、アプリの実行環境と第1のプラグイン31の接続関係を維持しつつ、削除する周辺機器15に対応する(端末内)拡張機能プラグイン32−1を削除する。
また、(ネットワーク上)拡張機能プラグイン管理部25−2も(端末内)拡張機能プラグイン管理部25−1と同様に、アプリの実行環境と第1のプラグイン31との接続関係を維持しつつ、周辺機器15'又はサーバ16に対応する(ネットワーク上)拡張機能プラグイン(第2のプラグイン)32−2又は(ネットワーク上)拡張機能プラグイン33(第3のプラグイン)の追加や削除を行うことができる。
また、拡張機能プラグイン32−1,32−2は、周辺機器15'を制御するだけでなく、例えば周辺機器15'から得られたセンサ情報等を処理して、「どこに近づいた」等の情報を得るプラグインであってもよい。この場合、拡張機能プラグイン32−1,32−2は、「ある場所にいる」等の場所の条件を満たす場合に、イベントを発行する。
また、拡張機能プラグイン33は、サーバ16の変化をアプリに通知するプラグインであってもよい。この場合、拡張機能プラグイン33は、例えばメールの新着があった場合に、イベントを発行する。
上述したアプリ実行部24は、そのイベントを元に、対応するモバイルアプリを実行したり、対応するモバイルアプリがない場合にアプリサーバ11'からモバイルアプリを取得してもよい。
通信部26は、通信ネットワーク14を介してアプリサーバ11'や拡張機能プラグインサーバ12'、端末装置13'、他の外部装置とアクセスし、データの送受信を行う。更に、第2実施形態における通信部26は、(ネットワーク上)拡張機能プラグイン管理部25−2との通信を行う。
第2実施形態において、第1のプラグイン31は、アプリ実行部24が実行するモバイルアプリが利用する機能を記載した機能情報リストを取得し、取得した機能情報リストから周辺機器15又は周辺機器15'を利用できる機能が、端末内又はネットワーク上にない場合に、(端末内)拡張機能プラグイン管理部25−1又は(ネットワーク上)拡張機能プラグイン管理部25−2に指示し、周辺機器15又は周辺機器15'に対応する第2のプラグインを端末内又はネットワーク上から選択して取得させてもよい。
<第2実施形態における機能拡張処理の概要>
図11は、第2実施形態における機能拡張処理の概要を説明するための図である。上述したように、第2実施形態では、(端末内)拡張機能プラグイン管理部25−1と、通信ネットワーク14上で実行される(ネットワーク上)拡張機能プラグイン管理部25−2とを有する。
第2実施形態において、(ネットワーク上)拡張機能プラグイン管理部25−2は、例えば、その場所にある外部装置(PC)等の拡張機能プラグイン管理装置17に設けられ、周辺機器15'又はサーバ16は、例えば、拡張機能プラグイン管理装置17等の外部装置に接続される。また、場所等の所定の状態に付属する周辺機器15'−3,15'−4又はメールサーバ16−1への制御等は、(ネットワーク上)拡張機能プラグイン管理部25−2を介して端末装置13'のモバイルアプリ61により実行される。
第2実施形態では、端末装置13'が場所情報を通知すると、通知された場所情報(位置情報)等の状態毎のアプリサーバ11'が、機能情報リスト62として、端末内機能情報リストとその状態における機能情報リストとを結合させて、端末装置13に配信する。なお、アプリサーバ11'は、状態別毎に、アプリとそのアプリが利用する機能情報リスト11a'を定義することができる。
端末装置13'では、第1のプラグイン31等が機能管理を行い、機能情報リスト62を参照して、各機能をモバイルアプリ61から利用可能にする。例えば、第2実施形態では、機能情報リスト62に各機能のアクセス先の項目を設け、対象となる機能のアクセス先として端末内(例えば「local」)であるか、ネットワーク上(例えば「ws://***」)であるかを設定可能とする。なお、ネットワーク上に対する設定において、例えばhttpプロトコル等でアクセスする場合には、URL等が設定されるが、これに限定されるものではない。
また、第1のプラグイン31は、機能情報リスト62を受けて、端末内の機能情報とネットワーク上の機能情報リストに分割し、アクセス先が端末内(local)の機能情報は(端末内)拡張機能プラグイン管理部25−1へ送り、アクセス先がlocal以外である場合は(ネットワーク上)拡張機能プラグイン管理部25−2へ送る。
拡張機能プラグイン管理部25−1は、(端末内)拡張機能プラグイン(第2のプラグイン)32−1a,32−1bを有し、拡張機能プラグイン32−1a,32−1bは、上述した第1実施形態における拡張機能プラグイン32a,32bと同様の機能を有する。
第2実施形態において、機能情報リスト62には、例えば図11に示すように、場所等の所定の状態に付属する(ネットワーク上)拡張機能プラグイン(第2のプラグイン)32−2a,32−2bが提供する機能の情報(例えば、ディスプレイ(display)機能(ON/OFF制御)や人検出機能(ON/OFF制御)等)が含まれている。また、機能情報リスト62には、図11に示すように、例えばメールサーバ16−1等の他システムの変化を検知し通知する(ネットワーク上)拡張機能プラグイン(第3のプラグイン)33が提供する機能の情報が含まれている。(ネットワーク上)拡張機能プラグイン(第3のプラグイン)33が提供する機能としては、例えばメールチェッカ機能、新着ニュースチェッカ機能等があるが、これに限定されるものではない。
(ネットワーク上)拡張機能プラグイン管理部25−2は、(ネットワーク上)拡張機能プラグイン(第2のプラグイン)32−2a,32−2bを拡張機能プラグインサーバ12'等から取得する。また、(ネットワーク上)拡張機能プラグイン管理部25−2は、(ネットワーク上)拡張機能プラグイン(第3のプラグイン)33を拡張機能プラグインサーバ12'等から取得する。これにより、端末装置13'は、(ネットワーク上)拡張機能プラグイン管理部25−2に(ネットワーク上)拡張機能プラグイン32−2a,32−2b,33を追加することで、図11に示すディスプレイ機能や人検出機能、メールチェック機能等、その場所に応じた適切な機能等を使用することができる。なお、端末装置13'のハードウェア構成等については、上述した第1実施形態における端末装置13'と同様の構成を用いることができるため、ここでの説明は省略する。
<第2実施形態における機能拡張処理の一例を示すシーケンス>
図12は、第2実施形態における機能拡張処理(アプリ開始時)の一例を示すシーケンスである。図12の例では、モバイルアプリ61、アプリ実行部24、アプリサーバ11'、第1のプラグイン31、拡張機能プラグイン管理部25、(端末内)拡張機能プラグイン(第2のプラグイン)32−1、(ネットワーク上)拡張機能プラグイン(第3のプラグイン)33、拡張機能プラグインサーバ12'、及びサーバ16を用いた処理の一例を示している。また、拡張機能プラグイン管理部25は、(端末内)拡張機能プラグイン管理部25−1と、場所等の所定の状態に付属する周辺機器が接続された装置等に設けられた(ネットワーク上)拡張機能プラグイン管理部25−2とがある。
図12の例では、第1実施形態と同様に、例えばユーザからの指示やGPS機能を用いたジオフェンシング等により、ある場所(位置)に入ったというような状態変化イベントをアプリ切り替えトリガとしてモバイルアプリを開始する。
図12の例において、ある場所に入った場合、位置情報に基づいて場所イベント等の状態変化イベントがアプリ実行部24に入力される(S41)。アプリ実行部24は、実行対象のモバイルアプリが記憶部23にあるか否かを判断し、記憶部23にない場合にアプリサーバ11'にモバイルアプリ取得要求を行う(S42)。取得要求時のパラメータとしては、場所情報(位置情報)等であるが、これに限定されるものではない。
次に、アプリ実行部24は、アプリサーバ11'から場所等の現在状態情報に関連付けられたモバイルアプリ一式を受信する(S43)。なお、アプリ実行部24は、記憶部23にモバイルアプリが存在する場合は、アプリサーバ11'にアクセスせずに記憶部23から対象のモバイルアプリを取得する。次に、アプリ実行部24は、アプリIDを生成し、モバイルアプリ一式から取り出した機能情報リスト62に追加して第1のプラグイン31に送信する(S44)。
第1のプラグイン31は、アクセス先が端末装置13'内(local)の機能情報リストを抽出して(端末内)拡張機能プラグイン管理部25−1に登録する(S45)。また、第1のプラグイン31は、アクセス先が端末装置13'外(ネットワーク上)の機能情報リストを抽出し(ネットワーク上)拡張機能プラグイン管理部25−2に登録する(S46)。
(端末内)拡張機能プラグイン管理部25−1は、インストール済み機能情報リストと比較し、インストールされていない機能を拡張機能プラグインサーバ12'に取得要求を行う(S47)。取得要求時のパラメータとしては、例えば機能名、機種名、バージョン情報等があるが、これに限定されるものではない。(端末内)拡張機能プラグイン管理部25−1は、拡張機能プラグインサーバ12'から未インストール拡張機能プラグイン一式を受信する(S48)。
また、(ネットワーク上)拡張機能プラグイン管理部25−2は、インストール済み機能情報リスト62と比較し、インストールされていない機能を拡張機能プラグインサーバ12'に取得要求を行う(S49)。取得要求時のパラメータとしては、上述したように機能名、機種名、バージョン情報等である。(ネットワーク上)拡張機能プラグイン管理部25−2は、拡張機能プラグインサーバ12'から未インストール機能一式を受信する(S50)。
次に、(端末内)拡張機能プラグイン管理部25−1は、(端末内)拡張機能プラグイン32−1をインストールし(S51)、対応するプラグイン名(一意名)を登録する(S52)。また同様に、(ネットワーク上)拡張機能プラグイン管理部25−2は、(ネットワーク上)拡張機能プラグイン管理部25−2が設けられた装置等に対し、(ネットワーク上)拡張機能プラグイン(第2のプラグイン)32−2又は(ネットワーク上)拡張機能プラグイン(第3のプラグイン)33をインストールする(S53)。図12では、S53の処理の一例として(ネットワーク上)拡張機能プラグイン(第3のプラグイン)33をインストールする。(ネットワーク上)拡張機能プラグイン(第3のプラグイン)33は、チェックするサーバ16へのアクセス確認を行い(S54)、サーバ16からのアクセス許可を受信した場合(S55)、対応するプラグイン名(一意名)を登録する(S56)。
次に、(端末内)拡張機能プラグイン管理部25−1及び(ネットワーク上)拡張機能プラグイン管理部25−2は、共にアプリ実行部24に対して準備完了通知を行う(S57,S58)。アプリ実行部24は、拡張した機能に対応するモバイルアプリ61に処理を開始させる(S59)。
なお、(端末内)拡張機能プラグイン管理部25−1及び(ネットワーク上)拡張機能プラグイン管理部25−2における処理は、何れか一方の処理を行うだけでもよい。
図13は、第2実施形態における機能拡張処理(モバイルアプリ実行中)の一例を示すシーケンスである。図13の例では、モバイルアプリ61、アプリ実行部24、第1のプラグイン31、拡張機能プラグイン管理部25((端末内)拡張機能プラグイン管理部25−1及び(ネットワーク上)拡張機能プラグイン管理部25−2)、(端末内)拡張機能プラグイン(第2のプラグイン)32−1、及び(ネットワーク上)拡張機能プラグイン(第3のプラグイン)33を用いた処理の一例を示している。
図13の例において、モバイルアプリ61は、例えば第1のプラグイン31等に対して機能名と指示で呼び出す(S61)。例えば、機能名「歩行検出」に対して、指示「歩行開始イベント通知」等で呼び出す。第1のプラグイン31は、呼び出しIDを生成し、コールバック関数等を保存し、機能情報リストを参照する。
ここで、機能のアクセス先が端末装置13'内(local)の場合、第1のプラグイン31は、(端末内)拡張機能プラグイン管理部25−1を呼び出す(S62)。(端末内)拡張機能プラグイン管理部25−1は、プラグイン名(一意名)を参照して、対応する(端末内)拡張機能プラグインを呼び出す(S63)。(端末内)拡張機能プラグイン32−1は、指示に従って処理を実行し、処理の完了通知や、状態イベント等の発行を行う(S64)。
次に、(端末内)拡張機能プラグイン管理部25−1は、第1のプラグイン31に出力する(S65)。第1のプラグイン31は、呼び出しIDからコールバック関数を特定し、コールバック関数を呼び出し、モバイルアプリ61に出力する(S66)。
また、機能のアクセス先が端末装置13外(ネットワーク上アドレス)の場合、第1のプラグイン31は、(ネットワーク上)拡張機能プラグイン管理部25−2を呼び出す(S67)。(ネットワーク上)拡張機能プラグイン管理部25−2は、プラグイン名(一意名)を参照して、対応する(ネットワーク上)拡張機能プラグイン32−2又は(ネットワーク上)拡張機能プラグイン33を呼び出す(S68)。図13では、S68の処理の一例として、(ネットワーク上)拡張機能プラグイン33を呼び出している。
(ネットワーク上)拡張機能プラグイン33は、例えば呼び出しによりチェック対象のサーバ16にアクセスして更新情報の確認等を行い(S69)、その確認結果を受信して(S70)、状態変更イベント等の発行等を行う(S71)。
次に、(ネットワーク上)拡張機能プラグイン管理部25−2は、第1のプラグイン31に出力する(S72)。第1のプラグイン31は、呼び出しIDからコールバック関数を特定して、コールバック関数によりモバイルアプリ61に出力する(S73)。これにより、アプリ実行部24は、状態変更を知ることができる。
図14は、第2実施形態における機能拡張処理(アプリ終了時)の一例を示すシーケンスである。図14の例では、アプリ実行部24、モバイルアプリ61、第1のプラグイン31、拡張機能プラグイン管理部25((端末内)拡張機能プラグイン管理部25−1及び(ネットワーク上)拡張機能プラグイン管理部25−2)、(端末内)拡張機能プラグイン(第2のプラグイン)32−1、及び(ネットワーク上)拡張機能プラグイン(第3のプラグイン)33を用いた処理の一例を示している。また、図14の例では、第1実施形態と同様に、ある場所(位置情報)から離れる(退く)場合に発生するイベントをトリガとしてモバイルアプリを終了する例を示している。
図14の例において、ある場所から離れたことを検知することで発生したモバイルアプリ切り替えイベントがアプリ実行部24に入力されると(S81)、モバイルアプリ61に該当アプリの停止指示を出力する(S82)。モバイルアプリ61は、指示されたモバイルアプリを停止し、停止が完了した旨の通知をアプリ実行部24に出力する(S83)。
アプリ実行部24は、機能情報リストの削除要求を第1のプラグイン31に出力する(S84)。削除要求時のパラメータとしては、例えばアプリID等があるが、これに限定されるものではない。
次に、第1のプラグイン31は、アプリ実行部24から取得した機能情報リストの削除要求を受け取ると、その内容を(端末内)拡張機能プラグイン管理部25−1に出力する(S85)。(端末内)拡張機能プラグイン管理部25−1は、指定アプリIDの機能情報リスト62aを削除し、残った機能情報リスト62aとインストール済み機能情報リスト62bとの照合を行い、不要機能の抽出を行う。そして、端末装置13内の不要な(端末内)拡張機能プラグイン32−1をアンインストールする(S86)。
(端末内)拡張機能プラグイン32−1は、アンインストール時に(端末内)拡張機能プラグイン32−1に対応するプラグイン名(一意名)を(端末内)拡張機能プラグイン管理部25−1のインストール済み機能情報リスト62bから削除させる(S87)。
また、第1のプラグイン31は、(ネットワーク上)拡張機能プラグイン管理部25−2に対しても指定アプリIDの機能情報リストの削除要求を行い(S88)、(ネットワーク上)拡張機能プラグイン管理部25−2は、指定アプリIDの機能情報リスト62aを削除し、残った機能情報リストとインストール済み機能情報リスト62cとの照合を行う。そして、不要な機能の抽出を行って、ネットワーク上の不要な(ネットワーク上)拡張機能プラグイン(第2のプラグイン)32−2又は(ネットワーク上)拡張機能プラグイン(第3のプラグイン)33をアンインストールする(S89)。図14の例では、S89の処理の一例として(ネットワーク上)拡張機能プラグイン(第3のプラグイン)33をアンインストールする例を示している。
(ネットワーク上)拡張機能プラグイン32−2は、アンインストール時に(ネットワーク上)拡張機能プラグイン(第2のプラグイン)32−2又は(ネットワーク上)拡張機能プラグイン(第3のプラグイン)33に対応するプラグイン名(一意名)を(ネットワーク上)拡張機能プラグイン管理部25−2のインストール済み機能情報リスト62cから削除させる(S90)。
<第2実施形態に適用される各種データ例>
図15は、第2実施形態に適用される各種データ例を示す図である。図15(A)は、第1のプラグイン31で管理されるデータ例を示し、図15(B)は、(端末内)拡張機能プラグイン管理部25−1で管理されるデータ例を示し、図15(C)は、(ネットワーク上)拡張機能プラグイン管理部25−2で管理されるデータ例を示す。
図15(A)に示す第1のプラグインのデータには、アプリID毎の機能情報リスト62aが存在する。機能情報リスト62aの項目としては、上述したように、例えば「機能」、「アクセス先」、「バージョン等条件」等があるが、これに限定されるものではない。図15(A)の例において、例えばアプリID=0001が有する機能「notify」を開始する場合に、(端末内)拡張機能プラグイン管理部25−1で、その機能がインストールされ、図15(B)に示すように、その機能に対応するプラグイン名(一意名)とバージョン情報等の条件が登録される。ここで、「アクセス先」は、例えば(ネットワーク上)拡張機能プラグイン管理部25−2のアドレスを示す。
また、例えばアプリID=0001が利用する機能「display」を開始する場合に、(ネットワーク上)拡張機能プラグイン管理部25−2で、インストール済み機能情報リスト62cに「display」機能がなければ、(ネットワーク上)拡張機能プラグイン管理部25−2は拡張機能プラグインサーバ12'から、その機能の拡張機能プラグインを取得し、インストールする。そして、図15(C)に示すように、その機能に対応するプラグイン名(一意名)とバージョン情報等の条件が登録される。これにより、アプリID=0001のモバイルアプリ61で、インストールされたそれぞれの機能が実行可能となる。
また、第2実施形態では、モバイルアプリ終了時には、例えば図15(A)に示す第1のプラグイン31の対象のモバイルアプリに関する機能情報リスト62aが削除される。また、上述した(端末内)拡張機能プラグイン管理部25−1又は(ネットワーク上)拡張機能プラグイン管理部25−2のそれぞれから対象のモバイルアプリの機能情報リスト62aが削除される。また、(端末内)拡張機能プラグイン管理部25−1が保持する全ての機能情報リスト62a、62bにない機能の拡張機能プラグインが端末装置13'からアンインストールされ、図15(B)に示すインストール済み機能情報リスト62bから削除される。
また、(ネットワーク上)拡張機能プラグイン管理部25−2が保持する全ての機能情報リスト62a,62cにない機能の拡張機能プラグインがアンインストールされ、図15(C)に示すインストール済み機能情報リスト62cから削除される。
なお、図15(A)〜(C)に示す各データは、例えばアプリID毎に設定されているが、これに限定されるものではない。
上述したように第2実施形態によれば、状態毎の拡張機能プラグイン管理を適切に実現することができる。また、上述した第1及び第2実施形態では、機能拡張に対し、実行環境の差し替えを行う必要がない。また、第2実施形態によれば、例えば同じモバイルアプリに対し、異なる拡張機能プラグインが自動的にインストールされ、それぞれが組み合わさって処理を実行することができる。また、処理を実現する拡張機能プラグインがどのように選ばれるかを、モバイルアプリを実行する端末機種や場所によって変えることができる。
また、上述した第1及び第2実施形態では、端末装置13(13')が必要な機能を自動的に読み込むことができるため、モバイルアプリがセンサや周辺機器を利用するための機能拡張を迅速に行うことができる。
<第3実施形態>
次に、第3実施形態について説明する。上述した第2実施形態では、アプリサーバ11'にその状態で利用可能な「その状態における機能情報リスト」を予め準備し、例えば(ネットワーク上)拡張機能プラグイン管理部25−2が、第1のプラグインから送信されたその情報に基づいて、対応する拡張機能プラグインを実行管理した。第3実施形態では、アクセス先をサーバから指定せず、動的に周囲の機能を検出して使える機能情報リストを保持、更新する。使える機能情報リストとは、インストール済み機能情報リスト及び検出中機能情報リストであり、これらのリストを参照し、モバイルアプリに対応する機能を利用する。
具体的に説明すると、第3の実施形態では、端末外の拡張機能プラグインを管理する拡張機能プラグイン管理装置17を必要としない。第3実施形態では、端末装置13''内に(端末外)拡張機能プラグインを設け、(端末外)拡張機能プラグインが自身の機能情報を定期的に、又は、ブロードキャストリクエストを受信して、ブロードキャスト発信する。
また、第3実施形態では、端末装置13''内に(端末外)拡張機能プラグイン管理部を設け、ブロードキャストを受信し、機能情報を取得して、検出中機能情報リストを更新する等の管理を行う。検出中機能情報リストは、例えば機能名、一意名、バージョン等の情報、及び最新検出時刻等を管理する。また、(端末外)拡張機能プラグイン管理部は、一定時間検出できなくなった、又は利用していて通信が届かなくなった(端末外)拡張機能プラグインを、検出中機能情報リストから削除する。
(端末外)拡張機能プラグイン管理部は、(端末内)拡張機能プラグイン管理部25−1と同様に、アプリ実行部と第1のプラグイン31との接続関係を維持しつつ、ブロードキャスト通信により検出した拡張機能プラグインをモバイルアプリから利用可能とすることができる。なお、第3実施形態におけるシステム構成は、第1実施形態における機能拡張システム10と同様の構成を用いることができるため、ここでの具体的な説明は省略する。
<第3実施形態における機能拡張処理の概要>
図16は、第3実施形態における機能拡張処理の概要を説明するための図である。図16の例では、アプリサーバ11''と、端末装置13''とを有する。また、第3実施形態において、端末装置13''は、モバイルアプリ61と、アプリ実行部24と、(端末内)拡張機能プラグイン管理部25−1と、(端末外)拡張機能プラグイン管理部25−3とを有する。なお、第3実施形態において、第1及び第2実施形態に含まれる構成と同様の構成等については、同一の符号を付するものとし、ここでの具体的な説明は省略する。
第3実施形態において、端末装置13''は、(端末外)拡張機能プラグイン管理部25−3を有している。(端末外)拡張機能プラグイン管理部25−3は、端末装置13''内部に設けられ、図16に示す周辺機器15−3,15−4、メールサーバ16−1への制御等は、(端末外)拡張機能プラグイン管理部25−3を介して端末装置13''のモバイルアプリ61により実行される。
第3実施形態では、(端末外)拡張機能プラグイン管理部25−3は、例えば定期的、又はモバイルアプリ開始等の所定のタイミングで、拡張機能プラグインがブロードキャスト発信している機能情報のスキャンや、(端末外)拡張機能プラグイン(第4のプラグイン)を検出するためのリクエストのブロードキャストを行う。通信方式としては、例えば、Wi−FiやBluetooth等を用いるが、これに限定されるものではない。
ここで、第4のプラグインとは、上述した第2,3のプラグインの持つ機能に加え、(端末外)拡張機能プラグイン管理部が定期的にブロードキャストリクエストを発行し、第4のプラグインがブロードキャストリクエストを受けてブロードキャストする。なお、第4のプラグイン自身が定期的に自身の機能情報をブロードキャストし、(端末外)拡張機能プラグイン管理部25−3がその情報を取得してもよい。上述した自身の機能情報とは、例えば機能情報リスト空欄を埋める情報であり、例えば機能、一意名(URLやService Set Identifier(SSID)等)、バージョン等条件等であるが、これに限定されるものではない。
例えば、端末装置13''外の周辺機器に接続した(端末外)拡張機能プラグイン(第4のプラグイン)34−1,34−2、又はメールサーバ16−1に接続した(端末外)拡張機能プラグイン(第4のプラグイン)34−3は、定期的、又は(端末外)拡張機能プラグイン管理部25−3のリクエストに応じて、自身の機能情報をブロードキャストする。
(端末外)拡張機能プラグイン管理部25−3は、ブロードキャストされた機能情報を取得し、検出中機能情報リストに同じ情報があるか否かを調べる。同じ情報がなければ、検出中機能情報リストに最終検出時刻と共に追加する。また、(端末外)拡張機能プラグイン管理部25−3は、検出中機能情報リストで、最終検出時刻から一定時間、時刻が更新されていない機能情報を削除する。
検出中機能情報リストのアクセス先には、Internet Protocol(IP)アドレスやMedia Access Control(MAC)アドレス、SSID等が設定されるが、これに限定されるものではない。機能名としては、例えば(端末外)拡張機能プラグイン(第4のプラグイン)34−1,34−2のディスプレイ機能や人検出機能等であるが、これに限定されるものではない。
(端末外)拡張機能プラグイン管理部25−3は、検出中機能情報リストに変更があると、第1のプラグイン31に対し、新たに検出した機能名や、一定期間検出せずリストから削除した機能名を出力する。第1のプラグイン31は、実行中モバイルアプリと対の機能情報リスト(端末外)のアクセス先情報を、(端末外)拡張機能プラグイン管理部25−3から取得した情報に基づいて更新する。
更新処理において、第1のプラグイン31は、例えば新たに検出した機能名がリスト中にあり、アクセス先が空欄であれば「端末外(net)」と記入する。また、第1のプラグイン31は、削除した機能名がリスト中にあり、アクセス先が「端末外(net)」であれば、空欄とする。
<第3実施形態における機能拡張処理の一例を示すシーケンス>
次に、第3実施形態における機能拡張処理の一例について説明する。図17は、第3実施形態における機能拡張処理(アプリ実行中)の一例を示すシーケンスである。図17の例では、(端末外)拡張機能プラグイン管理部25−3、(端末外)拡張機能プラグイン(第4のプラグイン)34、及び第1のプラグイン31を用いた処理の一例を示している。図17に示す処理は、モバイルアプリ実行中の拡張機能の増減を行う処理であり、例えば定期的に実行されるが、これに限定されるものではない。
図17の例において、(端末外)拡張機能プラグイン管理部25−3は、機能情報のブロードキャストリクエストを(端末外)拡張機能プラグイン(第4のプラグイン)34に出力する(S91)。(端末外)拡張機能プラグイン(第4のプラグイン)34は、機能情報のブロードキャストを(端末外)拡張機能プラグイン管理部25−3に出力する(S92)。
ここで、検出中機能情報リストにあるプラグインのブロードキャストを受信した場合、(端末外)拡張機能プラグイン管理部25−3は、そのプラグインの最終検出時刻を更新する(S93)。
また、リストにないプラグインのブロードキャスト受信の場合、(端末外)拡張機能プラグイン管理部25−3は、検出中機能情報リストに追加すると共に、最終検出時刻を記入する(S94)。また、(端末外)拡張機能プラグイン管理部25−3は、追加した機能情報を第1のプラグイン31に通知する(S95)。第1のプラグイン31は、新たに検出した機能名がリストにあり、アクセス先が未記入であれば、「端末外(net)」と記入する(S96)。
また、定期的に機能情報のブロードキャストを行っている場合に、一定時間検出されていないプラグインがある場合、(端末外)拡張機能プラグイン管理部25−3は、そのプラグインの機能情報を検出中機能情報リストから削除する(S98)。次に、(端末外)拡張機能プラグイン管理部25−3は、削除した機能情報を第1のプラグイン31に通知する(S99)。第1のプラグイン31は、削除された機能名がリストにあり、アクセス先が「端末外(net)」であれば空欄にする(S100)。
図18は、第3実施形態における機能拡張処理(リスト更新)の一例を示すシーケンスである。図18の例では、モバイルアプリ61、アプリ実行部24、第1のプラグイン31、(端末内)拡張機能プラグイン管理部25−1、(端末内)拡張機能プラグイン(第2のプラグイン)32−1、(端末外)拡張機能プラグイン管理部25−3、(端末外)拡張機能プラグイン(第4のプラグイン)34、及び拡張機能プラグインサーバ12を用いた処理の一例を示している。
図18の例において、モバイルアプリ61は、機能情報リストを取得してアプリ実行部24に出力する(S101)。アプリ実行部24は、機能情報リストを第1のプラグイン31に出力する(S102)。第1のプラグイン31は、機能情報リストを(端末内)拡張機能プラグイン管理部25−1に出力する(S103)。
(端末内)拡張機能プラグイン管理部25−1は、機能情報ブロードキャストリクエストを(端末内)拡張機能プラグイン(第2のプラグイン)32−1に出力する(S104)。(端末内)拡張機能プラグイン(第2のプラグイン)32−1は、リクエストを受け付けて、そのリクエストに対する返信を行う(S105)。(端末内)拡張機能プラグイン管理部25−1は、インストール済み機能情報リストを更新する(S106)。また、(端末内)拡張機能プラグイン管理部25−1は、見つからない機能があれば、拡張機能プラグインサーバ12にアクセスして取得してインストールし(S107)、インストール済み機能情報リストを更新する(S108)。なお、S107の処理は、例えば上述したS47〜S51の処理と同様の処理を簡略的に示している。
次に、(端末内)拡張機能プラグイン管理部25−1は、検出機能情報アクセス先に「local」と記入して第1のプラグイン31に出力する(S109)。次に、第1のプラグイン31は、機能情報リストを(端末外)拡張機能プラグイン管理部25−3に出力する(S110)。(端末外)拡張機能プラグイン管理部25−3は、機能情報ブロードキャストリクエストを(端末外)拡張機能プラグイン(第4のプラグイン)34に送信する(S111)。(端末外)拡張機能プラグイン(第4のプラグイン)34は、リクエスト付け付けて、そのリクエストに対する返信を行う(S112)。(端末外)拡張機能プラグイン管理部25−3は、検出中リストを更新し(S113)、検出機能情報アクセス先に「端末外(net)」と記入して第1のプラグイン31に出力する(S114)。第1のプラグイン31は、得られた情報に基づいて機能情報リストを更新して管理する(S115)。
図19は、第3実施形態における機能拡張処理(第4のプラグイン呼び出し)の一例を示すシーケンスである。図19の例では、(端末外)拡張機能プラグイン(第4のプラグイン)34、(端末外)拡張機能プラグイン管理部25−3、第1のプラグイン31、アプリ実行部24、及びモバイルアプリ61を用いた処理の一例を示している。図19の例において、S121〜S128の処理は、拡張機能プラグインが利用できた場合の例を示し、S131〜S139の処理は、拡張機能プラグイン呼び出しが到達しなかった場合の例を示している。
図19の例において、モバイルアプリ61は、利用する(端末外)拡張機能プラグイン(第4のプラグイン)34の呼び出しをアプリ実行部24に出力する(S121)。アプリ実行部24は、モバイルアプリ61から受け付けた呼び出しを第1のプラグイン31に出力する(S122)。第1のプラグイン31は、アプリ実行部24から受け付けた呼び出しを(端末外)拡張機能プラグイン管理部25−3に出力する(S123)。(端末外)拡張機能プラグイン管理部25−3は、第1のプラグイン31から受け付けた呼び出しを、(端末外)拡張機能プラグイン(第4のプラグイン)34に送信する(S124)。ここで、第4のプラグインが利用できると、そのレスポンスを(端末外)拡張機能プラグイン管理部25−3が受信する(S125)。(端末外)拡張機能プラグイン管理部25−3は、レスポンスを第1のプラグイン31に出力する(S126)。第1のプラグイン31は、受け付けたレスポンスをアプリ実行部24に出力する(S127)。アプリ実行部24は、受け付けたレスポンスをモバイルアプリ61に出力する(S128)。
また、拡張機能プラグイン呼び出しが到達しなかった場合、モバイルアプリ61は、利用する(端末外)拡張機能プラグイン(第4のプラグイン)34の呼び出しをアプリ実行部24に出力する(S131)。アプリ実行部24は、モバイルアプリ61から受け付けた呼び出しを第1のプラグイン31に出力する(S132)。第1のプラグイン31は、アプリ実行部24から受け付けた呼び出しを(端末外)拡張機能プラグイン管理部25−3に出力する(S133)。(端末外)拡張機能プラグイン管理部25−3は、第1のプラグイン31から受け付けた呼び出しを、(端末外)拡張機能プラグイン(第4のプラグイン)34に送信するが、到達できなかった場合に、その旨を示すエラー情報を第1のプラグイン31に出力する(S134)。第1のプラグイン31は、エラー情報をアプリ実行部24に出力する(S135)。アプリ実行部24は、受け付けたエラー情報をモバイルアプリ61に出力する(S136)。
次に、(端末外)拡張機能プラグイン管理部25−3は、そのプラグインの機能情報を検出中機能情報リストから削除し(S137)、削除した機能情報を第1のプラグイン31に通知する(S138)。第1のプラグイン31は、削除された機能名がリストにあり、アクセス先が「端末(net)」であれば、空欄にする(S139)。
<第3実施形態に適用される各種データ例>
図20は、第3実施形態に適用される各種データ例を示す図である。図20(A)は、第1のプラグインで管理されるデータ例を示し、図20(B)は、(端末内)拡張機能プラグイン管理部25−1で管理されるデータ例を示し、図20(C)は、(端末外)拡張機能プラグイン管理部25−3で管理されるデータ例を示す。
図20(A)に示す第1のプラグイン31のデータには、アプリID毎の機能情報リスト62aが存在する。機能情報リスト62aの項目としては、上述したように、例えば「機能」、「アクセス先」、「バージョン等条件」等があるが、これに限定されるものではない。端末装置13は、モバイルアプリと共にそのアプリが利用する機能情報リスト(モバイルアプリが利用予定の機能情報リスト)62dをアプリ実行部24が取得すると、機能情報リストを第1のプラグイン31に出力する。このとき、機能情報リスト62dのアクセス先は空欄である。
第1のプラグイン31は、機能情報リスト62aを(端末内)拡張機能プラグイン管理部25−1に出力する。(端末内)拡張機能プラグイン管理部25−1は、インストール済機能情報リスト62bを参照し、インストール済みである機能については、その機能情報リスト62aのアクセス先に「local」と記入する。また、アクセス先が空欄の機能は、拡張機能プラグインサーバ12に問い合わせし、拡張機能プラグインサーバ12に一式がある機能があれば取得してインストールする。インストール後は、その機能のアクセス先に「local」と記入する。(端末内)拡張機能プラグイン管理部25−1は、変更した機能情報リスト62aを第1のプラグイン31に返却する。
また、第1のプラグイン31は、機能情報リスト62aを(端末外)拡張機能プラグイン管理部25−3に出力する。(端末外)拡張機能プラグイン管理部25−3は、検出中機能情報リスト62eを参照し、ある機能については、アクセス先に「net」と記入する。変更した機能情報リスト62aを第1のプラグイン31に返却する。
ここで、モバイルアプリから機能の呼び出しがあると、第1のプラグイン31は、機能情報リスト62aを参照し、アクセス先が端末内(local)の機能の呼び出しは、(端末内)拡張機能プラグイン管理部25−1に送る。
また、アクセス先が「net」の場合、(端末外)拡張機能プラグイン管理部25−3に機能の読み出しを送る。アクセス先が空欄の場合は、モバイルアプリにエラーを返す。(端末外)拡張機能プラグイン管理部25−3は、検出中機能情報リスト62eを参照し、呼び出された機能に対応する一意名を用いて拡張機能プラグイン(第4のプラグイン)34を呼び出し、レスポンスをアプリへ返却する。なお、呼び出しても拡張機能プラグインに到達できずエラーとなった場合、(端末外)拡張機能プラグイン管理部25−3は、モバイルアプリへエラー情報を返すと共に、そのプラグイン情報を検出中機能情報リスト62eから削除し、削除情報を第1のプラグイン31へ送る。第1のプラグイン31は、リスト中のその機能名のアクセス先を空欄とする。
これにより、アプリID=0001のモバイルアプリ61で、インストールされたそれぞれの機能が実行可能となる。また、第3実施形態では、モバイルアプリ終了時には、例えば図20(A)に示す第1のプラグイン31の対象のモバイルアプリの機能情報リスト62aが削除される。また、上述した(端末内)拡張機能プラグイン管理部25−1又は(端末外)拡張機能プラグイン管理部25−3のそれぞれから対象のモバイルアプリの機能情報リスト62aが削除される。上述した第1〜第3実施形態では、端末装置13が必要な機能を自動的に読み込むことができるため、モバイルアプリがセンサや周辺機器を利用するための機能拡張を迅速に行うことができる。
<第4実施形態>
次に、第4実施形態について説明する。上述した第1〜第3の実施形態では、各周辺機器15又はサーバ16に対して共通のプラグイン(第1のプラグイン)と、周辺機器又はサーバ16毎に個別のプラグイン(拡張機能プラグイン(第2〜第4のプラグイン)とを有することで、アプリを再起動せずに機能を追加したり削除することができる。
更に、第4実施形態では、例えば拡張機能プラグインの中に、例えばtrue/false等の状態変化をトリガとしてイベントを発行する条件を、各アプリが任意に1又は複数設定できるようにする。更に、第4実施形態では、イベントをモバイルアプリに送るための1又は複数の拡張機能プラグインに跨る条件を自動で分割し、各拡張機能プラグイン等に条件を分配する。
これにより、例えば端末装置13は、複数のセンシング機能(=拡張機能プラグイン)等によるセンサ処理の結果から総合的に状態を判定し、アプリの開始や終了等を行うことができる。また、第4実施形態では、CPUの負荷を低減し、各部間の通信量を下げることができる。例えば、拡張機能プラグイン(第2のプラグイン)は、第1のプラグインから指定された発行条件に基づいて、端末装置13の位置、時刻、端末内部状態の変化、周辺の変化、及び外部からのイベント受信のうち、少なくとも1つを含む通知情報を発行する。また、第4実施形態では、指定された発行条件に基づいて通知情報を生成するか否かの判定処理を、第2のプラグインに対応する周辺機器15で実行可能な場合に、判定処理を周辺機器で実行させてもよい。
また、第4実施形態では、判定処理のうち、複数の判定処理の結果を組み合わせた複合的な判定処理について、複数の判定処理が何れか同一の第2のプラグインに対応する周辺機器で実行可能な場合に、複数の判定処理とそれら判定処理の結果を組み合わせた複合的な判定処理の一部又は全部を周辺機器15で実行させてもよい。
<第4実施形態における端末装置13の機能構成例>
図21,図22は、第4実施形態における端末装置の機能構成の一例を示す図(その1,その2)である。なお、以下の説明では、第1実施形態における端末装置13及び第2実施形態における端末装置13'と異なる部分について具体的に説明する。また、上述した端末装置13,13'と同様の構成については、同一の番号を付するものとし、ここでの具体的な説明は省略する。
図21に示す端末装置13''aは、第1実施形態に対応している。端末装置13''aは、入力部21と、出力部22と、記憶部23と、アプリ実行部24と、拡張機能プラグイン管理部25と、通信部26と、第1のプラグイン31と、拡張機能プラグイン(第2のプラグイン)32a,32bとを有する。
また、図22に示す端末装置13''bは、第2実施形態に対応している。端末装置13''bは、入力部21と、出力部22と、記憶部23と、アプリ実行部24と、(端末内)拡張機能プラグイン管理部25−1と、通信部26と、第1のプラグイン31と、(端末内)拡張機能プラグイン32−1とを有する。
また、第4実施形態では、端末装置13''a,13''b内にツリー条件判定部71と、状態条件判定部72とを有する。例えば、図21、図22に示す第1のプラグイン31は、ツリー条件判定部71−1を有している。また、図21に示す拡張機能プラグイン管理部25にもツリー条件判定部71−2を有している。また、拡張機能プラグイン32には、状態条件判定部72−1を有している。
図21に示す拡張機能プラグイン管理部25は、拡張機能プラグイン(第2のプラグイン)32a,32bを有し、拡張機能プラグイン32bは、周辺機器15−3'が有する状態条件判定部72−1'及びツリー条件判定部71−2'と通信する。
また、図22に示す第1のプラグイン31、(端末内)拡張機能プラグイン管理部25−1、(ネットワーク上)拡張機能プラグイン管理部25−2にも、それぞれツリー条件判定部71−1,71−2、71−3を有している。また、(端末内)拡張機能プラグイン32−1、(ネットワーク上)拡張機能プラグイン32−2、拡張機能プラグイン(第3のプラグイン)33は、状態条件判定部72−1、72−2,72−3を有している。拡張機能プラグイン管理装置17の拡張機能プラグイン(第3のプラグイン)33は、サーバ16との接続を行う。
ツリー条件判定部71は、状態条件判定部72のtrue/falseの組み合わせを判定する。例えば、ツリー条件判定部71は、多種類のセンサ処理等からの結果で総合的に状態を判別したい場合に、個々の拡張機能プラグインから発生する状態変化のイベントをトリガとして、それぞれの拡張機能プラグインの中の状態の論理積(AND)や論理和(OR)を利用して個々の条件を判定する。
状態条件判定部72は、例えばセンサデータ等に基づいて、状態成立/状態不成立の2つの条件により、true/falseを変化させる。例えば、状態条件判定部72は、それぞれの拡張機能プラグインの中の状態が、状態成立/状態不成立の条件として登録された状態に変化したとき、状態成立の状態に変化すればtrue、状態不成立の状態に変化すればfalseと判定する。
例えば、ツリー条件判定の一例として、場所やユーザの状況等に応じて実行するモバイルアプリを切り替える場合、切り替えのトリガはGPS等の位置情報を処理して拡張機能プラグイン32からイベントとして発生させ、それを受けてアプリ実行部24がモバイルアプリを切り替える。また、「何時に場所Aで人aが近くにいる場合」等、複合的に条件設定したイベントを発生させたい場合には、各条件をANDやORで組み合わせて記述する。上述した機能情報リスト等において同じアクセス先であれば、アクセス先の中でAND条件を検証した上で、各拡張機能プラグイン管理部25や各拡張機能プラグイン32、33からまとめたイベントを発生することで端末装置13''a,13''bのCPU等の負荷を低減することができる。
そこで、第4実施形態では、第1のプラグイン31は、条件の中のANDやORで結合された各条件のうち、同じアクセス先(例えば、端末内やネットワーク上)又は一意名(例えば、同じ機能プログラム)の部分条件は、分割せずにまとめてその宛先の条件判定部に条件設定する。ここで、ツリー条件判定部71の上位、下位の関係も定義しておく。各状態条件判定部72は、条件を満たすか、満たさなくなった時にイベントを上位に発生し、上位はそれを受けて自身の判定を行う。なお、第4実施形態において、各ツリー条件判定部71でそれぞれ行われるANDやORで結合された各条件の集まりをノードと呼ぶ。
なお、ANDやORで結合された条件ツリーの最下端に位置する拡張機能プラグインノードについては、これ自身が状態(真偽値)を保持する。このツリーの末端のノードの状態は、拡張機能プラグイン内が発するセンサイベントによって遷移し、この遷移条件(成立要件、不成立要件)を記述したものを状態条件と呼ぶ。
条件ツリーを第1のプラグイン31が取得し下位の状態条件判定部72に条件設定するタイミングは、アプリサーバ11''から条件ツリーが配信されたときでもよく、又は、アプリ実行部24の起動時から予め保存していてもよい。
<第4実施形態における機能拡張処理の概要>
図23〜図26は、第4実施形態における機能拡張処理の概要を説明するための図(その1〜その4)である。図23〜図26は、それぞれが部分的に他の構成と異なっている。
図23の例では、端末装置13''aの第1のプラグイン31や、拡張機能プラグイン管理部25、機能拡張プラグイン(第2のプラグイン)32aにおいて、それぞれツリー条件判定部71−1,71−2,71−3aを有している。また、拡張機能プラグイン32aには、状態条件判定部72−3a−1,72−3a−2を有し、拡張機能プラグイン32bには、状態条件判定部72−3bを有している。なお、図23の例では、端末装置13''aの中にマイコン等を設け、その中にツリー条件判定部71や状態条件判定部72を有することで、省電力処理を実現している。
また、図23の例において、アプリサーバ11''は、条件ツリー73として条件成立内部イベント、条件不成立内部イベントが設定されている。ツリー条件判定部71は、このような内部イベントに対応するtrue/falseの状態条件及び条件ツリーを取得して、ツリー条件判定を行うことができる。
また、第4実施形態では、周辺機器15側に上述した各種条件判定部(ツリー条件判定部71,状態条件判定部72)を有してもよい。例えば、図24の例では、機能拡張プラグイン(第2のプラグイン)32aは、周辺機器15−3'と接続し、周辺機器15−3'がツリー条件判定部71−3a'、状態条件判定部72−3a−1',72−3a−2'を有している。
また、第4実施形態では、機能拡張プラグイン側と周辺機器側の両方に条件判定部を有してもよい。例えば、図25の例では、機能拡張プラグイン(第2のプラグイン)32aは、ツリー条件判定部71−3a'を有し、周辺機器15−3'が状態条件判定部72−3a−1',72−3a−2'を有している。
また、第4実施形態では、通信ネットワーク側に条件判定部を有してもよい。例えば、図26の例では、端末装置13''bに対し、(ネットワーク上)拡張機能プラグイン管理部25−2は、ツリー条件判定部71−3を有する。また、(ネットワーク上)拡張機能プラグイン32−2a,32−2bは、状態条件判定部72−4a,72−4bを有し、拡張機能プラグイン(第3のプラグイン)33は、状態条件判定部72−5を有している。
また、図26の例では、図24の例と同様に、(端末内)拡張機能プラグイン32−1aと接続された周辺機器15−3'がツリー条件判定部71−3a'、状態条件判定部72−3a−1',72−3a−2'を有している。
このように、第4実施形態では、ツリー条件判定部71及び状態条件判定部72を、端末内外に設置することで、適切な条件判定を行うことができる。
なお、第4実施形態において、例えば拡張機能プラグイン32は、手の動きのジェスチャやNear Field Communication(NFC)タグを検出する周辺機器とBluetooth(登録商標)等により接続して、ジェスチャやNFCの検出をイベントとして発行する。拡張機能プラグイン32の種類については、これに限定されるものではなく、例えば第1実施形態に示す通知機能や発生機能を有する拡張機能プラグインであってもよい。
また、第4実施形態では、判定条件の中のANDやORで結合された部分条件のうち、部分条件の中が同じアクセス先(端末内又はネットワーク上)、又は、拡張機能プラグインの同じプラグイン名(一意名)の部分条件は分割せずにまとめてその宛先で条件判定を行わせる。図23の例では、機能「wristjesture」と「NFC」とが同じ一意名(com.AAA.xx.wristset)であるため、この部分条件を拡張機能プラグイン(第2のプラグイン)32aで実行させる。
ANDやORで結合された複数の条件による複合条件や、それを上述したような割り当て条件で割り当てられた各部分条件は、例えば図23に示すような条件ツリーにより管理される。ここで、ツリーで結合されたANDやOR、また「wristjesture」や「NFC」、「Posture」等は、ノードに相当する。各ツリー条件判定部71は、条件を満たす場合や、条件を満たさなくなった場合に、対応するイベントを上位ノードに発生させる。上位ノードのツリー条件判定部71は、それを受けて自身の条件判定を行う。
また、第4実施形態では、図26に示すように、端末装置13''bは、(ネットワーク上)拡張機能プラグイン管理部25−2に対してもツリー条件判定部71−3を設定し、その下位ノードとして拡張機能プラグイン32−2a,32−2b、33に対して状態条件判定部72−4a,74−4b、73を設定する。
例えば、図23〜図25に示す例では、上位ノードである第1のプラグイン31のツリー条件判定部71−1は、インストール済み機能情報リストに含まれるアクセス先、この例ではプラグイン名(一意名)を確認し、同一のプラグイン名の機能をまとめて、部分条件判定を依頼する。
例えば、図23〜図25の例では、「NFC」機能と、「wristjesture」機能とが、同一のプラグイン名(com.AAA.xx.wristset)であるため、条件ツリーの中で「NFC」機能と「wristjesture」機能とにより判定されるAND以下の部分状態条件判定処理を依頼する。
なお、第4実施形態では、部分条件判定に対する条件定義を登録することができる。例えば、図23〜図25の例において、「NFC」機能と、「wristjesture」機能とにおける状態成立内部イベント、状態成立内部イベントを条件定義する。NFC機能から、状態成立内部イベント(例えばidm0を検出したときに発行するイベント)が発行されると、条件ツリー73のNFCノードの状態をtrueとし、条件不成立内部イベント(例えばidm1を検出したときに発行するイベント)が発行されると、条件ツリーのNFCノードの状態をfalseと判定するが、定義内容については、これに限定されるものではない。
また、第4実施形態では、ネットワーク上機能管理への条件の分割も同様に対応することができる。例えば、図26の例では、「display」機能と、「humandet」機能と、「mailchecker」機能とが、同一のアクセス先(ws://***)である。そのため、例えば、図26に示す条件ツリー73の中で「display」機能と「humandet」機能とにより判定されるAND以下の状態条件判定処理を(ネットワーク上)拡張機能プラグイン管理部25−2に依頼することができる。
<状態条件判定部における機能構成>
図27は、状態条件判定部における機能構成の一例を示す図である。図28は、状態条件判定部の処理内容を説明するための図である。図27の例において、状態条件判定部72は、状態条件登録受付部81と、状態条件記憶部82と、状態条件マッチング判定部83と、状態管理部84と、機能固有ロジック85とを有する。
状態条件登録受付部81は、例えばアプリ実行部24等で実行される条件ツリー駆動プログラム90等から第4実施形態を実現するための状態条件の登録を受け付ける。なお、状態条件は、1又は複数受け付けてもよい。状態条件記憶部82は、受け付けた状態条件を記憶する。
条件ツリー駆動プログラム90は、例えば上位ノードのツリー条件判定部71等であってもよい。例えば、条件ツリー駆動プログラム90は、例えば上述した拡張機能プラグイン管理部25にあるツリー条件判定部や拡張機能プラグインにあるツリー条件判定部等である。なお、必ずしもこれらのツリー条件判定部から状態条件判定部を利用する必要はない。また、拡張機能プラグイン管理部25と第1のプラグイン31とが中継し、アプリ実行部24等で実行されるアプリから、状態条件を登録し、状態変化イベントを受け取ってもよい。
状態条件マッチング判定部83は、機能固有ロジック85から機能固有デバイス(センサ等)91で得られた情報を取得し、取得した情報と、状態条件記憶部82に記憶された状態条件にマッチするか否かを判定する。なお、図27に示す状態条件判定部72は、一例として、拡張機能プラグイン32が有する状態条件判定部72の例を示している。そのため、状態条件判定部72は、周辺機器15に対応した機能固有デバイス(センサ等)91からの情報(例えば、温度センサであれば、所定時間毎の温度等)を受け取る。
状態管理部84は、状態条件マッチング判定部83による判定結果が、状態条件にマッチしていた場合に、対応する状態変化イベントを上位のノード(例えば、条件ツリー駆動プログラム90)等で出力する。
機能固有ロジック85は、機能固有デバイス91から得られる情報を取得し、対応する内部イベントを状態条件マッチング判定部83に送出する。なお、機能固有デバイス91の種類や数については、これに限定されるものではない。
また、第4実施形態では、例えば図28に示すように、例えばある状態が成立する時の内部イベント(状態成立内部イベント)と、その状態が不成立となる時の内部イベント(状態不成立内部イベント)のセットを指定することができるが、これに限定されるものではない。第4実施形態では、状態の成立条件と不成立条件を指定し、内部イベントとの合致を評価することで状態値(true、false)の遷移を行うことができる。なお、図28の例では、状態成立内部イベントを{type:'detected','ndef':'abc'}とし、状態不成立内部イベントを{type:'detected','ndef':'def'}と定義しているが、これに限定されるものではない。
<状態条件判定処理の一例>
図29は、状態条件判定処理の一例を示すフローチャートである。図29の例において、状態条件判定部72は、機能固有処理として上述したような機能固有デバイス91からの情報を受け取り(S141)、それをもとに生成した内部イベント(例えば、所定時間毎の温度)等を発行する(S142)。
次に、状態条件判定部72は、状態条件記憶部82に記憶された登録済みの状態条件の数だけ以下の処理を繰り返す(S143)。
状態条件判定部72は、発行されたイベントが状態成立条件にマッチしたか否かを判断し(S144)、マッチしていない場合(S144において、NO)、発行されたイベントが状態不成立にマッチしたか否かを判断する(S145)。次に、状態条件判定部72は、発行されたイベントが状態不成立にマッチしていない場合(S145において、NO)、未処理の次の状態条件に対して処理を行う。
また、S144の処理において、発行されたイベントが状態成立条件にマッチした場合(S144において、YES)、状態条件判定部72は、状態条件に対応する状態値が真(true)であるか否かを判断する(S146)。状態条件に対応する状態値が真(true)である場合(S146において、YES)、未処理の次の状態条件に対して処理を行う。また、状態条件に対応する状態値が真(true)でない(falseである)場合(S146において、NO)、状態遷移(false→true)を行い(S147)、状態遷移通知(状態変化イベント)を上位ノードに通知する(S148)。
また、S145の処理において、発行されたイベントが状態不成立にマッチしている場合(S145において、YES)、状態条件判定部72は、条件に対応する状態値が偽(false)であるか否かを判断する(S149)。条件に対応する状態値が偽(false)である場合(S149において、YES)、状態条件判定部72は、未処理の次の状態条件に対して処理を行う。
また、S149の処理において、状態条件に対応する状態値が偽(false)でない(trueである)場合(S149において、NO)、状態遷移(true→false)を行い(S150)、状態遷移通知(状態変化イベント)を上位ノードに通知する(S148)。また、上述したS148の通知後、未処理の次の状態条件に対して処理を行う。
<第4実施形態における機能拡張処理の一例を示すシーケンス>
図30は、第4実施形態における機能拡張処理(条件定義登録)の一例を示すシーケンスである。図30の例では、モバイルアプリ61、アプリ実行部24、第1のプラグイン31、拡張機能プラグイン管理部25((端末内)拡張機能プラグイン管理部25−1、(ネットワーク上)拡張機能プラグイン管理部25−2)、(端末内)拡張機能プラグイン32−1、及び(ネットワーク上)拡張機能プラグイン32−2を用いた処理の一例を示している。
図30の例において、モバイルアプリ61は、アプリが受信したいイベントの条件定義である、上述したような状態条件の論理積(AND)や論理和(OR)で記述されたツリー条件定義を第1のプラグイン31へ出力する(S161)。第1のプラグイン31は、ツリー判定条件を満たした場合又は満たさなくなった場合に、モバイルアプリ61がイベントを受け取るコールバック関数を登録する(S162)。S162の処理で登録されるコールバック関数は、例えば第1のプラグイン31により割り振られた条件定義IDと共に記憶部23等に記憶される。
第1のプラグイン31は、ツリー条件の解析やディスパッチ(例えば、複数の処理を内容や用途等に応じて振り分けること)等を行う。第1のプラグイン31は、ANDやOR等の演算子と個々の状態条件をノードとする条件定義ツリーを生成する(S163)。また、第1のプラグイン31は、個々の条件ノードの機能名に対応するアクセス先を機能情報リストから参照し、下位の階層から順に解析して、各ANDやORのノードで、配下のノードのアクセス先が全て同じ場合に、ANDやORのノードのアクセス先に同じアクセス先を入力する(S164)。
次に、第1のプラグイン31は、上位の階層から解析し、アクセス先の入ったノードがあった場合に、そのアクセス先が端末装置13内(local)であれば、そのノード以下の条件定義を端末内機能管理へ送信し、ノード以下の部分条件を登録する(S165)。また、アクセス先が端末装置13外(ネットワーク上アドレスのノード)であれば、そのノード以下の条件定義を(ネットワーク上)拡張機能プラグイン管理部25−2へ送信し、そのノード以下の部分条件を登録する。
(端末内)拡張機能プラグイン管理部25−1は、部分条件定義を識別する識別情報(部分条件定義ID)を生成し、下位ノードから順に、一意名埋め処理を行う(S166)。S166の処理では、例えばあるノードの全配下ノードが同じプラグイン名(一意名)である場合に、そのノードのプラグイン名(一意名)を同じ値にする処理等を行うが、これに限定されるものではない。
第1のプラグイン31は、一意名埋め処理の結果を受信し(S167)、(端末内)拡張機能プラグイン管理部25−1に登録したノードに部分条件定義IDを保存する(S168)。また、(端末内)拡張機能プラグイン管理部25−1は、上層ノードから順に、一意名の(端末内)拡張機能プラグイン32−1にノード以下部分ツリー条件、及び状態条件を登録する(S169)。(端末内)拡張機能プラグイン32−1は、部分条件定義IDを生成し(S170)、その結果を(端末内)拡張機能プラグイン管理部25−1に出力する(S171)、(端末内)拡張機能プラグイン管理部25−1は、拡張機能プラグイン32−1に登録したノードに部分条件定義IDを保存する(S172)。
なお、上述した条件定義登録におけるS165〜S172の処理は、ネットワーク上アドレスのノードに対しても同様に行う(S173)。これにより、(ネットワーク上)拡張機能プラグイン管理部25−2や(ネットワーク上)拡張機能プラグイン32−2等に対しても(端末内)拡張機能プラグイン管理部25−1や(端末内)拡張機能プラグイン32−1等と同様に対応する部分条件判定を行うための条件定義を登録することができる。
図31は、第4実施形態における機能拡張処理(条件イベント発生)の一例を示すシーケンスである。図31の例では、モバイルアプリ61、アプリ実行部24、第1のプラグイン31、(端末内)拡張機能プラグイン管理部25−1、及び拡張機能プラグイン32−1を用いた処理の一例を示している。
図31の例において、(端末内)拡張機能プラグイン32−1は、状態条件を満たす場合や満たさない場合における状態変化イベントを、(端末内)拡張機能プラグイン管理部25−1に送信する(S181)。なお、S181の処理における状態変化イベントとしては、例えば部分条件定義IDとtrue又はfalse等の状態変化情報等であるが、これに限定されるものではない。
(端末内)拡張機能プラグイン管理部25−1は、部分条件定義IDのノード検索を行い(S182)、当該ノードの直近状態を更新し(S183)、当該ノードから上位層(上位ノード)に対し順番に条件判定を行う(S184)。
次に、(端末内)拡張機能プラグイン管理部25−1は、自身が判定する部分ツリーの最上位ノード(トップノード)の判定がtrueからfalseへ、又は、falseからtrueへ変化すると、状態変化イベントを第1のプラグイン31に送信する(S185)。なお、S185の処理における状態変化イベントとしては、例えば(端末内)拡張機能プラグイン管理部25−1における最上位ノードの部分条件定義ID、true又はfalse等の状態変化情報等であるが、これに限定されるものではない。
第1のプラグイン31は、部分条件定義IDのノードを検索し(S186)、当該ノードの直近状態を更新し(S187)、当該ノードから上位層(上位ノード)に対し順番に条件判定を行う(S188)。また、第1のプラグイン31は、第1のプラグイン31における最上位ノードの直近状態が変化した場合、条件定義IDからコールバック関数を取得し(S189)、trueからfalseへ、又は、falseからtrueへ状態が変化したことを通知するイベントのコールバック関数呼び出しを行う(S190)。
なお、図31の例では、(端末内)拡張機能プラグイン管理部25−1及び(端末内)拡張機能プラグイン32−1における処理を、(ネットワーク上)拡張機能プラグイン管理部25−2及び(ネットワーク上)拡張機能プラグイン32−2、33における処理にも同様に適用することができるため、ここでの具体的な処理は省略する。
<条件ツリー(ノードツリー)の一例>
ここで、上述した第4実施形態における条件ツリー(ノードツリー)の一例について図を用いて説明する。図32、図33は、第4実施形態におけるノードツリーの一例を示す図(その1,その2)である。図32は、ノードツリーの生成例を示す。図33は、ノードツリーのイベント発行例を示す。なお、図32,図33は一例であり、これに限定されるものではない。条件の記述例等については、これに限定されるものではない。
第4実施形態では、例えばノードツリーに対応する全体の条件が図32(A)に示すような記述式により記述される。このノードの構成は、図32(B)に示すように定義することができ、これに対応させて図32(C)に示すようなノードツリーを生成することができる。
各ノードの情報としては、例えば「ノードタイプ」、「ノード名」、「アクセス先」、「一意名(プラグイン名)」、「親ノード」、「部分条件定義ID」、「直近状態」、「配下のノードリスト」、「条件」等があるが、これに限定されるものではない。
ノードタイプは、例えばAND、OR等の演算子やその他の個別の状態条件等を設定することができる。個別の状態条件とは、例えば周辺機器のソフトウェアモジュールやセンサ等に対して設定される条件等である。例えば、ソフトウェアモジュールが、NFC部品(機能)の場合には、過去に検知したタグであるか、10分以内にあるタグを検知したか、あるタグを検知してから別のタグを検知したか等の各条件を設定することができる。また、例えばソフトウェアモジュールが温度検知部品(機能)の場合には、温度が20度以上か、温度が20度〜25度の間かどうか等を状態条件に設定することができるが、状態条件設定については、これに限定されるものではない。
また、これらの状態条件の合致を評価する対象として、例えば各部品の内部イベントがある。内部イベントは、アプリに通知されない部品内のイベントであるため、高頻度で発生してもアプリ側の処理負荷にはならない。また、内部イベントは、部品内で閉じているため、その都度アプリを起こすことがなく、省電力化につながる。
また、第4実施形態では、内部イベントを複数の項目名及び値のセットによって構成し、状態条件もこれにあわせ項目名とそれに対する正規表現等の評価規則のセットからなるものとする。ここで、図34は、内部イベントと状態条件設定の具体例を示す図である。図34(A)は、内部イベントの一例を示し、図34(B)は、状態条件判定部72は、判定時に用いられる状態条件の一例を示している。図34(A)に示す内部イベントの一例では、温度(temperature)、湿度(humidity)、時(hour)、分(min)を有しているが種類や数については、これに限定されるものではない。
図34(A)に示すような内部イベントの値に対し、図34(B)に示すような正規表現等を用いて、各状態条件(例えば、気温が20のとき合致、毎時30分のとき合致、毎時30分かつ気温が20のとき合致等)を設定することができる。このように、第4実施形態では、内部イベントの各項目に対して独立に正規表現による一致評価を行った結果の論理積又は論理和等を評価することによって、柔軟な条件指定が可能となる。なお、状態条件の設定例は、図34(B)の例に限定されるものではない。
ノード名は、ノードを識別するための情報である。一意名は、プラグイン名を識別するための識別情報である。親ノードは、1つ上位のノード情報である。トップノードの親ノードには、nullが設定される。部分条件定義IDは、部分条件判定が設定された場合に、その識別情報が設定される。直近状態は、そのノードの直近の変化の状態を示す情報である。変化がない場合には、nullが設定される。配下のノードリストは、自己ノードの1つの下の層に配置されたノード情報である。条件は、各ノードにおける条件の情報である。
例えば、図32(C)の例では、ノード1,2,3によるツリー条件判定が第1のプラグイン31のツリー条件判定部71で実行される処理である。また、図32(C)に示すノード2,4,5によるツリー条件判定は、一意名(com.AAA.xx.wristest)で同一であるため、対応する下位ノード(例えば、拡張機能プラグイン32)のツリー条件判定部71で処理が行われ、ノード4,5の状態条件判定は同じ拡張機能プラグイン32で行われる。また、図32(C)に示すノード3の状態条件判定は、一意名(com.AAA.xx.posture)に対応する下位ノードの状態条件判定部72で処理が行われる。
なお、図32(C)に示すようなノードツリーに対して、配下のアクセス先や一意名に対応させて上位ノードのアクセス先や一意名にも同一の情報を格納する一意名埋め処理やアクセス先埋め処理等を行う。例えば配下のノードのアクセス先が「local」の場合には、上位ノードのアクセス先を「null」から「local」に変更する等の処理を行う。
上述したように、第4実施形態では、生成したノードツリーにより、各ノードに対応する各状態条件判定部によりそれぞれの条件判定が実施され、上位ノードは、下位ノードの判定結果をツリー条件判定で利用して自己の条件判定を行うことができる。そのためCPU等の処理負荷を低減することができる。
例えば、下位ノードからイベントが発生した場合には、図33に示すような流れとなる。なお、図33の例では、第1のプラグインが有するツリーと、(端末内)拡張機能プラグイン管理部25−1が有するツリーと、(端末内)拡張機能プラグイン32−1の一例であるcom.AAA.xx.posture機能が有するツリーと、(端末内)拡張機能プラグイン32−1の一例であるcom.AAA.xx.wristest機能が有するツリーとが示されている。
第1のプラグインが有するツリーでは、ノード1における条件判定を行う。(端末内)拡張機能プラグイン管理部25−1が有するツリーでは、ノード1〜3における条件判定を行う。com.AAA.xx.posture機能が有するツリーでは、ノード3における条件判定を行う。com.AAA.xx.wristest機能が有するツリーでは、ノード2,4,5における条件判定を行う。
(端末内)拡張機能プラグイン管理部25−1が有するツリーに含まれるノード2は、com.AAA.xx.wristest機能が有するツリー条件判定部71からノード2の状態の変化イベントを受け取る。受け取るイベントとしては、例えば「eventname:node2,state:true(又はfalse)」等であるが、これに限定されるものではない。また、(端末内)拡張機能プラグイン管理部25−1が有するツリーに含まれるノード3は、com.AAA.xx.posture機能が有するツリー条件判定部71からノード3の状態変化イベントを受け取る。受け取るイベントとしては、例えば「eventname:node3,state:true(又はfalse)」であるが、これに限定されるものではない。
(端末内)拡張機能プラグイン管理部25−1が有するツリーでは、下位層からノード2及びノード3に対するイベントを受信した場合に、それぞれのノードの直近状態に条件に応じたtrue又はfalseを格納する。また、ノード2,3の直近状態からノード1を評価して、部分定義ID名のイベントを第1のプラグインへ発行する。これにより、プラグインが有するノード1では、(端末内)拡張機能プラグイン管理部25−1が有するツリー条件判定結果を用いて状態を判定することができる。
上述したように、第4実施形態では、複数の拡張機能を用いる複合的な条件によるイベントをアプリが利用したい場合に、アプリが利用したい条件はアプリ毎に異なるため、アプリが任意の条件を設定して、その条件のtrue/falseの変化時にイベントを発行する状態条件判定部72を拡張機能プラグイン32に持たせる。
例えば、第4実施形態では、状態条件判定部72を第1のプラグイン31、拡張機能プラグイン管理部25、拡張機能プラグイン32にそれぞれ持たせ、条件を上位層の第1のプラグイン31から下位層の拡張機能プラグイン32まで分割しながら部分条件として設定していく。各部は、自身に登録された部分条件を満たしたら上位にイベントを送る。これにより、第4実施形態では、例えば状態条件判定部72を各周辺機器のプラグイン(第2のプラグイン)又は各サーバのプラグイン(第3のプラグイン)で行う構成となるため、アプリ側(第1のプラグイン)の処理負荷を低減し、省電力化することができる。
また、内部イベントは、各状態条件判定部72の中で閉じたイベントであり、固有のタイミングで発行される。また、状態条件判定部72は、自らが発行した内部イベントと、登録済みの状態条件を比較することで自らが保有している状態の遷移を行う。この処理は、各状態条件判定部72の種類等によらないため、全ての条件判定に共通する処理として自動化することができる。つまり、第4実施形態では、状態の保持管理処理を全て自動化できるため、条件判定等の処理を実装する必要がなくなり、開発者の負担が大幅に低減できる。また、内部イベントの形式を工夫することにより、正規表現と組み合わせて柔軟な条件指定が可能となる。
上述したように、本実施形態によれば、アプリが周辺機器又はサーバを利用するための機能拡張を迅速に行えるようにすることができる。例えば、端末装置を周辺機器(センサ等も含む)又はサーバと接続して連携させる場合、その周辺機器又はサーバに対応するプラグインを組み込んでアプリ実行環境をビルドし、端末装置にインストールしている。そして、新たなプラグインを追加したい場合や、予め組み込んだプラグインを削除する場合には、一旦実行中のアプリ実行環境を停止し、インストールされているプラグインが組み込まれたアプリ実行環境をアンインストールして、新たにアプリ実行環境とプラグインの接続関係を再ビルドしてインストールする必要がある。また、従来では、「どの状況条件でどのアプリを実行する」というルールに基づいてアプリ切り替えを行う場合がある。その場合、条件が変わる毎にアプリ実行環境とプラグインの接続関係とを再ビルドするために、アプリ実行環境を一旦停止して再動作させなければならず、配信したモバイルアプリを迅速に実行することができない。
そこで、本実施形態では、例えばアプリの実行環境に周辺機器又はサーバのソフトウェアモジュールにおいて共通する第1のプラグインを接続し、各周辺機器固有の第2のプラグイン又は各サーバ固有の第3のプラグインを第1のプラグインを介して、ウェブアプリの実行環境に接続して配置しておいて、端末装置が制御する他の周辺機器又はサーバを追加する場合に、他の周辺機器又はサーバに対応する第2、第3のプラグインを第1のプラグインを介して、ウェブアプリの実行環境に接続して配置する。また、本実施形態では、端末装置が制御する周辺機器又はサーバを削除する場合には、ウェブアプリの実行環境と第1のプラグインの接続関係を維持しつつ、削除する周辺機器又はサーバに対応する第2、第3のプラグインを削除する。これにより、ウェブアプリがセンサや機器又はサーバを利用するための機能拡張を迅速に行うことができる。
以上、実施例について詳述したが、特定の実施例に限定されるものではなく、特許請求の範囲に記載された範囲内において、種々の変形及び変更が可能である。また、上述した実施例の一部又は全部を組み合わせることも可能である。
なお、以上の実施例に関し、更に以下の付記を開示する。
(付記1)
端末装置が、
1又は複数の周辺機器を制御するアプリケーションの実行環境に、前記周辺機器に共通する第1のプラグインを接続し、
前記周辺機器のそれぞれに対応する第2のプラグインを、前記第1のプラグインを介して前記アプリケーションの実行環境に接続されるように配置し、
前記端末装置が制御する他の周辺機器を追加する場合に、前記アプリケーションの実行環境と前記第1のプラグインとの接続関係を維持しつつ、前記他の周辺機器に対応する第2のプラグインを、前記第1のプラグインを介して前記アプリケーションの実行環境に接続する、ことを特徴とする機能拡張方法。
(付記2)
前記端末装置が制御する周辺機器に対応する第2のプラグインを削除する場合に、前記アプリケーションの実行環境と前記第1のプラグインとの接続関係を維持しつつ、削除対象の周辺機器に対応する第2のプラグインを削除することを特徴とする付記1に記載の機能拡張方法。
(付記3)
前記端末装置の位置情報に対応して実行可能な周辺機器の情報を取得し、
取得した前記周辺機器の情報に基づいて、前記周辺機器に対応する前記第2のプラグインの接続制御を行うことを特徴とする付記1又は2に記載の機能拡張方法。
(付記4)
前記端末装置の位置や時刻、端末内部状態の変化、周辺の変化、及び外部からのイベント受信のうち、少なくとも1つを含む状態変化に対応して、現在の状態で実行可能な周辺機器の情報を取得することを特徴とする付記3に記載の機能拡張方法。
(付記5)
前記第2のプラグインは、
第1のプラグインから指定された発行条件に基づいて、前記端末装置の位置、時刻、端末内部状態の変化、周辺の変化、及び外部からのイベント受信のうち、少なくとも1つを含む通知情報を発行し、指定された発行条件に基づいて通知情報を生成するか否かの判定処理を、前記第2のプラグインに対応する周辺機器で実行可能な場合に、前記判定処理を周辺機器で実行させることを特徴とする、付記1乃至4の何れかに記載の機能拡張方法。
(付記6)
前記判定処理のうち、複数の判定処理の結果を組み合わせた複合的な判定処理について、複数の判定処理が同一の第2のプラグインに対応する周辺機器で実行可能な場合に、複数の判定処理とそれら判定処理の結果を組み合わせた複合的な判定処理の一部又は全部を周辺機器で実行することを特徴とする、付記5に記載の機能拡張方法。
(付記7)
前記第1のプラグインは、実行するアプリケーションが利用する機能を記載した機能情報リストを取得し、
取得した前記機能情報リストから前記周辺機器を利用できる機能が内部にない場合に、前記周辺機器に対応する第2のプラグインを選択して取得することを特徴とする付記1乃至6の何れか1項に記載の機能拡張方法。
(付記8)
前記第1のプラグインは、
前記アプリケーションが停止する時に、前記アプリケーションに対応する前記機能情報リストを削除すると共に、保持する機能情報リストにない第2のプラグインを削除することを特徴とする付記7に記載の機能拡張方法。
(付記9)
端末装置が、
1又は複数のサーバを制御するアプリケーションの実行環境に、前記サーバに共通する第1のプラグインを接続し、
前記サーバのそれぞれに対応する第3のプラグインを、前記第1のプラグインを介して前記アプリケーションの実行環境に接続されるように配置し、
前記端末装置が制御する他のサーバを追加する場合に、前記アプリケーションの実行環境と前記第1のプラグインとの接続関係を維持しつつ、前記他のサーバに対応する第3のプラグインを、前記第1のプラグインを介して前記アプリケーションの実行環境に接続することを特徴とする機能拡張方法。
(付記10)
前記端末装置が制御するサーバに対応する第3のプラグインを削除する場合に、前記アプリケーションの実行環境と前記第1のプラグインとの接続関係を維持しつつ、削除対象のサーバに対応する第3のプラグインを削除することを特徴とする付記9に記載の機能拡張方法。
(付記11)
端末装置が、
ブロードキャストにより通信される1又は複数の周辺機器を制御するアプリケーションの実行環境に、前記周辺機器に共通する第1のプラグインを接続し、
前記周辺機器のそれぞれに対応する第4のプラグインを、前記第1のプラグインを介して前記アプリケーションの実行環境に接続されるように配置し、
前記第4のプラグインは、定期的、又は、リクエストのブロードキャスト発信があったことを受けて、前記端末装置に自己の機能情報をブロードキャスト発信し、
前記端末装置は、該発信された機能情報を受け付けて、実行可能な周辺機器の情報を生成し、前記アプリケーションの実行環境と前記第1のプラグインとの接続関係を維持しつつ、前記周辺機器に対応する第4のプラグインを、前記第1のプラグインを介して前記アプリケーションの実行環境に接続する、ことを特徴とする機能拡張方法。
(付記12)
1又は複数の周辺機器を制御するアプリケーションの実行環境に、前記周辺機器に共通する第1のプラグインを接続し、
前記周辺機器のそれぞれに対応する第2のプラグインを、前記第1のプラグインを介して前記アプリケーションの実行環境に接続されるように配置し、
他の周辺機器を追加する場合に、前記アプリケーションの実行環境と前記第1のプラグインとの接続関係を維持しつつ、前記他の周辺機器に対応する第2のプラグインを、前記第1のプラグインを介して前記アプリケーションの実行環境に接続する、処理をコンピュータに実行させる機能拡張プログラム。
(付記13)
1又は複数のサーバを制御するアプリケーションの実行環境に、前記サーバに共通する第1のプラグインを接続し、
前記サーバのそれぞれに対応する第3のプラグインを、前記第1のプラグインを介して前記アプリケーションの実行環境に接続されるように配置し、
端末装置が制御する他のサーバを追加する場合に、前記アプリケーションの実行環境と前記第1のプラグインとの接続関係を維持しつつ、前記他のサーバに対応する第3のプラグインを、前記第1のプラグインを介して前記アプリケーションの実行環境に接続する、処理をコンピュータに実行させる機能拡張プログラム。
(付記14)
ブロードキャストにより通信される1又は複数の周辺機器を制御するアプリケーションの実行環境に、前記周辺機器に共通する第1のプラグインを接続し、
前記周辺機器のそれぞれに対応する第4のプラグインを、前記第1のプラグインを介して前記アプリケーションの実行環境に接続されるように配置し、
前記第4のプラグインは、定期的、又は、リクエストのブロードキャスト発信があったことを受けて、前記端末装置に自己の機能情報をブロードキャスト発信し、
端末装置は、該発信された機能情報を受け付けて、実行可能な周辺機器の情報を生成し、前記アプリケーションの実行環境と前記第1のプラグインとの接続関係を維持しつつ、前記周辺機器に対応する第4のプラグインを、前記第1のプラグインを介して前記アプリケーションの実行環境に接続する、処理をコンピュータに実行させる機能拡張プログラム。
(付記15)
1又は複数の周辺機器を制御するアプリケーションの実行環境に、前記周辺機器に共通する第1のプラグインを接続し、前記周辺機器のそれぞれに対応する第2のプラグインを、前記第1のプラグインを介して前記アプリケーションの実行環境に接続されるように配置するプラグイン管理部を有し、
前記プラグイン管理部は、他の周辺機器を追加する場合に、前記アプリケーションの実行環境と前記第1のプラグインとの接続関係を維持しつつ、前記他の周辺機器に対応する第2のプラグインを、前記第1のプラグインを介して前記アプリケーションの実行環境に接続することを特徴とする端末装置。
(付記16)
1又は複数のサーバを制御するアプリケーションの実行環境に、前記サーバに共通する第1のプラグインを接続し、前記サーバのそれぞれに対応する第3のプラグインを、前記第1のプラグインを介して前記アプリケーションの実行環境に接続されるように配置するプラグイン管理部を有し、
前記プラグイン管理部は、制御する他のサーバを追加する場合に、前記アプリケーションの実行環境と前記第1のプラグインとの接続関係を維持しつつ、前記他のサーバに対応する第3のプラグインを、前記第1のプラグインを介して前記アプリケーションの実行環境に接続することを特徴とする端末装置。
(付記17)
ブロードキャストにより通信される1又は複数の周辺機器を制御するアプリケーションの実行環境に、前記周辺機器に共通する第1のプラグインを接続し、前記周辺機器のそれぞれに対応する第4のプラグインを、前記第1のプラグインを介して前記アプリケーションの実行環境に接続されるように配置するプラグイン管理部を有し、
前記プラグイン管理部は、前記第4のプラグインにより、定期的、又は、リクエスト要求に対して、ブロードキャスト発信された機能情報を受け付けて、実行可能な周辺機器の情報を生成し、前記アプリケーションの実行環境と前記第1のプラグインとの接続関係を維持しつつ、前記周辺機器に対応する第4のプラグインを、前記第1のプラグインを介して前記アプリケーションの実行環境に接続することを特徴とする端末装置。