Java MEと携帯端末


Javaは現在、大きく分けて3つの分野で広く使われています。1つはパソコン、1つはサーバー、そしてもう1つが「携帯電話」です。これらの中で、おそらくもっとも身近になりつつあるのが、携帯電話ではないでしょうか。

日本では、NTT docomoで「iアプリ」や「Starアプリ」が、そしてソフトバンクで「S!アプリ」が、それぞれJavaのプログラムとして使われています。またauも、今はBrewと呼ばれる(Javaではない)EZアプリが主流となっていますが、それ以前はJavaによるEZアプリ(旧EZplus)が使われていましたし、現在は「オープンアプリ」と呼ばれるものがJavaで動くプログラムとして使われています。また日本に限らず海外でも、多くの携帯電話が、Javaのプログラムを実行するための機能を搭載しており、「携帯電話のプログラム=Java」といっても過言ではないほどに広がりを見せているのです。

携帯電話のJavaの環境は、大きく2つに分けられます。1つは、NTT docomoによる「docomo Java(DoJa、iアプリの実行環境)」、そしてもう1つが「Java ME」です。「でもJava MEなんて聞いたことないな」と思われた人。「S!アプリ」とか「オープンアプリ」といったものは、実をいえばJava MEを使っているのですよ。

Java MEは、正式名称を「Java Micro Editon」といいます。これは、パソコン用にリリースされているJava SE(Java Standard Edition)の携帯端末向けエディションといってよいでしょう。携帯端末は、パソコンとはさまざまな点で違いがあります。画面は小さいし、メモリも少ない。また携帯端末は、その機種などによってハードウェアも異なります。キーボードが搭載されているものもあれば、携帯電話のように数字キー+いくつかの機能キーだけのものもあるし、まったくキーボードがない端末もあるでしょう。こうしたものにそれぞれ適合したJavaプログラムを利用できるための環境としてJava MEというものが用意されたのです。

CLDCとMIDP


Java MEは、Java SEのように「Java仮想マシンの上に標準のライブラリが載っている」というような単純な構造ではありません。携帯端末ではさまざまなハードウェアがあります。それらに対応するため、Java MEでは以下のような構造になっています。

・仮想マシン
まず、一番土台となるJava仮想マシンには、一般的な仮想マシンの他、「KVM」という特別な仮想マシンも用意されています。これは、非常に小さなメモリで動作するように設計された仮想マシンです。次のコンフィグレーションによって、使われる仮想マシンも異なります。

・コンフィグレーション
プログラムが動作する想定環境として、コンフィグレーションというものが用意されています。これは「CDC(Connected Device Configuration)(Connected Limited Device Configuration)」と「CLDC」の2つがあります。CDCは、32bit CPUと潤沢なメモリがあると想定される環境で、カーナビなどで使われます。CLDCはあまりパワーのないCPUと少ないメモリしかない想定の環境で、携帯電話はこちらが使われます。

・プロファイル
コンフィグレーションに搭載されるAPI(クラスライブラリ)のセットです。携帯電話では、CDLCのコンフィグレーションに「MIDP(Mobile Information Device Profile)」というものが用意されています。

携帯電話向けのJava MEは、KVMによる小さな仮想マシン、CDLCコンフィグレーション、MIDPのプロファイルによって構成されます。このMIDPを学ぶことが、Java MEを学ぶことだと考えてよいでしょう。

「ということは、Java MEを採用している会社のJavaプログラムはみんな同じなのか」と思うかもしれませんが、実は違います。ほとんどの会社では、MIDPに更に独自のライブラリなどを加えています。このため、残念ながら「MIDP準拠ならプログラムは同じ」とはいきません。ただし、基本となるMIDP部分は全く同じですから、自分で作ったプログラムを、各社の携帯向けに対応させることはそれほど大変ではありません。

携帯向けJavaの基本的な構造。CLDCにMIDPが載せられ、その上に更に各社の独自ライブラリが積み上げられている。


MIDPとDoJaの違いは?


携帯電話では、MIDPの他に「DoJa」という環境も使われています。これは、NTT docomoの「iアプリ」が動く環境のことです。このDoJaは、ベースはMIDPと同じCLDCですが、その上に独自のDoJaライブラリが搭載されています。つまり、MIDPの部分が全く違うのです。このため、両者はまったく互換性がありませんし、プログラムを対応させる場合にもかなり大幅な書き換えが必要となります。

ただし、基本的な機能などはそれほど大きな違いはありませんから、ある程度学習すれば、MIDPからDoJaへ、あるいはその逆の移植などもできるようになるでしょう。