電子機器に外部デバイスが接続されたとき、前記外部デバイスを前記電子機器のOSに認識させるためのデバイスドライバを選択する処理を、前記電子機器が備える演算装置に実行させるデバイスドライバ選択プログラムであって、前記電子機器は、前記デバイスドライバとして、バイナリコードで実装されたネイティブデバイスドライバと、実行環境に依存しないバイトコードで実装されたバイトコードデバイスドライバと、を備えており、前記デバイスドライバ選択プログラムは、前記演算装置に、前記バイトコードデバイスドライバのうち、個別の前記外部デバイス毎に開発されているデバイスドライバを検索するバイトコード製品検索ステップ、前記バイトコード製品検索ステップにおいて該当する前記バイトコードデバイスドライバが見つからなかった場合、前記ネイティブデバイスドライバのうち、前記外部デバイスの種別毎に開発されているデバイスドライバを検索するネイティブ種別検索ステップ、を実行させることを特徴とするデバイスドライバ選択プログラム。前記電子機器は、実行環境に依存しないバイトコードで記述された常駐アプリケーションを常時実行しており、前記バイトコードデバイスドライバは、前記常駐アプリケーションの配下で実行されるバイトコードモジュールとして実装されており、前記デバイスドライバ選択プログラムは、前記バイトコード製品検索ステップにおいて、前記演算装置に、前記バイトコードデバイスドライバのうち、個別の前記外部デバイス毎に開発されているデバイスドライバを検索するように、前記常駐アプリケーションに対して依頼し、その結果を受け取るステップを実行させることを特徴とする請求項1記載のデバイスドライバ選択プログラム。前記演算装置に、前記バイトコード製品検索ステップを実行させる前に、前記ネイティブデバイスドライバのうち、個別の前記外部デバイス毎に開発されているデバイスドライバを検索するネイティブ製品検索ステップを実行させ、前記ネイティブ製品検索ステップにおいて該当する前記ネイティブデバイスドライバが見つからなかった場合、前記バイトコード製品検索ステップを実行させることを特徴とする請求項1または2記載のデバイスドライバ選択プログラム。前記演算装置に、前記ネイティブ種別検索ステップにおいて該当する前記ネイティブデバイスドライバが見つからなかった場合、前記バイトコードデバイスドライバのうち、前記外部デバイスの種別毎に開発されているデバイスドライバを検索するステップを実行させることを特徴とする請求項1から3のいずれか1項記載のデバイスドライバ選択プログラム。前記ネイティブデバイスドライバと前記バイトコードデバイスドライバは、前記電子機器上の物理信号を制御するレイヤーよりも上位のレイヤーのデバイスドライバとして記述されていることを特徴とする請求項1から4のいずれか1項記載のデバイスドライバ選択プログラム。前記ネイティブデバイスドライバと前記バイトコードデバイスドライバは、USB規格におけるデバイスドライバレイヤーのデバイスドライバとして記述されていることを特徴とする請求項1から5のいずれか1項記載のデバイスドライバ選択プログラム。請求項1から6のいずれか1項記載のデバイスドライバ選択プログラムと、前記ネイティブデバイスドライバと、前記バイトコードデバイスドライバと、前記デバイスドライバ選択プログラムを実行する演算装置と、を備えたことを特徴とする電子機器。実行環境に依存しないバイトコードで記述された常駐アプリケーションを備え、前記バイトコードデバイスドライバは、前記常駐アプリケーションの配下で実行されるバイトコードモジュールとして構成されており、前記演算装置は、前記常駐アプリケーションを常時実行することを特徴とする請求項7記載の電子機器。外部デバイスが電子機器に接続されたとき、電子機器のOSは、インストール済のデバイスドライバのなかから、その外部デバイスに適したデバイスドライバを検索する。このとき、Javaによって実装されたバイトコードデバイスドライバと、バイナリコードによって実装されたネイティブデバイスドライバとがともにインストール済である場合、OSはまずバイナリコードで実装されたデバイスドライバのなかから適したものを検索し、見つからなければJavaによって実装されたデバイスドライバを検索する。また、デバイスドライバには、個々の外部デバイス毎に最適化して開発された製品毎デバイスドライバと、外部デバイスの大まかな区分例えば、USBデバイス、ATAデバイスなどの接続規格毎の区分、または記憶デバイス、CD-Rドライブなどのデバイス用途毎の区分など毎に開発された種別毎デバイスドライバとがある。一般的には、製品毎デバイスドライバのほうが種別毎デバイスドライバよりも個別のデバイス毎に最適化されているため、OSは、まず製品毎デバイスドライバのなかから最適なものを検索し、見つからなければ種別毎デバイスドライバを検索する。したがって、OSがデバイスドライバを検索する手順は、以下のようになる。手順1ネイティブデバイスドライバのなかから、外部デバイスに適した製品毎デバイスドライバを検索する。手順2手順1で適したデバイスドライバが見つからなかった場合、ネイティブデバイスドライバのなかから、外部デバイスに適した種別毎デバイスドライバを検索する。手順3手順2で適したデバイスドライバが見つからなかった場合、バイトコードデバイスドライバのなかから、外部デバイスに適した製品毎デバイスドライバを検索する。手順4手順3で適したデバイスドライバが見つからなかった場合、バイトコードデバイスドライバのなかから、外部デバイスに適した種別毎デバイスドライバを検索する。この動作の結果、バイトコードデバイスドライバのなかに最適な製品毎デバイスドライバが存在していたとしても、ネイティブデバイスドライバのなかに外部デバイスと適合する種別毎デバイスドライバが存在していれば、そちらが優先的に選択されてしまう。本発明は、上記のような課題を解決するためになされたものであり、バイトコードによって実装されたデバイスドライバを備える電子機器において、外部デバイスが当該電子機器に接続されたとき、最適なデバイスドライバを選択することができる技術を提供することを目的とする。本発明に係るデバイスドライバ選択プログラムは、電子機器に外部デバイスが接続されたとき、バイトコードデバイスドライバのうち、個別の外部デバイス毎に開発されている製品毎デバイスドライバを、バイナリコードで実装された種別毎デバイスドライバよりも先に検索する。外部デバイスに適したバイトコードデバイスドライバが見つからなかった場合は、バイナリコードで実装された種別毎デバイスドライバを検索する。本発明に係るデバイスドライバ選択プログラムによれば、ネイティブデバイスドライバのうち外部デバイスに適した種別毎デバイスドライバが電子機器にインストール済である場合でも、バイトコードデバイスドライバとして実装された製品毎デバイスドライバを優先的に選択することができる。<実施の形態1>図1は、本発明の実施形態1に係る電子機器100の機能ブロック図である。電子機器100は、組込ソフトウェアを実行する組込機器であり、CPUCentralProcessingUnit110、OS120、JavaVMVirtualMachine130、ネイティブデバイスドライバ140を備える。CPU110は、OS120とJavaVM130を実行する演算装置である。以下では記載の都合上、OS120などのプログラムを動作主体として説明する場合があるが、実際にこれらプログラムを実行するのはCPU110であることを付言しておく。OS120は電子機器100のOSであり、デバイスドライバ選択プログラム121を内部モジュールとして備える。デバイスドライバ選択プログラム121については後述する。JavaVM130は、Java言語で実装されたソフトウェアを実行するJava仮想マシンである。ネイティブデバイスドライバ140は、バイナリコードによって実装されたデバイスドライバである。電子機器100は、OS120が起動するとき、常駐Javaプログラム131を自動的に起動するように設定されている。JavaVM130は、その設定にしたがって常駐Javaプログラム131を実行する。以後JavaVM130は、OS120がシャットダウンされるまで、常駐Javaプログラム131を実行し続ける。常駐Javaプログラム131の配下には、Java言語によって実装されたバイトコードデバイスドライバ132が配置されている。常駐Javaプログラム131は、バイトコードデバイスドライバ132をプラグイン形式で任意にロードし、またはアンロードすることができる。バイトコードデバイスドライバ132とネイティブデバイスドライバ140は、それぞれ複数種類設けてもよい。また、バイトコードデバイスドライバ132とネイティブデバイスドライバ140のなかには、それぞれ上述の製品毎デバイスドライバと種別毎デバイスドライバが存在する。図2は、電子機器100に外部デバイス200が接続されたときの動作手順を示す図である。記載の都合上、構成要素の符号は省略した。以下、図2の各ステップについて説明する。図2:ステップ1電子機器100の接続ポートに外部デバイス200が接続されると、CPU110はその旨を検出する。図2:ステップ2CPU110は、OS120に対し、外部デバイス200に適したデバイスドライバを選択するように指示する。OS120は、その指示にしたがって、デバイスドライバ選択プログラム121を起動する。図2:ステップ3デバイスドライバ選択プログラム121は、ネイティブデバイスドライバ140のなかに、外部デバイス200に適した製品毎デバイスドライバが存在するか否かを検索する。該当する製品毎デバイスドライバが存在すれば、そのデバイスドライバをOS120に提供し、OS120はそのデバイスドライバを用いて外部デバイス200を認識する。該当するデバイスドライバが存在しない場合は、ステップ4に進む。図2:ステップ4デバイスドライバ選択プログラム121は、バイトコードデバイスドライバ132のなかに、外部デバイス200に適した製品毎デバイスドライバが存在するか否かを検索するように、JavaVM130を介して常駐Javaプログラム131へ依頼する。常駐Javaプログラム131は、バイトコードデバイスドライバ132のなかから該当するデバイスドライバを検索する。該当する製品毎デバイスドライバが存在すれば、そのデバイスドライバをOS120に提供し、OS120はそのデバイスドライバを用いて外部デバイス200を認識する。該当するデバイスドライバが存在しない場合は、ステップ5に進む。図2:ステップ5デバイスドライバ選択プログラム121は、ネイティブデバイスドライバ140のなかに、外部デバイス200に適した種別毎デバイスドライバが存在するか否かを検索する。該当する種別毎デバイスドライバが存在すれば、そのデバイスドライバをOS120に提供し、OS120はそのデバイスドライバを用いて外部デバイス200を認識する。該当するデバイスドライバが存在しない場合は、ステップ6に進む。図2:ステップ6デバイスドライバ選択プログラム121は、バイトコードデバイスドライバ132のなかに、外部デバイス200に適した種別毎デバイスドライバが存在するか否かを検索するように、JavaVM130を介して常駐Javaプログラム131へ依頼する。常駐Javaプログラム131は、バイトコードデバイスドライバ132のなかから該当するデバイスドライバを検索する。該当する種別毎デバイスドライバが存在すれば、そのデバイスドライバをOS120に提供し、OS120はそのデバイスドライバを用いて外部デバイス200を認識する。該当するデバイスドライバが存在しない場合は、適当なデバイスドライバが存在しない旨をOS120に回答する。図2:ステップ1~6:補足電子機器100の接続ポートが複数ある場合は、外部デバイス200を電子機器100に複数接続することもできる。この場合、電子機器100に接続された外部デバイス200毎にデバイスドライバ選択プログラム121を起動してそれぞれの外部デバイス200について上記ステップを実行してもよいし、単一のデバイスドライバ選択プログラム121が全ての外部デバイス200について上記ステップを実行してもよい。以上、電子機器100に外部デバイス200が接続されたときの動作手順を説明した。なお、デバイスドライバ選択プログラム121は、OS120配下のプログラムモジュールとして実装してもよいし、OS120の一部として実装してもよい。<実施の形態1:まとめ>以上のように、本実施形態1に係るデバイスドライバ選択プログラム121は、バイトコードデバイスドライバ132のうち外部デバイス200の製品毎デバイスドライバを検索し、適したものが見つからなかった場合は、ネイティブデバイスドライバ140のなかから種別毎デバイスドライバを検索する。これにより、種別毎デバイスドライバよりも製品毎デバイスドライバを優先して選択することができる。また、本実施形態1に係るデバイスドライバ選択プログラム121は、ネイティブデバイスドライバ140のうち外部デバイス200の製品毎デバイスドライバを検索し、適したものが見つからなかった場合は、バイトコードデバイスドライバ132のなかから製品毎デバイスドライバを検索する。これにより、デバイスドライバの実装形態によらず、製品毎デバイスドライバを常に優先することができる。また、本実施形態1に係る電子機器100は、常駐Javaプログラム131を常時実行し、その配下のバイトコードモジュールとして、バイトコードデバイスドライバ132を備えている。これにより、デバイスドライバ選択プログラム121がバイトコードデバイスドライバ132を検索するとき、その検索要求を受け取るインターフェースが常駐プログラムとしてあらかじめ用意されていることになる。すなわち、バイトコードデバイスドライバ132を検索するために逐一Javaアプリケーションを起動する必要がなくなり、そのための処理負荷や起動時間を低減することができる。<実施の形態2>実施形態1では、常駐Javaプログラム131およびその配下のバイトコードデバイスドライバ132がJava言語によって実装されている例を説明したが、その他の実行環境に依存しないバイトコードを用いるプログラム言語を用いてこれらを実装することもできる。例えば、Microsoft登録商標社の.NETなどがその1例として考えられる。なお、バイトコードによって実装されているデバイスドライバは、物理層の制御に関してはより下層のデバイスドライバに委譲するのが通常である。したがって、バイトコードデバイスドライバ132は、電子機器100および外部デバイス200の物理信号を制御するレイヤーよりも上位のデバイスドライバとして実装されていることが望ましい。ネイティブデバイスドライバ140もバイトコードデバイスドライバ132と同じレイヤーのデバイスドライバであるため、同様である。例えば、外部デバイス200としてUSB規格に準拠したデバイスを想定する。USB規格では、広義のデバイスドライバのレイヤーとして、バスドライバ、コアドライバ、狭義のデバイスドライバが規定されている。バイトコードデバイスドライバ132とネイティブデバイスドライバ140は、USB規格における狭義のデバイスドライバとして実装されていることが望ましい。