(57)【要約】【課題】エミュレータの、より迅速な機種対応を可能とする。【解決手段】共通動作部は、アプリケーションの各処理のうち、複数の機種に共通する機種共通処理の動作検証を、各機種共通の動作を実現する第１のプログラムで行い、動作検証結果を前記アプリケーションに返信する。処理依頼部は、各機種固有の機種依存処理の動作検証を、各機種固有の動作を実現する第２のプログラムで行う外部機器に依頼する。取得部は、外部機器から機種依存処理の動作検証結果を取得して、アプリケーションに返信する。そして、第１のプログラムは、サードベンダなどに迅速に提供する。また、第２のプログラムは外部機器に実装しておき、バージョンアップのたびに更新する。これにより、エミュレータの、より迅速な機種対応を可能とすることができる。【選択図】図１
2015230623.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションの各処理のうち、複数の機種に共通する機種共通処理の動作検証を、各機種共通の動作を実現する第１のプログラムで行い、動作検証結果を前記アプリケーションに返信する共通動作部と、
各機種固有の機種依存処理の動作検証を、各機種固有の動作を実現する第２のプログラムで行う外部機器に依頼する処理依頼部と、
前記外部機器から前記機種依存処理の動作検証結果を取得して、前記アプリケーションに返信する取得部と
を有する情報処理装置。
【請求項２】
前記外部機器に対して、前記機種依存処理の動作検証の可否の問い合わせを行う問い合わせ部と、
前記問い合わせ部の問い合わせ結果から、前記機種依存処理の動作検証が可能な外部機器を判断する判断部と、
前記判断部で、前記機種依存処理の動作検証が可能であると判断された前記外部機器を示す第１のリスト情報を表示部に表示する表示制御部と、
前記第１のリスト情報で示される各外部機器に対する通信コネクションを確立するコネクション確立部と、をさらに備え、
前記処理依頼部は、前記第１のリスト情報から選択された外部機器に対して、前記コネクション確立部で確立されている通信コネクションを用いて、前記機種依存処理の動作検証を依頼すること
を特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記コネクション確立部は、前記外部機器が備える、前記機種依存処理の設定内容に応じて前記第２のプログラムを動作させる動作制御部に対して、前記機種依存処理の設定内容を通知すること
を特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記判断部は、通信回線の接続が可能であり、かつ、製品化されていることを示すバージョン番号が付されている前記外部機器を、前記機種依存処理の動作検証が可能な外部機器として判断し、前記第１のリスト情報に含めて表示すること
を特徴とする請求項２または請求項３に記載の情報処理装置。
【請求項５】
前記外部機器の前記機種依存処理の一覧を示す第２のリスト情報を取得するリスト取得部を、さらに備え、
前記判断部は、前記問い合わせ部の問い合わせにより前記外部機器から返信される、前記外部機器が動作検証可能な前記機種依存処理の第１のリスト情報と、取得された前記外部機器の前記機種依存処理の一覧を示す第２のリスト情報とを比較し、前記第２のリスト情報の全ての機種依存処理が、前記第１のリスト情報の機種依存処理に含まれる場合に、前記第１のリスト情報を返信した前記外部機器を、前記機種依存処理の動作検証が可能な外部機器と判断して前記第１のリスト情報に含めること
を特徴とする請求項２または請求項３に記載の情報処理装置。
【請求項６】
前記第１のプログラムは、各機種共通の動作を実現する機種共通エミュレータであり、前記第２のプログラムは、各機種固有の動作を実現する機種依存エミュレータであること
を特徴とする請求項１から請求項５のうち、いずれか一項に記載の情報処理装置。
【請求項７】
アプリケーションの各処理のうち、複数の機種に共通する機種共通処理の動作検証を、各機種共通の動作を実現する第１のプログラムで行い、動作検証結果を前記アプリケーションに返信する共通動作部と、
各機種固有の機種依存処理の動作検証を、各機種固有の動作を実現する第２のプログラムで行う外部機器に依頼する処理依頼部と、
前記外部機器から前記機種依存処理の動作検証結果を取得して、前記アプリケーションに返信する取得部と、を備えた情報処理装置と、
前記アプリケーションの各処理のうち、各機種固有の機種依存処理の動作検証を、各機種固有の動作を実現する第２のプログラムで行う外部機器と
を有する情報処理システム。
【請求項８】
前記情報処理装置は、
前記外部機器に対して、前記機種依存処理の動作検証の可否の問い合わせを行う問い合わせ部と、
前記問い合わせ部の問い合わせ結果から、前記機種依存処理の動作検証が可能な外部機器を判断する判断部と、
前記判断部で、前記機種依存処理の動作検証が可能であると判断された前記外部機器の第１のリスト情報を表示部に表示する表示制御部と、
前記第１のリスト情報の各外部機器に対する通信コネクションを確立するコネクション確立部と、をさらに備え、
前記処理依頼部は、前記第１のリスト情報を用いて選択された外部機器に対して、前記コネクション確立部で確立されている通信コネクションを用いて、前記機種依存処理の動作検証を依頼すること
を特徴とする請求項７に記載の情報処理システム。
【請求項９】
前記コネクション確立部は、前記外部機器が備える、前記機種依存処理の設定内容に応じて前記第２のプログラムを動作させる動作制御部に対して、前記機種依存処理の設定内容を通知すること
を特徴とする請求項８に記載の情報処理システム。
【請求項１０】
前記判断部は、通信回線の接続が可能であり、かつ、製品化されていることを示すバージョン番号が付されている前記外部機器を、前記機種依存処理の動作検証が可能な外部機器として判断し、前記第１のリスト情報に含めて表示すること
を特徴とする請求項８または請求項９に記載の情報処理システム。
【請求項１１】
前記外部機器の前記機種依存処理の一覧を示す第２のリスト情報を取得するリスト取得部を、さらに備え、
前記判断部は、前記問い合わせ部の問い合わせにより前記外部機器から返信される、前記外部機器が動作検証可能な前記機種依存処理の第１のリスト情報と、取得された前記外部機器の前記機種依存処理の一覧を示す第２のリスト情報とを比較し、前記第２のリスト情報の全ての機種依存処理が、前記第１のリスト情報の機種依存処理に含まれる場合に、前記第１のリスト情報を返信した前記外部機器を、前記機種依存処理の動作検証が可能な外部機器と判断して前記第１のリスト情報に含めること
を特徴とする請求項８または請求項９に記載の情報処理システム。
【請求項１２】
前記第１のプログラムは、各機種共通の動作を実現する機種共通エミュレータであり、前記第２のプログラムは、各機種固有の動作を実現する機種依存エミュレータであること
を特徴とする請求項７から請求項１１のうち、いずれか一項に記載の情報処理システム。
【請求項１３】
コンピュータを、
アプリケーションの各処理のうち、複数の機種に共通する機種共通処理の動作検証を、各機種共通の動作を実現する第１のプログラムで行い、動作検証結果を前記アプリケーションに返信する共通動作部と、
各機種固有の機種依存処理の動作検証を、各機種固有の動作を実現する第２のプログラムで行う外部機器に依頼する処理依頼部と、
前記外部機器から前記機種依存処理の動作検証結果を取得して、前記アプリケーションに返信する取得部として機能させること
を特徴とする情報処理プログラム。
【請求項１４】
前記コンピュータを、
前記外部機器に対して、前記機種依存処理の動作検証の可否の問い合わせを行う問い合わせ部と、
前記問い合わせ部の問い合わせ結果から、前記機種依存処理の動作検証が可能な外部機器を判断する判断部と、
前記判断部で、前記機種依存処理の動作検証が可能であると判断された前記外部機器の第１のリストを表示部に表示する表示制御部と、
前記第１のリストの各外部機器に対するコネクションを確立するコネクション確立部として、さらに機能させ、
前記処理依頼部は、前記第１のリストから選択された外部機器に対して、前記コネクション確立部で確立されているコネクションを用いて、前記機種依存処理の動作検証を依頼すること
を特徴とする請求項１３に記載の情報処理プログラム。
【請求項１５】
前記コネクション確立部は、前記外部機器が備える、前記機種依存処理の設定内容に応じて前記第２のプログラムを動作させる動作制御部に対して、前記機種依存処理の設定内容を通知すること
を特徴とする請求項１４に記載の情報処理プログラム。
【請求項１６】
前記判断部は、通信回線の接続が可能であり、かつ、製品化されていることを示すバージョン番号が付されている前記外部機器を、前記機種依存処理の動作検証が可能な外部機器として判断し、前記第１のリスト情報に含めて表示すること
を特徴とする請求項１４または請求項１５に記載の情報処理プログラム。
【請求項１７】
前記コンピュータを、前記外部機器の前記機種依存処理の一覧を示す第２のリスト情報を取得するリスト取得部として、さらに機能させ、
前記判断部は、前記問い合わせ部の問い合わせにより前記外部機器から返信される、前記外部機器が動作検証可能な前記機種依存処理の第１のリスト情報と、取得された前記外部機器の前記機種依存処理の一覧を示す第２のリスト情報とを比較し、前記第２のリスト情報の全ての機種依存処理が、前記第１のリスト情報の機種依存処理に含まれる場合に、前記第１のリスト情報を返信した前記外部機器を、前記機種依存処理の動作検証が可能な外部機器と判断して前記第１のリスト情報に含めること
を特徴とする請求項１４または請求項１５に記載の情報処理プログラム。
【請求項１８】
前記第１のプログラムは、各機種共通の動作を実現する機種共通エミュレータであり、前記第２のプログラムは、各機種固有の動作を実現する機種依存エミュレータであること
を特徴とする請求項１３から請求項１７のうち、いずれか一項に記載の情報処理プログラム。
【請求項１９】
共通動作部が、アプリケーションの各処理のうち、複数の機種に共通する機種共通処理の動作検証を、各機種共通の動作を実現する第１のプログラムで行い、動作検証結果を前記アプリケーションに返信する共通動作ステップと、
処理依頼部が、各機種固有の機種依存処理の動作検証を、各機種固有の動作を実現する第２のプログラムで行う外部機器に依頼する処理依頼ステップと、
取得部が、前記外部機器から前記機種依存処理の動作検証結果を取得して、前記アプリケーションに返信する取得ステップと
を有する情報処理方法。
【請求項２０】
問い合わせ部が、前記外部機器に対して、前記機種依存処理の動作検証の可否の問い合わせを行う問い合わせステップと、
判断部が、前記問い合わせ部の問い合わせ結果から、前記機種依存処理の動作検証が可能な外部機器を判断する判断ステップと、
表示制御部が、前記判断ステップで前記機種依存処理の動作検証が可能であると判断された前記外部機器を示す第１のリスト情報を表示部に表示する表示制御ステップと、
コネクション確立部が、前記第１のリスト情報で示される各外部機器に対する通信コネクションを確立するコネクション確立ステップと、をさらに備え、
前記処理依頼ステップでは、前記第１のリスト情報から選択された外部機器に対して、前記コネクション確立ステップで確立された通信コネクションを用いて、前記機種依存処理の動作検証を依頼すること
を特徴とする請求項１９に記載の情報処理方法。
【請求項２１】
前記コネクション確立ステップでは、前記外部機器が備える、前記機種依存処理の設定内容に応じて前記第２のプログラムを動作させる動作制御部に対して、前記機種依存処理の設定内容を通知すること
を特徴とする請求項２０に記載の情報処理方法。
【請求項２２】
前記判断ステップでは、通信回線の接続が可能であり、かつ、製品化されていることを示すバージョン番号が付されている前記外部機器を、前記機種依存処理の動作検証が可能な外部機器として判断し、前記第１のリスト情報に含めて表示すること
を特徴とする請求項２０または請求項２１に記載の情報処理方法。
【請求項２３】
リスト取得部が、前記外部機器の前記機種依存処理の一覧を示す第２のリスト情報を取得するリスト取得ステップを、さらに備え、
前記判断ステップでは、前記問い合わせステップでの問い合わせにより前記外部機器から返信される、前記外部機器が動作検証可能な前記機種依存処理の第１のリスト情報と、取得された前記外部機器の前記機種依存処理の一覧を示す第２のリスト情報とを比較し、前記第２のリスト情報の全ての機種依存処理が、前記第１のリスト情報の機種依存処理に含まれる場合に、前記第１のリスト情報を返信した前記外部機器を、前記機種依存処理の動作検証が可能な外部機器と判断して前記第１のリスト情報に含めること
を特徴とする請求項２０または請求項２１に記載の情報処理方法。
【請求項２４】
前記第１のプログラムは、各機種共通の動作を実現する機種共通エミュレータであり、前記第２のプログラムは、各機種固有の動作を実現する機種依存エミュレータであること
を特徴とする請求項１９から請求項２３のうち、いずれか一項に記載の情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理システム、情報処理プログラム、および情報処理方法に関する。
【背景技術】
【０００２】
複数の画像形成機能を備えた複合機（ＭＦＰ：Multifunction  Peripheral）のアプリケーションプログラム（以下、単に「アプリケーション」という）の開発は、実機を用いて行うことが好ましい。しかし、サードベンダ等が実機を購入してアプリケーションの開発を行うことは、サードベンダ等の金銭的負担となる。このため、サードベンダ等は、通常、複合機のメーカー側から提供された、複合機の機能を擬似的に実現するエミュレータを用いてアプリケーションの開発を行っている。
【０００３】
特許文献１（特開２０１１−４４１２７号）には、画像形成装置のアプリケーションプラットフォームと、アプリケーションプラットフォーム上で動作するアプリケーションとの開発作業を適切に効率化することを目的とした情報処理装置が開示されている。
【０００４】
この情報処理装置は、画像形成装置のアプリケーションプラットフォームを有する外部装置とネットワークを介して接続され、画像形成装置のプラットフォームをエミュレートするエミュレート手段を有している。エミュレート手段は、外部装置が有するプラットフォームに実装済みのインタフェースの一覧情報を受信し、実装情報保持手段に記録する。また、エミュレート手段は、実装情報保持手段に記録された一覧情報に基づいて、エミュレート手段を利用するアプリケーションから呼び出されたインタフェースが、外部装置に実装済みであるか否かを判定する。そして、エミュレート手段は、実装済みであると判定した場合に、呼び出されたインタフェースの実行要求を、外部装置に送信する。
【０００５】
これにより、アプリケーションの開発者は、実際のアプリケーションプラットフォーム上におけるアプリケーションの動作確認を行うことができる。また、アプリケーションプラットフォームの開発者は、アプリケーションの動作確認に伴って、アプリケーションプラットフォームの動作確認を行うことができる。このため、画像形成装置のアプリケーションプラットフォームと、アプリケーションプラットフォーム上で動作するアプリケーションとの開発作業を適切に効率化できる。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ここで、ＭＦＰのアプリケーションの開発において、同じＡＰＩ（Application  Program  Interface）でも、ＭＦＰの機種によって応答結果が異なる。このため、開発したアプリケーションの動作検証は、機種毎に行う必要がある。機種毎の動作検証を可能とする手法として、「各機種のエミュレータを、動作検証を行うパーソナルコンピュータ装置等にインストールする手法（第１の手法）」がある。また、各機種の動作検証を可能とする手法として、「各機種のデータおよびロジックを持つプラグインモジュールを、エミュレータに追加インストール可能な構成とする手法（第２の手法）」がある。第２の手法の場合、共通処理、ロジック、およびデータをエミュレータ本体に実装しておき、各機種のデータおよびロジックをプラグインモジュールとして追加する。
【０００７】
しかし、第１の手法の場合、各機種のエミュレータをインストールする必要があるため、面倒な手間を要する。また、第１の手法の場合、インストールされた各機種のエミュレータを保存するために大きな記憶領域（リソース）が必要となる。
【０００８】
また、第２の手法の場合、各機種のプラグインモジュールを準備する必要がある。特に、開発中の機種においては、頻繁に行われるバージョンアップの度に、プラグインモジュールを作成する必要があり、大変な手間を要する。また、第２の手法の場合、頻繁に行われるバージョンアップによるエミュレータの更新確認、および、プラグインモジュールのダウンロード等の手間を要する。また、第２の手法の場合、プラグインモジュールを追加する毎にエミュレータのデータサイズが変動する。すなわち、第２の手法の場合、プラグインモジュールを追加する毎にエミュレータのデータサイズが徐々に大きくなる。
【０００９】
このようなことから、従来は、各機種に対応したエミュレータを迅速に提供することは大変困難となっていた。
【００１０】
本発明は、上述の課題に鑑みてなされたものであり、エミュレータの機種対応を、より迅速に実現可能とした情報処理装置、情報処理システム、情報処理プログラム、および情報処理方法の提供を目的とする。
【課題を解決するための手段】
【００１１】
本発明は、上述した課題を解決し、目的を達成するために、アプリケーションの各処理のうち、複数の機種に共通する機種共通処理の動作検証を、各機種共通の動作を実現する第１のプログラムで行い、動作検証結果を前記アプリケーションに返信する共通動作部と、各機種固有の機種依存処理の動作検証を、各機種固有の動作を実現する第２のプログラムで行う外部機器に依頼する処理依頼部と、外部機器から機種依存処理の動作検証結果を取得して、アプリケーションに返信する取得部とを有する。
【発明の効果】
【００１２】
本発明によれば、エミュレータの機種対応を、より迅速に実現できるという効果を奏する。
【図面の簡単な説明】
【００１３】
【図１】図１は、実施の形態となるアプリ開発システムのシステム構成図である。
【図２】図２は、実施の形態となるアプリ開発システムに設けられている複合機（実機）のハードウェア構成図である。
【図３】図３は、実施の形態となるアプリ開発システムに設けられている実機のソフトウェア構成の一例を示す模式図である。
【図４】図４は、実施の形態となるアプリ開発システムに設けられている仮想実機および機種ＡＰＩ実装部のハードウェア構成図である。
【図５】図５は、実施の形態となるアプリ開発システムに設けられているアプリ開発装置のハードウェア構成図である。
【図６】図６は、実施の形態となるアプリ開発システムに設けられているアプリ開発装置の機能ブロック図である。
【図７】図７は、実施の形態となるアプリ開発システムに設けられているアプリ開発装置におけるＡＰＩの動作検証処理の流れを示すフローチャートである。
【図８】図８は、アプリ開発装置で表示される、擬似的に動作させる機器の選択画面の一例を示す図である。
【図９】図９は、アプリ開発装置で表示される、エミュレータ操作ＵＩの一例を示す図である。
【図１０】図１０は、開発アプリケーションから呼び出されたＡＰＩが「機種共通処理」である場合の動作検証処理の流れを示すフローチャートである。
【図１１】図１１は、開発アプリケーションから呼び出されたＡＰＩが「機種共通処理」である場合におけるアプリ開発システムの動作を模式的に示した図である。
【図１２】図１２は、開発アプリケーションから呼び出されたＡＰＩが「機種依存処理」である場合の動作検証処理の流れを示すフローチャートである。
【図１３】図１３は、開発アプリケーションから呼び出されたＡＰＩが「機種依存処理」である場合におけるアプリ開発システムの動作を模式的に示した図である。
【図１４】図１４は、開発アプリケーションから呼び出されたＡＰＩに「機種共通処理」および「機種依存処理」が混在する場合の動作検証処理の流れを示すフローチャートである。
【図１５】図１５は、開発アプリケーションから呼び出されたＡＰＩに「機種共通処理」および「機種依存処理」が混在する場合におけるアプリ開発システムの動作を模式的に示した図である。
【発明を実施するための形態】
【００１４】
以下、添付図面を参照して、本発明に係る情報処理装置、情報処理システム、情報処理プログラム、および情報処理方法を適用した実施の形態のアプリケーション開発システム（アプリ開発システム）を詳細に説明する。
【００１５】
（概要）
複合機（ＭＦＰ：Multifunction  Peripheral）のＡＰＩ（Application  Program  Interface）は、各機種間の互換性の維持のために、「機種共通処理」が多くなる。また、機種共通処理においては、変更も少ない。一方、例えば同一ＡＰＩの機種毎の処理、および特定の機種にのみ存在するＡＰＩである「機種依存処理」は、新規の開発、および変更が多い。ＭＦＰのメーカー側のプラットフォーム（ＰＦ）の開発者（メーカー側開発者）は、通常、機種共通処理を機種依存処理よりも早く設計してＭＦＰに実装する。また、メーカー側開発者は、通常、機種共通処理の開発と、機種依存処理の開発とは、別々に行う。
【００１６】
このようなことから、実施の形態のアプリ開発システムは、例えばサードベンダ等のＭＦＰのアプリケーションの開発者へ提供するエミュレータオブジェクト（本体エミュレータと呼ぶ）には機種共通処理のみを実装して早期に（迅速に）提供する。一方、機種依存処理は、本体エミュレータの提供後に、例えば同一セグメントのネットワーク上、または、ネットワークを介してサービスを提供する、いわゆるクラウドコンピューティング方式のクラウド（サーバ群）上に設けられた、ＭＦＰ（実機）、仮想実機、および機種ＡＰＩ実装部に実装する。
【００１７】
メーカー側開発者は、機種ＡＰＩ実装部に機種依存処理の各ＡＰＩをチェックインする。機種ＡＰＩ実装部は、チェックインされた機種依存処理の各ＡＰＩを、ネットワーク上のノードから実行できるようにエクスポートする。サードベンダに提供された本体エミュレータは、開発しているアプリケーションから呼び出されたＡＰＩが、各機種共通の処理である機種共通処理である場合、本体エミュレータがＡＰＩの動作検証を行う。また、アプリケーションから呼び出されたＡＰＩが、機種固有の処理である機種依存処理である場合、本体エミュレータは、機種依存用のエミュレータが実装されている外部の実機、仮想実機、または、機種ＡＰＩ実装部に、ＡＰＩの動作検証を依頼する。換言すると、機種共通処理用のエミュレータと機種依存処理用のエミュレータとを使い分けて、各機種のＡＰＩの動作検証を行う。
【００１８】
これにより、サードベンダに対しては、機種共通処理に対応するエミュレータを迅速に提供し、バージョンアップ毎に、機種依存処理用のエミュレータを実機、仮想実機または機種ＡＰＩ実装部に実装できる。このため、エミュレータの、より迅速な機種対応を可能とすることができる。また、エミュレータの効率的な機種対応を可能とすることができる。
【００１９】
図１は、実施の形態のアプリ開発システムのシステム構成図である。図１に示すように、アプリ開発システムは、複数の実機１、メーカー側のプラットフォーム開発装置２、サードベンダ側のアプリ開発装置３、仮想実機４、および機種ＡＰＩ実装部５を有している。図１は、実機１として、第１〜第３の実機１が設けられた例を示している。第１〜第３の実機１は、例えば機種Ａ、機種Ｂ、機種Ｃなどのように、それぞれ異なる機種となっている。また、このような実機１は、例えば印刷機能、複写機能、スキャナ機能、およびファクシミリ機能のうち、１つまたは２つ以上の機能を有する複合機となっている。なお、複合機の代わりに、プロジェクタ装置、テレビ会議システム、またはデジタルカメラ装置などの機器を用いてもよい。
【００２０】
図１に示す例の場合、複数の実機１、プラットフォーム開発装置２、およびアプリ開発装置３は、例えば同じ建物内、同じ敷地内などの所定のセグメント内に設けられ、それぞれＬＡＮ（Local  Area  Network）等の狭域用のネットワーク４０を介して相互に接続されている。
【００２１】
仮想実機４および機種ＡＰＩ実装部５は、セグメント外となるように、例えばインターネットなどの広域用のネットワーク６上に設けられている。このため、「仮想実機４および機種ＡＰＩ実装部５」は、インターネットなどの広域用のネットワーク６を介して、「複数の実機１、プラットフォーム開発装置２、およびアプリ開発装置３」と相互に接続されている。
【００２２】
なお、各実機１、仮想実機４、および機種ＡＰＩ実装部５は、アプリ開発装置３の本体エミュレータ７とネットワーク接続可能であれば、上述のセグメント内外は問わない。
【００２３】
プラットフォーム開発装置２は、実機１のメーカー側の開発者により操作される機器である。メーカー側の開発者は、プラットフォーム開発装置２を用いて、各実機１で共通のＡＰＩである「機種共通処理」のエミュレータと、実機１の機種毎のＡＰＩである「機種依存処理」のエミュレータとに分けて開発を行っている。「機種共通処理」のエミュレータ（機種共通エミュレータ：第１のプログラムの一例）は、サードベンダなどに対して迅速に提供される。プラットフォーム開発装置２は、機種共通エミュレータを実行することで、共通動作部の一例である本体エミュレータ７および後述するパネルエミュレータ８を実現する。これに対して、「機種依存処理」のエミュレータ（機種依存エミュレータ：第２のプログラムの一例）は、機種毎に開発されるたびに、ネットワーク６を介して機種ＡＰＩ実装部５に実装される。
【００２４】
アプリ開発装置３は、実機１の開発アプリケーション９（アプリケーションの一例）を開発するために、メーカー側から提供された実機１のエミュレータを有している。一例として後述するが、実施の形態のアプリ開発システムに設けられている実機１は、実機１の本体（図２の符号１０）と操作部（図２の符号２０）とが、物理的に分離可能となっている。または、実機１は、操作部としてスマートフォンまたはタブレット型端末装置などの携帯端末装置を用いることが可能となっている。このため、サードベンダに提供されるエミュレータは、実機１本体の機種共通処理をエミュレートするための本体エミュレータ７と、実機１本体から分離可能な操作部で行う実機１本体の操作をエミュレートするためのパネルエミュレータ８に分けて提供される。
【００２５】
サードベンダは、開発アプリケーション９の機種共通処理の動作検証等を行う場合は、本体エミュレータ７およびパネルエミュレータ８を用いて動作検証を行う。また、サードベンダは、開発アプリケーション９の機種依存処理の動作検証を行う場合、機種依存処理の動作検証を実行可能な実機１、仮想実機４、または機種ＡＰＩ実装部５のいずれかに、ＡＰＩの動作検証を委ね、動作検証結果を取得する。
【００２６】
仮想実機４は、例えばＶＭｗａｒｅ（登録商標）、または、Ｐａｒａｌｌｅｌｓ（登録商標）などの仮想パーソナルコンピュータソフトウェアで、各機種の実機１をそれぞれ仮想化した仮想マシンとなっている。サードベンダは、開発中のアプリケーションの機種に依存したＡＰＩの動作検証を、対応する機種のエミュレータが実装された仮想実機４に委ね、動作検証結果を取得する。
【００２７】
機種ＡＰＩ実装部５には、機種依存性のあるＡＰＩのプログラム（データおよびロジックなど）が、プラットフォーム開発装置２からアップロードされる。機種ＡＰＩ実装部５は、アップロードされたプログラムの処理を外部から呼び出すためにエクスポートする機能（他のアプリケーションが解釈可能な形式でファイルを保存する機能）を備えている。
【００２８】
次に、この例ではＭＦＰとなっている実機１のハードウェア構成図を図２に示す。実機１は、コピー機能、スキャナ機能、ファクス機能、プリンタ機能等の各種機能を備えた本体１０と、ユーザの操作に応じた入力を受け付ける操作部２０とを備える。本体１０と操作部２０は、専用の通信路３０を介して相互に通信可能に接続されている。通信路３０は、例えばＵＳＢ（Universal  Serial  Bus）規格のものを用いることもできるが、有線か無線かを問わず任意の規格のものでよい。
【００２９】
操作部２０としては、スマートフォンまたはタブレット型端末などの、単独で完結した情報処理を実行可能な電子機器である情報処理端末を用いることができる。この場合、操作部２０として用いられる情報処理端末には、例えば実機１の本体１０上で動作する各種アプリケーションの操作画面が表示される。これにより、操作部２０は、実機１の操作部として機能する。なお、以下、単に、「操作パネル」というときは、実機１に固定され設置されている操作パネルをいうこととする。
【００３０】
より詳しくは、操作部２０として用いられる情報処理端末は、実機１専用の操作部として固定され設置されていた操作パネルの代わりに、実機１に着脱自在に接続される。すなわち、操作部２０として用いられる情報処理端末は、例えば実機１の操作パネルが配置される位置等の所定の位置に取り外し可能（分離可能）ながらも、実機１と一体的に設置される。従って、操作部２０として用いられる情報処理端末および実機１は、一台の装置として把握されてもよい。操作部２０である情報処理端末は、実機１から取り外されると、実機１との間で、例えばＢｌｕｅｔｏｏｔｈ（登録商標）または赤外線通信等の無線通信を行い、実機１の操作部として機能する。
【００３１】
なお、本体１０は、操作部２０で受け付けた入力に応じた動作を行う。また、本体１０は、クライアントＰＣ（パーソナルコンピュータ）等の外部装置とも通信可能であり、外部装置から受信した指示に応じて動作させることも可能となっている。
【００３２】
次に、本体１０のハードウェア構成について説明する。図２に示すように、本体１０は、ＣＰＵ１１と、ＲＯＭ１２と、ＲＡＭ１３と、ＨＤＤ（ハードディスクドライブ）１４と、通信Ｉ／Ｆ（インタフェース）１５と、接続Ｉ／Ｆ１６と、エンジン部１７とを備えている。ＣＰＵ１１〜エンジン部１７は、システムバス１８を介して相互に接続されている。
【００３３】
ＣＰＵ１１は、本体１０の動作を統括的に制御する。ＣＰＵ１１は、ＲＡＭ１３をワークエリア（作業領域）としてＲＯＭ１２またはＨＤＤ１４等に格納されたアプリケーションプログラムを実行する。これにより、ＣＰＵ１１は、本体１０全体の動作を制御し、コピー機能、スキャナ機能、ファクス機能、およびプリンタ機能等の各種機能を実現する。
【００３４】
通信Ｉ／Ｆ１５は、クライアントＰＣ（パーソナルコンピュータ）等の外部装置と通信するためのインタフェースである。接続Ｉ／Ｆ１６は、通信路３０を介して操作部２０と通信するためのインタフェースである。なお、図２において、通信路３０は、有線的に図示されているが、上述のように操作部２０は、実機１の本体１０に対して装着および取り外し可能に設けられている。このため、操作部２０を実機１に装着しているときには、通信路３０は有線通信路として機能し、操作部２０を実機１から取り外したときには、通信路３０は無線通信路として機能するものと理解されたい。
【００３５】
エンジン部１７は、コピー機能、スキャナ機能、ファクス機能、および、プリンタ機能を実現させるための、汎用的な情報処理、および通信以外の処理を行うハードウェアである。エンジン部１７は、例えば原稿の画像をスキャンして読み取るスキャナ（画像読取部）、用紙等のシート材への印刷を行うプロッタ（画像形成部）、ファクス通信を行うファクス部等を備えている。さらに、印刷済みシート材を仕分けるフィニッシャ、および、原稿を自動給送するＡＤＦ（自動原稿給送装置）のような特定のオプションを、エンジン部１７に設けてもよい。
【００３６】
次に、操作部２０のハードウェア構成について説明する。図１に示すように、操作部２０は、ＣＰＵ２１と、ＲＯＭ２２と、ＲＡＭ２３と、フラッシュメモリ２４と、通信Ｉ／Ｆ２５と、接続Ｉ／Ｆ２６と、操作パネル２７とを備える。ＣＰＵ２１〜操作パネル２７は、システムバス２８を介して相互に接続されている。
【００３７】
ＣＰＵ２１は、操作部２０の動作を統括的に制御する。ＣＰＵ２１は、ＲＡＭ２３をワークエリア（作業領域）として、ＲＯＭ２２またはフラッシュメモリ２４等に格納されたプログラムを実行する。これにより、ＣＰＵ２１は、操作部２０全体の動作を制御し、ユーザから受け付けた入力に応じた情報（画像）の表示などの後述する各種機能を実現する。
【００３８】
通信Ｉ／Ｆ２５は、ネットワーク４０上の所定のサーバ装置と通信するためのインタフェースである。接続Ｉ／Ｆ２６は、通信路３０を介して本体１０と通信するためのインタフェースである。
【００３９】
操作パネル２７は、ユーザの操作に応じた各種の入力を受け付けると共に、例えば受け付けた入力に応じた情報、実機１の動作状況を示す情報、設定状態等の各種の情報を表示する。この例では、操作パネル２７は、タッチパネル機能を備えた液晶表示装置（ＬＣＤ）で構成されるが、これに限られるものではない。例えば、タッチパネル機能を備えた有機ＥＬ表示装置で構成してもよい。さらに、これに加えて、または、これに代えて、ハードウェアキー等の操作部または発光部等の表示部を設けてもよい。
【００４０】
次に、図３は、実機１のソフトウェア構成の一例を示す模式図である。図３に示すように、実機１の本体１０は、アプリ層１０１、サービス層１０２、およびＯＳ層１０３を有する。アプリ層１０１、サービス層１０２、および、ＯＳ層１０３の実体は、ＲＯＭ１２またはＨＤＤ１４等に格納されている各種ソフトウェアである。ＣＰＵ１１が、これらのソフトウェアを実行することにより、各種機能が提供される。
【００４１】
アプリ層１０１のソフトウェアは、ハードウェア資源を動作させて所定の機能を提供するためのアプリケーションプログラム（以下の説明では、単に「アプリケーション」と称する）である。例えば、アプリケーションとしては、コピー機能を提供するためのコピーアプリケーション、およびスキャナ機能を提供するためのスキャナアプリケーション等が挙げられる。また、アプリケーションとしては、ファクス機能を提供するためのファクスアプリケーション、およびプリンタ機能を提供するためのプリンタアプリケーション等が挙げられる。
【００４２】
サービス層１０２のソフトウェアは、アプリ層１０１とＯＳ層１０３との間に介在し、アプリケーションに対し、本体１０が備えるハードウェア資源を利用するためのインタフェースを提供するためのソフトウェアである。具体的には、ハードウェア資源に対する動作要求の受け付け、動作要求の調停を行う機能を提供するためのソフトウェアである。サービス層１０２が受け付ける動作要求としては、スキャナによる読み取りおよびプロッタによる印刷等の要求等である。
【００４３】
なお、サービス層１０２によるインタフェースの機能は、本体１０のアプリ層１０１だけではなく、操作部２０のアプリ層２０１に対しても提供される。すなわち、操作部２０のアプリ層２０１（アプリ）も、サービス層１０２のインタフェース機能を介して、本体１０のハードウェア資源（例えばエンジン部１７）を利用した機能を実現することができる。
【００４４】
ＯＳ層１０３のソフトウェアは、本体１０が備えるハードウェアを制御する基本機能を提供するための基本ソフトウェア（オペレーティングシステム）である。サービス層１０２のソフトウェアは、各種アプリからのハードウェア資源の利用要求を、ＯＳ層１０３が解釈可能なコマンドに変換してＯＳ層１０３に渡す。そして、ＯＳ層１０３のソフトウェアによりコマンドが実行されることで、ハードウェア資源は、アプリケーションの要求に従った動作を行う。
【００４５】
同様に、操作部２０は、アプリ層２０１と、サービス層２０２と、ＯＳ層２０３とを有する。操作部２０が備えるアプリ層２０１、サービス層２０２及びＯＳ層２０３も、階層構造については本体１０側と同様である。ただし、アプリ層２０１のアプリケーションにより提供される機能、および、サービス層２０２が受け付け可能な動作要求の種類は、本体１０側とは異なる。アプリ層２０１のアプリケーションは、操作部２０が備えるハードウェア資源を動作させて所定の機能を提供するためのソフトウェアであってもよい。アプリ層２０１のアプリケーションは、主に、本体１０が備えるコピー機能、スキャナ機能、ファクス機能、およびプリンタ機能等に関する操作および表示を行うためのＵＩ機能を提供する。ＵＩは「ユーザインタフェース」の略記である。
【００４６】
なお、一例ではあるが、実施の形態の情報処理システム１００に設けられている実機１の場合、機能の独立性を保つために、本体１０側のＯＳ層１０３のソフトウェアと操作部２０側のＯＳ層２０３のソフトウェアが互いに異なる。つまり、実機１の本体１０と操作部２０は、別々のオペレーティングシステムで互いに独立して動作するようになっている。例えば、本体１０側のＯＳ層１０３のソフトウェアとしてＬｉｎｕｘ（登録商標）が用いられ、操作部２０側のＯＳ層２０３のソフトウェアとしてＡｎｄｒｏｉｄ（登録商標）が用いられている。
【００４７】
このように実機１は、本体１０および操作部２０が、別々のオペレーティングシステムで動作するため、本体１０と操作部２０との間の通信は、共通の装置内のプロセス間通信ではなく、異なる装置間の通信として行われる。例えば、操作部２０が受け付けた入力（ユーザからの指示内容）を本体１０へ伝達する動作（コマンド通信）、または、本体１０が操作部２０へイベントを通知する動作などがこれに該当する。ここでは、操作部２０が本体１０へコマンド通信を行うことにより、本体１０の機能を用いることができる。また、本体１０から操作部２０に通知するイベントには、本体１０における動作の実行状況、本体１０側で設定された内容などが含まれる。さらに、操作部２０に対する電力供給は、本体１０から通信路３０を介して行われる。このため、操作部２０の電源制御を、本体１０の電源制御とは別に（独立して）行うことができる。
【００４８】
次に、図４に、仮想実機４および機種ＡＰＩ実装部５のハードウェア構成を示す。図４に示すように、仮想実機４および機種ＡＰＩ実装部５は、ＣＰＵ３１、ＲＯＭ３２、ＲＡＭ３３、ＨＤＤ（ハードディスクドライブ）３４、および通信Ｉ／Ｆ（インタフェース）３５を有している。ＣＰＵ３１〜通信Ｉ／Ｆ３５は、システムバス３８を介して相互に接続されている。
【００４９】
ＣＰＵ３１は、仮想実機４または機種ＡＰＩ実装部５の動作を統括的に制御する。ＣＰＵ３１は、ＲＡＭ３３をワークエリア（作業領域）としてＲＯＭ３２またはＨＤＤ３４などに格納された機種別のエミュレータで、アプリ開発装置３の本体エミュレータ７から依頼されたＡＰＩの動作検証を行い、動作検証結果を返信する。通信Ｉ／Ｆ３５は、以下に説明するアプリ開発装置３の通信Ｉ／Ｆ５５との間に通信回線を確立し、本体エミュレータ７から依頼されたＡＰＩの動作検証を受け付ける。
【００５０】
次に、図５に、アプリ開発装置３のハードウェア構成を示す。図５に示すように、アプリ開発装置３は、ＣＰＵ５１、ＲＯＭ５２、ＲＡＭ５３、ＨＤＤ（ハードディスクドライブ）５４、通信Ｉ／Ｆ（インタフェース）５５、操作部５６、および表示部５７を有している。ＣＰＵ５１〜表示部５７は、システムバス５８を介して相互に接続されている。
【００５１】
ＣＰＵ５１は、アプリ開発装置３の動作を統括的に制御する。ＣＰＵ５１は、ＲＡＭ３３をワークエリア（作業領域）としてＲＯＭ３２またはＨＤＤ３４などに格納されたエミュレータで、開発アプリケーション９の各機種共通のＡＰＩの動作検証を行う。また、ＣＰＵ５１は、各機種固有のＡＰＩの動作検証を、実機１、仮想実機４、または、機種ＡＰＩ実装部５に依頼し、動作検証結果を取得して、開発アプリケーション９に返信する。なお、プラットフォーム開発装置２も、図５に示すアプリ開発装置３のハードウェア構成と同様のハードウェア構成となっている。
【００５２】
次に、図６に、アプリ開発装置３のＣＰＵ５１が、メーカー側から提供されたエミュレータを実行することで実現される各機能の機能ブロック図を示す。図６に示すように、ＣＰＵ５１は、エミュレータを実行することで、リスト取得部６１、問い合わせ部６２、判断部６３、処理判別部６４、表示制御部６５、処理依頼部６６、操作検出部６７、コネクション確立部６８、処理結果受信部６９、および共通処理部７０として機能する。
【００５３】
リスト取得部６１は、実機１の各機種名と、機種毎の各ＡＰＩを示すＡＰＩリストを取得する。ＡＰＩリストは、第２のリスト情報の一例である。各機種名に対して、バージョン情報が付されていてもよい。ＡＰＩリストは、本体エミュレータ７に含まれていてもよいし、ネットワーク６上の配信サーバ装置から取得してもよい。問い合わせ部６２は、実機１、仮想実機４、および機種ＡＰＩ実装部５に対して、各機種固有の各ＡＰＩの動作検証を実行可能か否かの問い合わせを行う。判断部６３は、問い合わせ結果から、実機１、仮想実機４、または機種ＡＰＩ実装部５で各ＡＰＩの動作検証が実行可能か否かを判断する。
【００５４】
処理判別部６４は、開発アプリケーション９から呼び出されたＡＰＩが、各機種の実機１で共通の処理となる「機種共通処理」、および機種毎の処理となる「機種依存処理」のうち、どちらの処理に該当するかを判別する。表示制御部６５は、エミュレート可能な実機１の機種の一覧などを表示部５７に表示する。処理依頼部６６は、「機種依存処理」となるＡＰＩの動作検証を、実機１、仮想実機４、または機種ＡＰＩ実装部５に依頼する。なお、実機１、仮想実機４、または機種ＡＰＩ実装部５は、外部機器の一例である。操作検出部６７は、サードベンダが操作部５６を介して行う、機種の一覧からエミュレートする所望の機種を選択する操作を検出する。
【００５５】
コネクション確立部６８は、機種毎の各ＡＰＩの動作検証を実行可能な実機１、仮想実機４、または機種ＡＰＩ実装部５と、アプリ開発装置３との間のコネクションを確立する。なお、ここでいう「コネクションの確立」は、コネクション確立部６８が、サードベンダにより選択された機種の実機１、選択された機種を仮想化した仮想実機４、および機種ＡＰＩ実装部５と、アプリ開発装置３との間で、何等かの通信を可能とする状態とすることをいう。具体的には、コネクション確立部６８が、サードベンダにより選択された機種の実機１、選択された機種を仮想化した仮想実機４、および機種ＡＰＩ実装部５のＩＰアドレスを記憶してもよい。また、コネクション確立部６８が通信Ｉ／Ｆ５５を介して、サードベンダにより選択された機種の実機１、選択された機種を仮想化した仮想実機４、および機種ＡＰＩ実装部５と、アプリ開発装置３との間に通信回線を確立してもよい。
【００５６】
処理結果受信部６９は、取得部の一例である。処理結果受信部６９は、実機１、仮想実機４、または機種ＡＰＩ実装部５から送信された、各機種固有のＡＰＩの動作検証結果を受信する。共通処理部７０は、開発アプリケーション９から呼び出されたＡＰＩが、各機種の実機１で共通の処理となる「機種共通処理」である場合に、呼び出されたＡＰＩの動作検証を行う。
【００５７】
なお、この例では、各部６１〜７０は、ＣＰＵ５１がエミュレータを実行することでソフトウェア的に実現されることとしたが、一部または全部の機能をハードウェアで実現してもよい。
【００５８】
また、エミュレータは、インストール可能な形式または実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）等のコンピュータ装置で読み取り可能な記録媒体に記録して提供してもよい。また、エミュレータは、ＣＤ−Ｒ、ＤＶＤ、ブルーレイディスク（登録商標）、半導体メモリ等のコンピュータ装置で読み取り可能な記録媒体に記録して提供してもよい。ＤＶＤは、「Digital  Versatile  Disk」の略記である。また、インターネット等のネットワーク経由でインストールするかたちで提供してもよい。また、各種プログラムを、機器内のＲＯＭ等に予め組み込んで提供してもよい。
【００５９】
次に、図７のフローチャートに、アプリ開発装置３におけるＡＰＩの動作検証処理の流れを示す。サードベンダは、メーカー側から提供された実機１のエミュレータをアプリ開発装置３にインストールする。そして、サードベンダは、インストールされたエミュレータの起動操作を行う。図５に示すＣＰＵ５１は、エミュレータの起動操作を検出すると、ＨＤＤ５４等に記憶されているエミュレータに従って動作することで、図６に示した各部６１〜７０として機能、図７のフローチャートに示す処理を行う。
【００６０】
まず、メーカー側から提供された実機１のエミュレータには、上述のように本体エミュレータ７およびパネルエミュレータ８が含まれている。ステップＳ１では、ＣＰＵ５１が、本体エミュレータ７およびパネルエミュレータ８をＨＤＤ５４等から読み出して起動し、ステップＳ２に処理を進める。
【００６１】
ステップＳ２では、図６に示すリスト取得部６１が、ＡＰＩリストを取得する。ＡＰＩリストは、エミュレータに含まれてメーカー側から提供される。または、ＡＰＩリストは、ネットワーク６上の所定のサーバ装置から取得してもよい。
【００６２】
一例ではあるが、ＡＰＩリストは、機種Ａとなる第１の実機１の機種名、および第１の実機１のＡＰＩの一覧、機種Ｂとなる第２の実機１の機種名、および第２の実機１のＡＰＩの一覧、機種Ｃとなる第３の実機１の機種名、および第３の実機１のＡＰＩの一覧・・・などのように、機種毎のＡＰＩの一覧となっている。なお、ＡＰＩリストに、各機種のバージョン番号を含めてもよい。
【００６３】
次に、ステップＳ３では、問い合わせ部６２が、実機１、仮想実機４、機種ＡＰＩ実装部５に問い合わせを行う。ステップＳ４では、判断部６３が、問い合わせ結果から、実機１、仮想実機４、または、機種ＡＰＩ実装部５は、ＡＰＩリストに掲載されているＡＰＩの動作検証を実行可能な機種であるか否かを判別する。
【００６４】
具体的には、各実機１に対するエミュレート可否の判別は、以下のように行う。例えば、ＡＰＩリストに、機種Ａの第１の実機１のＡＰＩの一覧が掲載されていた場合、問い合わせ部６２は、ステップＳ３において、機種Ａの第１の実機１に対して通信回線の接続を試みる。また、ステップＳ４において、判断部６３が、機種Ａの第１の実機１のＡＰＩリストを参照して、機種Ａのバージョン番号を検出する。機種Ａの第１の実機１に対して通信回線の接続が可能であり、かつ、ＡＰＩリストで示される機種Ａのバージョン番号が、製品化されていることを示す「ｖ１．００」以降のバージョン番号である場合、以下のことを意味する。この場合、機種Ａの第１の実機１には、全ての機種依存のＡＰＩのエミュレート機能が実装されている可能性が高い。このため、ステップＳ４において、判断部６３が、機種Ａの第１の実機１は、全ての機種依存のＡＰＩに対応可能な機種（エミュレート可能な機種）であると判別し（ステップＳ４：Ｙｅｓ）、処理をステップＳ５に進める。なお、ステップＳ４において、判断部６３により、エミュレート可能な機種ではないと判別された場合（ステップＳ４：Ｎｏ）、処理はステップＳ６に進む。
【００６５】
また、他の例として、各実機１は、問い合わせ部６２から問い合わせされた際に、動作検証可能なＡＰＩの一覧（検証ＡＰＩリスト）を問い合わせ部６２に返信する。検証ＡＰＩリストは、第１のリスト情報の一例である。判断部６３は、各実機１から返信された検証ＡＰＩリストと、上述のＡＰＩリストとを比較する。そして、例えばＡＰＩリストの機種Ａの全てのＡＰＩが、機種Ａから返信された検証ＡＰＩリストのＡＰＩに含まれている場合、判別部６３は、機種Ａの実機１を、ＡＰＩリストの機種Ａの全てのＡＰＩの動作検証が可能な実機１として判別する。
【００６６】
各仮想実機４に対するエミュレート可否の判別は、以下のように行う。実機１を仮想化した仮想実機４は、実機１と同等とみなすことができる。例えば、ＡＰＩリストに、機種Ｂの第２の実機１のＡＰＩの一覧が掲載されていた場合、問い合わせ部６２は、ステップＳ３において、機種Ｂの第２の実機１を仮想化した仮想実機４に対して通信回線の接続を試みる。また、ステップＳ４において、判断部６３が、機種Ｂの第２の実機１のＡＰＩリストを参照して、機種Ｂのバージョン番号を検出する。機種Ｂの第２の実機１を仮想化した仮想実機４に対して通信回線の接続が可能であり、かつ、ＡＰＩリストで示される機種Ｂのバージョン番号が、製品化されていることを示す「ｖ１．００」以降のバージョン番号である場合、以下のことを意味する。この場合、機種Ｂの第２の実機１を仮想化した仮想実機４には、全ての機種依存のＡＰＩのエミュレート機能が実装されている可能性が高い。このため、ステップＳ４において、判断部６３が、機種Ｂの第２の実機１を仮想化した仮想実機４は、全ての機種依存のＡＰＩに対応可能な機種（エミュレート可能な機種）であると判別し（ステップＳ４：Ｙｅｓ）、処理をステップＳ５に進める。
【００６７】
また、他の例として、各仮想実機４は、問い合わせ部６２から問い合わせされた際に、動作検証可能なＡＰＩの一覧（検証ＡＰＩリスト）を問い合わせ部６２に返信する。判断部６３は、各仮想実機４から返信された検証ＡＰＩリストと、上述のＡＰＩリストとを比較する。そして、例えばＡＰＩリストの機種Ａの全てのＡＰＩが、機種Ａから返信された検証ＡＰＩリストのＡＰＩに含まれている場合、判別部６３は、機種Ａの仮想実機４を、ＡＰＩリストの機種Ａの全てのＡＰＩの動作検証が可能な仮想実機４として判別する。
【００６８】
各機種ＡＰＩ実装部５に対するエミュレート可否の判別は、以下のように行う。ＡＰＩの一覧に掲載されている各ＡＰＩに対しては、そのＡＰＩが、各機種に共通した「機種共通処理」に対応するＡＰＩであるか、または、各機種特有の「機種依存処理」に対応するＡＰＩであるかを示す種別情報が付されている。なお、種別情報は、例えばネットワーク６上に設けられた所定のサーバ装置から取得してもよい。例えば、ＡＰＩ１００（）のＡＰＩは、プラットフォームの名称を文字列で取得するＡＰＩであり（戻り値は、機種によらず、予め定められた同じ戻り値）、機種共通処理であるとする。また、ＡＰＩ４００（）のＡＰＩのうち、一部のＡＰＩが機種依存処理となっているとする。このような場合、問い合わせ部６２は、ＡＰＩ４００（）のエミュレートが可能か否かを判断するために、機種ＡＰＩ実装部５に対して、ＡＰＩ４００（）のＡＰＩにおける、前述の機種依存処理となる一部のＡＰＩのエミュレート機能が実装されているか否かの問い合わせを行う。以下は、このような問い合わせを行うように問い合わせ部６２を制御するためのプログラムのコメントおよびソースコードの一例である。
【００６９】
／／ＡＰＩ４００は、部分的に機種依存の処理を含む
／／本体エミュレータ７は、機種ＡＰＩ実装部５に対して、ＡＰＩ４００＿機種Ａロジック（）、ＡＰＩ４００＿機種Ｂロジック（）がそれぞれ実装済みかを確認する。
ＡＰＩ４００（）｛
機種共通処理（）；
ｉｆ（機種Ａ）｛
ＡＰＩ４００＿機種Ａロジック（）；
｝ｅｌｓｅ  ｉｆ｛
ＡＰＩ４００＿機種Ｂロジック（）；
｝ｅｌｓｅ｛
ＡＰＩ４００＿エミュレータロジック（）；
｝
機種共通処理（）；
｝
【００７０】
判断部６３は、機種ＡＰＩ実装部５に、ＡＰＩ４００（）の処理が実装されていれば、ＡＰＩ４００（）の処理はエミュレート可能であると判断する。問い合わせ部６２および判断部６３は、このようにして各機種の全てのＡＰＩの動作検証が可能であるか否かを判断する。そして、判断部６３は、全てのＡＰＩの動作検証が可能であると判断した場合、その機種をエミュレート可能な機種と判断する。
【００７１】
また、他の例として、機種ＡＰＩ実装部５は、問い合わせ部６２から問い合わせされた際に、動作検証可能なＡＰＩの一覧（検証ＡＰＩリスト）を問い合わせ部６２に返信する。判断部６３は、機種ＡＰＩ実装部５から返信された検証ＡＰＩリストと、上述のＡＰＩリストとを比較する。そして、例えばＡＰＩリストの機種Ａの全てのＡＰＩが、機種Ａから返信された検証ＡＰＩリストのＡＰＩに含まれている場合、判別部６３は、機種Ａの機種ＡＰＩ実装部５を、ＡＰＩリストの機種Ａの全てのＡＰＩの動作検証が可能な機種ＡＰＩ実装部５として判別する。
【００７２】
次に、ステップＳ５では、表示制御部６５が、構築中のエミュレート可能な機種の一覧の中に、例えば機種Ａの機種名およびバージョン番号を加えて、ステップＳ６に処理を進める。ステップＳ６では、判断部６３が、ＡＰＩリストに掲載されている全機種に対するエミュレートの可否判断が終了したか否かを判別する。判断部６３により、ＡＰＩリストに掲載されている全機種に対するエミュレートの可否判断が終了していないと判別された場合（ステップＳ６：Ｎｏ）、処理はステップＳ３に戻る。これに対して、判断部６３により、全機種に対するエミュレートの可否判断が終了したと判別された場合（ステップＳ６：Ｙｅｓ）、処理はステップＳ７に進む。
【００７３】
ステップＳ７では、表示制御部６５が、アプリ開発装置３の表示部５７に対して、ステップＳ５で形成した、エミュレート可能な機種の一覧を表示する。図８は、このようなエミュレート可能な機種の一覧の一例である。図８の例の場合、機種Ａ、機種Ｂ・・・などの各機種名、および「ｖ１．００」、「ｖ１．０１」・・・等のバージョン番号が一覧表示されている。サードベンダは、この一覧を見て、サードベンダが作成したアプリケーションの動作検証を行う機種を選択する。
【００７４】
具体的には、サードベンダは、カーソルＣＲを所望の機種名の表示位置に移動させる移動操作、および、カーソルＣＲが位置している機種の選択を決定する決定操作を行うように操作部５６を操作することで、所望の機種を選択する。ステップＳ８では、操作検出部６７が、操作部５６の操作状況を監視することで、所望の機種の選択を決定する決定操作がされたか否かを判別する。操作検出部６７により、所望の機種の選択を決定する決定操作が検出されるまでの間（ステップＳ８：Ｎｏ）、ステップＳ７およびステップＳ８の処理を繰り返し実行する。操作検出部６７により、所望の機種の選択を決定する決定操作が検出されると（ステップＳ８：Ｙｅｓ）、処理はステップＳ９に進む。
【００７５】
ステップＳ９では、表示制御部６５が、サードベンダにより選択された機種のエンジン、コントロール情報（ＣＴＬ情報）を元に、例えば図９に示すような「エミュレータ操作ＵＩ」を生成し、表示部５７に表示（描画）する。なお、エンジン、ＣＴＬ情報は、エミュレーションを行う機種のＡＰＩを経由して取得してもよい。例えば、機種Ａがカラー印刷などの対応機器であり、かつ、給紙トレイの標準の数が３つである場合、エミュレータ操作ＵＩには、マゼンダ、シアン、イエロー、ブラックのトナー残量を設定する項目と、第１〜第３の給紙トレイの残枚数を設定する項目が表示される。機種Ａがモノクロ機で、給紙トレイが２つの機種の場合、トナー残量を設定する項目として、ブラックの項目のみが表示され、また、残枚数が設定可能な給紙トレイとして、第１〜第２の給紙トレイのみが表示される。
【００７６】
また、ステップＳ９において、コネクション確立部６８は、サードベンダにより選択された機種の実機１、選択された機種を仮想化した仮想実機４、および機種ＡＰＩ実装部５との間に、通信Ｉ／Ｆ５５を介してコネクションを確立する。なお、ここでいう「コネクションの確立」は、コネクション確立部６８が、サードベンダにより選択された機種の実機１、選択された機種を仮想化した仮想実機４、および機種ＡＰＩ実装部５と、アプリ開発装置３との間で、何等かの通信を可能とする状態とすることをいう。具体的には、コネクション確立部６８が、サードベンダにより選択された機種の実機１、選択された機種を仮想化した仮想実機４、および機種ＡＰＩ実装部５のＩＰアドレスを記憶してもよい。また、コネクション確立部６８が通信Ｉ／Ｆ５５を介して、サードベンダにより選択された機種の実機１、選択された機種を仮想化した仮想実機４、および機種ＡＰＩ実装部５と、アプリ開発装置３との間に通信回線を確立してもよい。
【００７７】
このようなコネクションの確立は、エミュレータ操作ＵＩを介して設定が変更された際に、実機１、仮想実機４、機種ＡＰＩ実装部５のフックモジュール（Ｈｏｏｋモジュール：図１３の符号７８、図１５の符号８６）に変更内容を通知するためである。また、通信コネクションが確立されている機器の電源がオフされた場合などに、エミュレートができない旨をサードベンダに通知するためである。なお、フックモジュールは、動作制御部の一例であり、後述するように、機種依存処理のＡＰＩの設定内容に応じて機種依存エミュレータを動作させる。
【００７８】
ここで、エミュレータの設定変更がされた際の処理手順は、以下のようになる。サードベンダが、エミュレータ操作ＵＩを介して、エミュレータの設定を変更する。変更された設定の内容は、コネクション確立部６８が、コネクションされている実機１、仮想実機４、機種ＡＰＩ実装部５のＨｏｏｋモジュール（図１３の符号７８、図１５の符号８６）に通知され、Ｈｏｏｋモジュールに保存される。
【００７９】
次に、コネクションが確立されると、各機種のエミュレータを使用する準備が整う。詳しくは、以下に説明するが、アプリ開発装置３のＣＰＵ５１は、ステップＳ１０において、サードベンダの操作に応じたエミュレート制御を行うことで、開発アプリケーション９の動作検証を行う。そして、ステップＳ１１でエミュレート終了操作を検出した際に、図７のフローチャートの処理を終了する。
【００８０】
次に、開発アプリケーションから呼び出されたＡＰＩが、「機種共通処理」である場合の動作検証処理を説明する。図１０は、開発アプリケーション９から呼び出されたＡＰＩが「機種共通処理」である場合の動作検証処理の流れを示すフローチャートである。サードベンダが動作検証を行っている開発アプリケーション９からＡＰＩが呼び出されると、ステップＳ２１において、処理判別部６４が、呼び出されたＡＰＩの種別を判別する。処理判別部６４により、開発アプリケーション９から呼び出されたＡＰＩが「機種共通処理」ではないものと判別された場合、そのまま図１０のフローチャートの処理を終了する。
【００８１】
これに対して、処理判別部６４により、開発アプリケーション９から呼び出されたＡＰＩが「機種共通処理」であるものと判別された場合、ステップＳ２２に処理が進む。ステップＳ２２では、共通処理部７０が、図１１に示すように本体エミュレータ７の機種共通データ・ロジック機能７５、およびＧＵＩ設定機能７６を用いて「機種共通処理」のＡＰＩの動作検証を行う。そして、共通処理部７０が、パネルエミュレータ８を介して開発アプリケーション９に動作検証結果を返信して、図１０のフローチャートの処理を終了する。
【００８２】
次に、図１２は、開発アプリケーションから呼び出されたＡＰＩが、機種毎の固有の処理となる、「機種依存処理」である場合の動作検証処理の流れを示すフローチャートである。サードベンダが動作検証を行っている開発アプリケーション９からＡＰＩが呼び出されると、ステップＳ３１において、処理判別部６４が、呼び出されたＡＰＩの種別を判別する。処理判別部６４により、開発アプリケーション９から呼び出されたＡＰＩが「機種依存処理」ではないものと判別された場合、そのまま図１２のフローチャートの処理を終了する。
【００８３】
これに対して、処理判別部６４により、開発アプリケーション９から呼び出されたＡＰＩが「機種依存処理」であるものと判別された場合、ステップＳ３２に処理が進む。一例ではあるが、例えば開発アプリケーション９から呼び出されたＡＰＩが、機種Ａに固有の画像処理機能であり、機種Ｂの画像処理機能では処理困難であり、機種Ｃには画像処理機能が存在しない場合、処理判別部６４は、呼び出されたＡＰＩが「機種依存処理」であると判別する。
【００８４】
ステップＳ３２では、処理依頼部６６が、上述のように予めコネクションを確立しておいた、呼び出されたＡＰＩに対応する実機１または仮想実機４に対して、呼び出されたＡＰＩの動作検証を依頼する。すなわち、上述の例の場合、処理依頼部６６は、機種Ａの実機１または機種Ａの仮想実機４に対して、呼び出されたＡＰＩとなる固有の画像エンジンＡＰＩの動作検証を依頼する。依頼された機種Ａの実機１または機種Ａの仮想実機４は、図１３に示す画像処理エンジン７９で、画像エンジンＡＰＩに対応する動作検証を行う。
【００８５】
具体的には、実機１または仮想実機４は、画像処理エンジンＡＰＩにより画像処理エンジン７９に命令を発行しながら処理を行う。このとき、上述のようにエミュレータ操作ＵＩを介してサードベンダに設定された設定内容が用いられる。例えば、エミュレータ操作ＵＩを介してトナー残量＝０として設定された場合、実機１または仮想実機４のコントローラ７７は、実機１のトナー残量が０でなかったとしても、Ｈｏｏｋモジュール７８を介してトナー残量＝０と認識する。そして、実機１または仮想実機４のコントローラ７７は、図１３に示すように、例えばプリント失敗の動作検証結果などの、トナー残量＝０に応じた動作検証結果を、ネットワーク６などを介してアプリ開発装置３に送信する。
【００８６】
なお、例えば、機種の構成に関する情報を返すだけの処理の場合、処理のロジックは機種共通であり、返信するデータが異なるだけである。このような場合、本体エミュレータ７が、該当する機種から事前に情報を取得しておき、ＡＰＩの呼び出しに対し、本体エミュレータ７で処理してもよい。
【００８７】
次に、ステップＳ３３では、処理結果受信部６９が、動作検証を依頼した実機１または仮想実機４から動作検証結果を受信したか否かを判別する。処理結果受信部６９が、動作検証結果を受信したものと判別すると（ステップＳ３３：Ｙｅｓ）、処理がステップＳ３４に進む。ステップＳ３４では、処理結果受信部６９が、図１３に示すように本体エミュレータ７を介して開発アプリケーション９に動作検証結果を送信する。これにより、図１２のフローチャートの処理が終了する。
【００８８】
次に、図１４は、開発アプリケーションから呼び出されたＡＰＩが、「機種共通処理」および「機種依存処理」が混在している場合の動作検証処理の流れを示すフローチャートである。サードベンダが動作検証を行っている開発アプリケーション９からＡＰＩが呼び出されると、ステップＳ４１において、処理判別部６４が、呼び出されたＡＰＩの種別を判別する。処理判別部６４により、開発アプリケーション９から呼び出されたＡＰＩが「機種共通処理」または「機種依存処理」であると判別された場合、そのまま図１４のフローチャートの処理を終了する。
【００８９】
これに対して、処理判別部６４により、開発アプリケーション９から呼び出されたＡＰＩが「機種共通処理」および「機種依存処理」が混在しているものと判別された場合、ステップＳ４２に処理が進む。以下は、このような処理の混在を判別するように処理判別部６４を制御するためのプログラムのコメントおよびソースコードの一例である。
【００９０】
／／ＡＰＩ４００は、部分的に機種依存の処理を含む、一部の処理が機種Ｂに依存している
ＡＰＩ４００（）｛
機種共通処理（）；
ｉｆ（機種Ａ）｛
ＡＰＩ４００＿機種Ａロジック（）；
｝ｅｌｓｅ  ｉｆ｛
ＡＰＩ４００＿機種Ｂロジック（）；
｝
機種共通処理（）；
｝
【００９１】
次に、ステップＳ４２では、処理判別部６４が、現在、動作検証を行なおうとしているＡＰＩは、「機種共通処理」のＡＰＩであるか否かを判別する。処理判別部６４が「機種共通処理」のＡＰＩであると判別した場合（ステップＳ４２：Ｙｅｓ）、処理がステップＳ４７に進む。ステップＳ４７では、共通処理部７０が、「機種共通処理」のＡＰＩの動作検証を行い、パネルエミュレータ８を介して開発アプリケーション９に動作検証結果を返信する。
【００９２】
次に、ステップＳ４２において、処理判別部６４が「機種共通処理」のＡＰＩではないと判別すると（ステップＳ４２：Ｎｏ）、処理がステップＳ４３に進む。ステップＳ４３では、処理判別部６４が、現在、動作検証を行なおうとしているＡＰＩは、「機種依存処理」のＡＰＩであるか否かを判別する。処理判別部６４が、現在、動作検証を行なおうとしているＡＰＩは、「機種依存処理」のＡＰＩではないと判別した場合、ステップＳ４２に処理が戻る。これに対して、処理判別部６４が、現在、動作検証を行なおうとしているＡＰＩは、「機種依存処理」のＡＰＩであると判別した場合、ステップＳ４４に処理が進む。
【００９３】
ステップＳ４４では、処理依頼部６６が、上述のようにコネクションが確立済みの機種ＡＰＩ実装部５に対して、ＡＰＩの動作検証を依頼する。例えば、コネクションが確立済みの機種が機種Ｂである場合、処理依頼部６６は、「機種依存処理」のＡＰＩであるＡＰＩ４００＿機種Ｂロジック（）を処理するタイミングで、機種ＡＰＩ実装部５に動作検証を依頼する。
【００９４】
具体的には、機種ＡＰＩ実装部５は、図１５に示すように、サードベンダによりエミュレータ操作ＵＩを介して設定された設定内容を、Ｈｏｏｋモジュール８６を介して取得する。そして、機種ＡＰＩ実装部５は、図１５に示すように、取得した設定内容に応じて、サードベンダが開発している開発用ＡＰＩ８５（＝上述の「機種依存処理」のＡＰＩ）の動作検証を行い、ネットワーク６などを介して開発アプリケーション９に動作検証結果を返信する。
【００９５】
処理結果受信部６９は、ステップＳ４５において、「機種依存処理」のＡＰＩの動作検証結果を、機種ＡＰＩ実装部５から受信したか否かを判別し、動作検証結果を受信した際に（ステップＳ４５：Ｙｅｓ）、処理をステップＳ４６に進める。そして、処理結果受信部６９は、ステップＳ４６において、図１５に示すようにパネルエミュレータ８を介して、開発アプリケーション９に対して、「機種依存処理」のＡＰＩの動作検証結果を返信して、図１４のフローチャートの処理を終了する。
【００９６】
以上の説明から明らかなように、実施の形態のアプリ開発システムは、例えばサードベンダ等のＭＦＰのアプリケーションの開発者へ提供する本体エミュレータ７には、機種共通処理のみを実装して迅速に提供する。一方、各機種固有の処理である機種依存処理は、本体エミュレータ７の提供後に、例えば同一セグメントのネットワーク上、または、ネットワーク６を介してサービスを提供する、いわゆるクラウドコンピューティング方式のクラウド（サーバ群）上に設けられた、ＭＦＰ（実機１）、仮想実機４および機種ＡＰＩ実装部５に実装する。
【００９７】
サードベンダに提供された本体エミュレータ７は、サードベンダが開発している開発アプリケーション９から呼び出されたＡＰＩが機種共通処理である場合、本体エミュレータ７で動作検証を行い、動作検証結果を開発アプリケーション９に返信する。これに対して、本体エミュレータ７は、サードベンダが開発している開発アプリケーション９から呼び出されたＡＰＩが機種依存処理である場合、実機１、仮想実機４、または、機種ＡＰＩ実装部５にＡＰＩの動作検証を委ねる。そして、実機１、仮想実機４、または、機種ＡＰＩ実装部５から送信された動作検証結果を、開発アプリケーション９に返信する。
【００９８】
すなわち、各機種の各ＡＰＩを、機種共通処理と機種依存処理とに分けて動作検証する。これにより、アプリケーションを開発しているサードベンダ側の機器において、各機種のエミュレータをインストールする記憶領域を不要とすることができる。また、サードベンダ側において、各機種がバージョンアップされるたびに必要となっていた、エミュレータの更新確認、および、プラグインモジュールのダウンロードおよびインストール等の手間を省くことができる。また、サードベンダ側において、プラグインモジュールの追加インストールが不要である。このため、最初にインストールしたエミュレータのデータサイズが、各機種のバージョンアップで追加インストールされるプラグインモジュールで、徐々に大きくなる不都合を防止できる。
【００９９】
また、エミュレータを提供するメーカー側においては、機種共通処理に対応するエミュレータを、サードベンダ等に迅速に提供し、機種依存処理を、バージョンアップ毎に、実機１、仮想実機４および機種ＡＰＩ実装部５に実装する。これにより、各機種に対応したエミュレータをサードベンダ等に、より迅速に提供できる。また、バージョンアップのたびに、各機種のプラグインモジュールを準備する手間を省くことができる。
【０１００】
また、例えばＶＭｗａｒｅ（登録商標）等の仮想化ソフトウェアで、ＭＦＰのＣＴＬシステムを仮想化した仮想実機４は、ＭＦＰのＣＴＬシステムと略々同じシステムである。このため、仮想実機をサードベンダに提供すると、メーカー側のソフトウェア資産が流出するおそれがある。しかし、実施の形態のアプリ開発システムの場合、仮想実機４は、セグメント外に設けられており、サードベンダが仮想実機４に対して行える行為は、仮想実機４に対して各機種固有のＡＰＩの動作検証の依頼を行うこと、および、動作検証結果を取得することのみに限られる。このため、ソフトウェア資産の流出を防止したうえで、仮想実機４の機能を利用可能とすることができる。
【０１０１】
上述の実施の形態は、例として提示したものであり、本発明の範囲を限定することは意図していない。この新規な実施の形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことも可能である。例えば、上述の実施の形態の説明において、「エミュレータ」という用語を用いた。しかし、エミュレータと同様の処理を実行する機器または機能に対して、「シミュレータ」等の他の用語が用いられる場合がある。本発明は、このような用語（称呼）にかかわらず、アプリケーションなどのプログラムの動作検証などを行う全ての機器、または、機能等に適用可能である。そして、いずれに適用した場合でも、上述と同じ効果を得ることができる。実施の形態および実施の形態の変形は、発明の範囲や要旨に含まれると共に、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１０２】
１  実機
２  プラットフォーム開発装置
３  アプリ開発装置
４  仮想実機
５  機種ＡＰＩ実装部
６  ネットワーク
７  本体エミュレータ
８  パネルエミュレータ
９  開発アプリケーション
１０  ＭＰＦの本体
２０  ＭＰＦの操作部
６１  リスト取得部
６２  問い合わせ部
６３  判断部
６４  処理判別部
６５  表示制御部
６６  処理依頼部
６７  操作検出部
６８  コネクション確立部
６９  処理結果受信部
７０  共通処理部
【先行技術文献】
【特許文献】
【０１０３】
【特許文献１】特開２０１１−４４１２７号公報
【図１】
2015230623.tif 000003
【図２】
2015230623.tif 000004
【図３】
2015230623.tif 000005
【図４】
2015230623.tif 000006
【図５】
2015230623.tif 000007
【図６】
2015230623.tif 000008
【図７】
2015230623.tif 000009
【図８】
2015230623.tif 000010
【図９】
2015230623.tif 000011
【図１０】
2015230623.tif 000012
【図１１】
2015230623.tif 000013
【図１２】
2015230623.tif 000014
【図１３】
2015230623.tif 000015
【図１４】
2015230623.tif 000016
【図１５】
2015230623.tif 000017