携帯Javaファーストインプレッション

携帯Java最新事情
ドコモ仕様とMIDPはどう違う?



NTTドコモのJava仕様はサンの標準とは異なる

 NTTドコモのiモードJava仕様をめぐっては、発表前からさまざまな噂がネット上で飛び交い、雑誌やWebのメディアでも取り上げられてきた。だが、その中には情報が正確でないものも多く、いまだ混乱している読者も多いことだろう。まずはJ2MEの仕様について整理することで、サン・マイクロシステムズが策定する携帯用Javaの仕様とNTTドコモの仕様の違いを明確にしてみよう。

 J2MEは、さまざまな組み込み機器を以下の2つのカテゴリに分けて扱い、Javaの環境を提供している。

  • CLDC(Connected Limited Device Configuration)仕様
  • CDC(Connected Device Configuration)仕様

 ここで、それぞれの「Configuration」が定義する内容は、組み込み機器のCPUの性能やメモリサイズに対応して用意される基本的なクラスライブラリの構成だ。携帯電話やPalmなどの最も小さな組み込み機器を対象にしたConfigurationがCLDC仕様。それに対してセットトップボックスのような、CLDC仕様が対象とする機器よりは大きいがPCよりは小さいという組み込み機器を対象としているのがCDC仕様だ。

 ところで、CLDC仕様に用意されたJVMを「KVM(K Virtual Machine)」と呼ぶ。ここで「K」という名称がついているのは、Kオーダー(64KB〜128KB程度)のメモリで動作するという意味だ。

 次に、組み込み機器の大小ではなく、用途別に用意される機能が「Profile」と呼ばれるものだ。これはCLDCやCDCの上位レイヤに位置する。そして携帯電話に向けて用意されたProfileを「MIDP(Mobile Information Device Profile)」という。参考までに、CDCに向けたProfileには、CDC上の基本的なProfileである「J2ME Foundation Profile」や「J2ME Personal Profile」などが存在する。

 まとめると、J2MEで定義される携帯電話用のJavaの環境はCLDC + MIDPで提供される。さて、ここまで整理してきてやっと説明できるわけだが、NTTドコモの仕様は、CLDC + ドコモ独自のProfileである。さらには、携帯電話メーカーに対して独自のクラスライブラリの拡張を許している。

メーカー拡張 ドコモ独自の
プロファイル
MIDP
CLDC CLDC
KVM KVM
iモードJava MIDP

 MIDPの開発環境は、すでにサン・マイクロシステムズのサイトから入手可能なため、MIDPでJavaアプリケーション(MIDPで作成したアプリケーションを「MIDlet」と呼ぶ)を試している読者も多いだろう。実は、MIDPで作成したJavaアプリケーションはNTTドコモの503iでは動作しない。

 さて、ここまででNTTドコモの仕様がどのように異なるか大枠が理解いただけたと思う。次に、MIDPとドコモの仕様それぞれについて、もう少し詳しく説明を進める。

MIDPとは何か?

 MIDPは、サン・マイクロシステムズ、モトローラ、ノキアを中心とするMIDP Expert Groupにより策定された仕様で、主に携帯電話やページャーなどの携帯情報端末での使用を前提に作られている。MIDP Expert Groupには、その他に日本企業としてNTTドコモ、KDDI、J-フォン、富士通、日本電気、松下電器、三菱電機、ソニー、日立、シャープらが参加している。

 モトローラやノキアなど、世界の主な携帯電話機メーカーはすでにMIDPの採用を発表している。また、日本国内でも、J-フォンが2001年中にMIDPを採用したJava搭載携帯電話を出荷する予定であることを発表した。

 MIDPは、CLDCで走らせることのできる基本ライブラリと共に動作する。ちなみにCLDCは、現在公開されているPalmOSのKVMでも同様に使用されている。

 前述したように、このCLDCはJ2SEの基本ライブラリのサブセットで、java.lang、java.io、java.utilなどのJavaの基本となるライブラリのみの提供となっている。画面の描画やGUI部品はMIDPなどの各プロファイルが提供することとなる。

 また、CLDC仕様に向けたKVMがJ2SEのJVMと異なる点は、ターゲットとなる端末が非力であることやセキュリティ面の考慮から、以下のものがサポートされていない。

削除されている機能 内容
浮動小数点 小数点演算
Java Native Interface(JNI) ネイティブコードの呼び出し
ユーザー定義のクラスローダ 独自にクラスファイルを呼び出して実行する機能
リフレクション VM内のクラス、オブジェクト、メソッド、フィールド、スレッド、実行スタック、その他の実行時構造体の数および内容を検査する機能
スレッドグループと
デーモンスレッド
スレッドのグループ管理機能
ファイナライズ Object.finalize()メソッド
弱参照 ガベージコレクタとの制限付きの対話をサポートする機能

MIDPの主な特徴

 MIDPの主な特徴を以下に紹介する。

  • Descriptor fileのJADファイル(*1)を端末に読み込ませることにより、アプリケーションをダウンロードして使うことができる
  • J2SEのjava.netパッケージのサブセット程度の通信機能が備わっている
  • アプリケーションでデータの読み込みと書き込みができる(ただし制限があり、アプリケーション間でのデータ共有や、携帯電話側のメモリにはアクセスできない)

(*1:JADファイルはMIDP端末にアプリケーションを読み込ませるために使用するファイルで、アプリケーションのJARファイル名、JARファイルのサイズ、アプリケーション名などを記述する)

 アプリケーションをダウンロードして使えるようになると、「好きなときに好きなアプリケーションをダウンロードして使う」ということが可能となり、記憶容量の少ない携帯電話端末でも様々なアプリケーションを入れ替えて利用できる。

 また、従来のiモードやEzWebなどのHTMLのみで表現するコンテンツに比べ、通信機能や端末内でのデータの読み書きが可能になることで、よりインタラクティブ性の高いコンテンツがつくれたり、業務アプリケーションでの可能性も広がる。
(注:携帯電話内のアドレスデータなどへのアクセス機能はMIDPの仕様にはない)

MIDPの開発の現状

 MIDP準拠のアプリケーション開発は、以下の点に気をつけて開発する必要がある。

  • MIDP自身があくまでも仕様であり、一度書いたらすべてのMIDP準拠端末で問題なく動くとは限らない
  • ターゲットとする端末によりアプリケーションサイズの許容範囲が違う場合がある
  • 機能的に物足りないので、メーカーが独自拡張APIを提供する可能性が高い

 だが、実際には携帯電話によってこのあたりの仕様は大きく変わってくると思われるので、携帯電話ごとに調整する必要がある。

 インタラクティブなコンテンツを作成しようとすると、たとえば音で機能的な物足りなさを感じることになる。エラー音を出力するAPIしか用意されていないからだ。そのために、各キャリアやメーカーが、マルチメディア機能を独自拡張のAPIで提供する可能性がある(実際にNTTドコモはiメロディと呼ばれる仕様でAPIを用意している)。

 独自拡張APIは別として、注意点を整理して考えていくとMIDP準拠アプリケーションであっても「各ターゲット端末毎に微調整の必要がでてくる」可能性がある。たとえばMIDP1.0仕様書には、画面サイズは96x54以上、動作可能なアプリケーションサイズは8KB以上であることなどが記載されているが、緩やかな規定であるために携帯電話ごとの違いが出てくる。ターゲットとする端末が増えれば増えるほど、微調整の手間が増える可能性があるだろう。場合によっては各端末ごとに微調整したアプリケーションを用意するという割り切り方をする可能性も出てくるので、先にこの辺りのことをきちんと考えてアプリケーションを開発する必要があるだろう。

●デスクトップ環境でのJava開発に慣れている開発者が注意すること

 J2SEでの開発に慣れている開発者は、以下の様な点に気をつけて開発する必要がある。

  • J2SEよりGUI部品が少ない
  • ターゲット端末が携帯電話などのため、PCとは違う特殊なキー操作が必要となる
  • 画像ファイルフォーマットに基本ライセンスフリーのPNG(Portable Network Graphics)形式を使用している
  • MIDPはあくまでも仕様であるために、画面サイズなどの違いにより各ターゲット端末ごとにカスタマイズする必要がある
  • アプリケーションの容量制限がある
  • ターゲット端末が携帯電話などのため、電話がかかってきた場合に一時中断される可能性があることを考慮する必要がある

 などが挙げられ、特にキー操作などの点に考慮して開発をしていかないと、とても使いづらいアプリケーションになる可能性がある。

 その他については、CLDCがJ2SEのサブセットであることもあり、GUI以外の部分は比較的J2SEと同様の感覚で開発できる。

MIDPの開発環境

 現在、MIDP準拠のアプリケーションを開発ための開発環境には以下のようなものがある。

  • MIDP FCS1.0(Windows版)(サン・マイクロシステムズ)
  • J2ME Wireless Toolkit(Windows版)(サン・マイクロシステムズ)
  • iDEN SDK(Windows版)(モトローラ)
  • WHITEboard SDK (Zucotto Wireless)
    (※いずれも無料の会員登録が必要)

 以上の環境には、クラスライブラリ、サンプル、エミュレータなどがパッケージされている。だが、コンパイルパイルなどに関してはJ2SE SDKやその他のRAD開発環境が必要だ。

 MIDP FCS1.0は1種類の携帯電話形エミュレータが提供されており、動作は快適だ。しかし、コンパイル、Preverify、JADファイル作成、JAR化はコマンドラインから行う必要があるため、それらの知識が必要になる。もし日本語を使いたい場合は、エミュレータのソースをC 言語のコンパイラでコンパイルし直す必要がある。

 サン・マイクロシステムズのJava2 Micro Edition Wireless Toolkitは、4種類(基本3種類)の端末エミュレータを選択して試すことができ、サン・マイクロシステムズのForte for Javaと組み合わせるとMIDPアプリケーションの開発から実行までの行程をForteのIDE上で行える。ただし、MIDP FCS1.0と同じように見える携帯電話型のエミュレータであっても、動作が異なる場合が若干あるので注意が必要だ。 以下がエミュレータの画面である。画面にはスカイアーツが開発したX21を表示させている。

 
DefaultColorPhone
(クリックすると拡大します)
  DefaultGrayPhone
(クリックすると拡大します)

 
MinimumPhone
(クリックすると拡大します)
  Pager(クリックすると拡大します)

 モトローラのiDEN SDKはMIDP準拠のモトローラのiDENという携帯電話端末で使用することを前提に作られているが、この環境でもMIDPアプリケーションの開発ができる。独自拡張APIはないので、純粋なMIDPアプリケーションを作成する場合の選択肢の1つだ。エミュレータの種類は多く、基本的に画面サイズなど変更できるので非常にまとまった環境であるといえるだろう。以下が、iDEN SDKのエミュレータの画面である。

iDENのエミュレータ画面

 Zucotto WirelessのWHITEboard SDKは、JavaチップメーカーであるZucotto Wirelessが開発した開発環境で、3種類のエミュレータがある。こちらも細かく画面サイズなどを変更できる。Forteと組み合わせた開発ができるようだ。

MIDP開発のためのリンク集

 MIDP関連の情報は、Web上でも豊富に公開されている。非常に参考になるのでいくつかをご紹介しよう。

Mobile Information Device Profile (MIDP)(英語)
米サン・マイクロシステムズのMIDPのサイト。MIDPの開発キットやその他の情報が手に入る

Wireless Technologies(英語)
米サン・マイクロシステムズのサイト。MIDP開発に関しての情報を集めたリンク集

Java Technologies for WIRELESS
サン・マイクロシステムズのサイト。ワイヤレスデバイス用Javaテクノロジの解説をしている

K Virtual Machine (KVM)
サン・マイクロシステムズのサイト。J2MEのコアとなるKVMを解説している

●その他
@IT内に掲載している携帯・Palm Javaリンク集

 

NTTドコモのiモードJava仕様

Index
  携帯Javaの最新事情
NTTドコモのJava仕様はサンの標準とは異なる
  MIDPとは何か
  MIDPの特徴
  MIDPの開発の現状
  MIDPの開発環境
  MIDP開発のためのリンク集
  NTTドコモのiモードJava仕様
  iモードJavaの開発環境
  開発のためのリンク集
  今後の動向はどうなる? 




Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間