corner imagecorner image
IDEPlatformPluginsDocs & SupportCommunityPartners

Java Card 開発のクイックスタートガイド

Java 対応スマートカード

執筆: Tim Boudreau、管理: Ruth Kusterer

Java Card は、スマートカードなどの、手のひらに載るくらい小さなデバイス上で動く JVM を操作できる魅力的なプラットフォームです。Java Card 3.0 では、次の 2 つのエディションが用意されています。

Classic:
これは、以前のバージョンの Java Card と同じです。このプラットフォームは、機能が大きく制限されています。たとえば、java.lang.Stringjava.lang.Object.hashCode() メソッド、および浮動小数点数がサポートされていません。
Extended:
強力な機能を備えた新しいスマートカードで、Java プラットフォームのより完全な実装がサポートされています。サーブレットがネイティブでサポートされる最大の利点は、使い慣れた API を使用して Web アプリケーションを作成して、そのアプリケーションをスマートカード上で実行できることです。

目次

要件

このチュートリアルを完了するには、次のソフトウェアとリソースが必要です。

このページの内容は NetBeans IDE 6.8 および 6.9 が対象です
ソフトウェアまたはリソース 必須バージョン
NetBeans IDE 6.9
Java Card SDK 3.02
NetBeans 用 Java Card プラグイン 1.3
Java Development Kit (JDK) version 6

プロジェクト環境設定の開始

スマートカードにはユーザーインタフェースがないため、カードのデータを読み書きできるスマートカードリーダーか、Java Card リファレンス実装 (RI) に用意されているエミュレータを使用する必要があります。このチュートリアルでは、エミュレータを使用します。

注: Java Card プラグインは任意のオペレーティングシステム上で動作しますが、Java Card RI のエミュレータは Windows でのみ使用できます。ほかのオペレーティングシステム上でも、RI を Java プラットフォームとして設定することはできます。そのためには、Mac または Linux システム上で、Windows パーティション上にある RI のインストールを NetBeans に設定します。ただし、この設定を使用してもプロジェクトは実行できません。

NetBeans IDE へのプラグインのインストール

  1. NetBeans IDE 6.9 をダウンロードおよびインストールします。
  2. インストールが完了したら、「ツール」>「プラグイン」メニューを選択します。
  3. 「使用可能なプラグイン」に、「Java Card」および「Java Card Runtime Bundle」という 2 つの Java Card 関連プラグインがあります。
    • Java Card は、Java Card プロジェクトのサポートを NetBeans IDE に追加するプラグインです。
    • Java Card 3.0.2 Runtime Bundle は、Java Card リファレンス実装のコピーがまだインストールされていない場合にのみ必要です。

    NetBeans 用 Java Card プラグインのインストール

  4. チュートリアルの手順を続けるには、プラグインのインストール後に IDE を再起動する必要があります。

Java Card プラットフォームの登録

プラグインマネージャーから Java Card 3.0.2 Runtime Bundle をダウンロードすると、Java Card SDK がプラットフォームとしてすでに設定された状態になります。ただし、java.sun.com からこのプラットフォームをダウンロードおよびインストールした場合は、「ツール」>「Java プラットフォーム」メニューを使用して、ほかの Java プラットフォームを登録するのと同じように Java Card プラットフォームを IDE に追加できます。

Java Card プラットフォームのインストール

Java Card プラットフォームの設定を完了すると、IDE の「サービス」タブに一覧表示されます。「サービス」タブが表示されない場合は、メニューから「ウィンドウ」>「サービス」を選択します。

インストールされた Java Card プラットフォームとデバイス

1 つの「プラットフォーム」に複数の「デバイス」を含めることができます。プロジェクトは、特定のプラットフォーム上にある特定のデバイスに配備します。

Java Card のプロジェクトタイプについて

メニューから「ファイル」>「新規プロジェクト」を選択し、「Java Card」カテゴリをクリックします。作成可能な複数のタイプの Java Card プロジェクトが表示されます。これらのプロジェクトはすべて、NetBeans Java SE プロジェクトと同じく、Apache Ant で構築されます。

NetBeans の Java Card のプロジェクトタイプ

「Classic Applet Project」では、Java Card 2.0 以前で使用されていたアプレットと同じく、従来の小型デバイス用の Java Card アプレットを作成します。「Classic Library Project」は「Classic Applet Project」と似ていますが、アプレットはありません。アプレット間で共有される、デバイス上に格納するコードを作成します。

「Extended Applet Project」および「Extend Library Project」では、Java Card 3.0 の拡張 API が提供されるため、java.lang.String などを使用できます。ブートクラスパスは、Classic プロジェクトと Extended プロジェクトの間で異なります。そのため、たとえば、コード補完を行った場合、Classic プロジェクトでは java.lang.String が表示されませんが、Extended プロジェクトでは表示されます。

Java Card アプレットのプロジェクトの作成

Web アプリケーションは、Java Card 3.0 のもっとも魅力的な機能でしょう。サーブレットが実装されたスケルトンプロジェクトを作成し、サーブレット API に完全にアクセスできるようになります。これを使用すれば、アプレット型のアプリケーションタイプを使用するよりも、作業がはるかに簡単になります。デバイス上で実行するアプリケーションを操作するために特殊なコードをクライアントに記述する必要がなくなり、Web ブラウザだけで操作できるようになります。リファレンス実装およびデスクトップ Web ブラウザを使用して、ローカルでアプリケーションをテストできます。

Java Card の Web アプリケーションプロジェクトの作成

プロジェクトでの作業

このチュートリアル用に、新しい「Web Project」を作成します。

この新しい Web プロジェクトで、プロジェクト名を「CardWebApplication」とし、プロジェクトの場所を NetBeansProjects ディレクトリに設定します。「完了」をクリックすると、プロジェクトが「プロジェクト」タブに表示されます。

「プロジェクト」タブでプロジェクトのノードを右クリックし、コンテキストメニューから「プロパティー」を選択します。「プロジェクトプロパティー」ウィンドウの「Run」セクションで、プロジェクトが配備するプラットフォームとデバイスを変更できます。「了解」をクリックして変更を保存します。

Java Card の Web アプリケーションに対する作業は、サーブレットコンテナに配備するほかの Web アプリケーションの場合と同じです。ツールバーの「主プロジェクトを実行」ボタンを押して、Hello World サンプルを実行します。Java Card の Web アプリケーションを実行すると、Web ブラウザのウィンドウが開き、「Hello from webapplication1.MyServlet」というサーブレットの出力が表示されます。

Java Card の Web アプリケーションプロジェクトのコード編集

アプレット型のプロジェクトを実行すると、NetBeans IDE は、コマンド行出力および Java Card コンソールという 2 つの便利なインタフェースを提供します。アプレットを操作するにはコンソールを使用します。コンソールでは、データを 16 進数で送信したり、その応答を読んだりすることができます。

ヒント: RI には、NetBeans IDE で開いて実行できるサンプルプロジェクトがさらに用意されています。

Java Card の「プロジェクトプロパティー」の「Run」タブ

特殊なプラグイン機能の使用

Java Card には、ほかの Java プラットフォームにはない 2 つの特別な機能があります。

アプリケーション識別子 (AID)
これは一意の識別子で、「//aid//720A75E082/0058AEFC20」のように表されます。この 16 進数の最初の部分はベンダー ID (国際標準化機構 (ISO) から取得します)、2 番目の部分はユーザーが作成する一意の値です。AID は、アプレットクラス、Java パッケージ (「Classic Applet Project」と「Classic Library Project」のみ)、およびアプレットの一意のインスタンスを識別するために使用されます (1 つのデバイス上に同じアプレットを複数回配備できます。インスタンスの AID は情報の送信先アプレットを選択するために使用されます)。
APDU スクリプト
データをアプレットに送信するためのスクリプトです。特定のアプレットインスタンスを選択して、データをそのインスタンスに送信する必要があるため、このスクリプトでは、16 進数を手動で入力するという手間のかかる作業が必要になります。事前に記述されたスクリプトを送信する代わりに、Java Card コンソールを使用することもできます。

この 2 つの作業はやや複雑ですが、NetBeans プラグインを使用すれば、これらの作業の複雑さを軽減できます。

  • プロジェクトを作成すると、アプレットの AID、Classic パッケージの AID、および 1 つのインスタンスの AID の適正値が自動的に生成されます。

  • 「プロジェクトプロパティー」ダイアログで「Applets」タブを選択すると、プロジェクトがクラスパスをスキャンし、検索可能なすべての Java Card アプレットサブクラスを探します。

    Java Card プロジェクトでのアプレットサブクラスの検索

  • 検索に成功するとダイアログが表示されます。そのダイアログで、実際に配備するアプレットを選択し、使用する AID 値や配備パラメータなどをカスタマイズできます。入力したすべてのデータを IDE が検証するため、無効なデータは入力できません。

    Java Card プロジェクトでのアプレット配備のカスタマイズ

  • 同じアプレットのインスタンスを 2 つ配備するように設定することもできます。ただし、1 つのアプレットインスタンスのみを配備するという単純な場合では、そのような設定を検討する必要はありません。

    NetBeans Java Card プロジェクトの配備済みアプレットインスタンスのカスタマイズ

  • アプレットの実行テストでは、APDU スクリプト全体を手動で入力する必要はありません。組み込みのコンソールを使用して、配備済みアプレットを直接操作できます。

    APDU コンソールの表示

    APDU コンソール

  • Classic プロジェクトの「パッケージ AID」(格納できるのは 1 つの Java パッケージのみ) も IDE によって処理されますが、カスタマイズが可能です。

    Classic パッケージの AID のカスタマイズ

  • プロジェクトの AID 値の一部は必ず ISO が割り当てたベンダー ID (RID) になります。すばやく作業を開始できるように、IDE は RID 用のランダムな値を生成します。開発やテストではこの値を使用できます。公式の RID がある場合は、「ツール」>「オプション」>「その他」から「Java Card」タブを選択して入力できます。この RID はすべての新規プロジェクトに使用されます。既存のプロジェクトの値を更新するには、「プロジェクトプロパティー」で「Generate」ボタンをクリックします。

    Java Card プロジェクトのすべての AID が使用するグローバル RID の設定

サードパーティー SDK の統合

現在、このツールでは Java Card 3.0.2 リファレンス実装のみがサポートされていますが、ベンダーのカードを統合するための拡張可能な API が用意されています。プラットフォームとデバイスの定義は、構築スクリプトによってインポートされる単純なプロパティーファイルに収録されています。

配備は、カードベンダーから用意される Ant タスクのセットを使用して行います。そのため、作成されたプロジェクトは IDE の外部で実行できるようになり、制約はありません。Java Card RI の一部である Ant タスクのソースは、NetBeans 用のサンプルプロジェクトとともに、「Java Card プロジェクトポータル」からダウンロードできます。

Java Card 配備ツールを作成したカードベンダーの方は、プラグインの作者である カードの統合方法を問い合わせてください。IDE によるカードのサポートをどの程度希望されるかに応じて、さまざまなレベルの統合方法が用意されています。


関連リンク