GO BACK

Java教室 i-mode篇その1


「iアプリの基礎」



■iアプリってJDKで作れるの?

 Javaの爆発的普及の起爆剤となりそうなのが、新世紀始めに登場した「i-mode 503i」です。これにより、「Javaアプリケーション」というものが一般の人の間に急速に広まりました。これで「Javaって何?」と興味を示す人は多いようです。また、以前からJavaを知っていた人でも、i-modeにより認識を新たにした人は多いことでしょう。「Javaはちょっとかじっているから、自分でもiアプリを作ろう」と思う人だって、きっといるに違いありません。

 なにしろ、iアプリは「アマチュアでも参入できる世界」なのです。今さら一介のアマチュアプログラマがプレステ2のゲームを作って一旗あげよう、なんてことは絶対にできませんが、iアプリなら可能です。なにしろ、503iで動くiアプリは、わずか数キロバイトのプログラムなのです。我々シロウトだって、アイデア次第ではけっこう注目されるものが作れる世界なんですよ!

 が、それじゃ自宅のWindowsマシンにインストールしてあるJDKで作ろうか、と考えたとしても、そうはうまくいきません。なぜなら、それではiアプリは作れないからです。「え、普通のJava環境では作れないの?」と驚かないで下さい。これは、イエスでもありノーでもあります。

 iアプリは、Java2 ME(Micro Edition)と呼ばれるエディションをベースに、i-mode用の独自の仕様を取り込んた規格にそって作られたものです。皆さんがWindowsマシンにインストールしているのは、Java2 SEというものですね。これとはちょっと違うのですよ。

 が、「じゃあ作れないのか?」というとそんなことはありません。J2SEとJ2MEは、開発(ソースコードのコンパイル)については、違いはないのです。作られるクラスファイルそのものはどちらも全く同じで、異なるものができるわけではありません。実際に作ったクラスファイルが動作する環境(Java仮想マシン)などについては異なりますが、作るだけならJ2SEでも大丈夫なはずなのです。

 問題は、「J2ME(というより、i-mode用)のクラスライブラリがない」「できたプログラムを動作させる環境がない」ということでしょう。また、当たり前ですがiアプリの作り方は普通のJavaアプリケーションとは違います。ですから、今までの感覚でコードを書いても動きません。「自宅のJDKだけでは作れない」といったのは、そういう事情からです。 ――が、必要なものが入手できれば、自宅のJ2SEでも(ただしJDK 1.3以降のもの)iアプリは作れます。

 では、これらはどこで入手すればいいのでしょうか。まず、本家であるNTT-DoCoMoからは「J2ME Wireless Toolkit for DoJa」という開発ツールが無償配付されています(Windows用のみ)。まずは、これをダウンロードしておきましょう。これは、プログラムのコンパイル、プリベリファイ、JAMファイル生成といったiアプリ開発の面倒な作業を自動化してくれるもので、非常に便利です。また、NTT-DoCoMoのサイトには503iのための技術文書がアップロードされていますので、とりあえずこれらはダウンロードしておくことをお勧めします。

(NTT-DoCoMoのi-mode用Javaのページ:http://www.nttdocomo.co.jp/p_s/imode/java/index.html

 また、他のサードパーティによるライブラリを利用する手もあります。私が使ったのは、ゼンテック・テクノロジー・ジャパンといところの「i-JADE」というi-mode開発環境です。これは商品版以外に「i-JADE Lite」というフリー配布版もあるのです。このi-JADE Liteはライブラリとエミュレータが一体となったJARファイルで、これで開発もでき、作ったiアプリをエミュレータ上で実行し動作チェックできるという、フリーとは思えないスグレモノです。ゼンテック・テクノロジー・ジャパンのサイトで配布するのでアクセスしてみましょう。住所氏名などを登録するとダウンロードができます。

(ゼンテック・テクノロジー・ジャパンのi-JADEのページ:http://www.zentek.com/i-JADE/index.html


●i-JDAE Liteの動作環境●

 i-JADE LiteはJavaアーカイブのファイルになっています。Windows環境では、このファイルをダブルクリックすると、プログラムが起動し、以下のような携帯電話のエミュレータが現れます。これでiアプリのファイルを選択してその場で実行させることができるのです。

 これは、P503iエミュレータで、サンプルとして付属するマインスイーパーゲームを動かしてみたところ。まあ、こんな感じで動きます。使い方も簡単だし、動作チェックがその場でできるのは実に便利! とりあえず、現状ではiアプリを開発するもっとも手軽で便利なツールといっていいでしょう。しかも、タダだしね!

 このi-JADE Liteは、マニュアルによると以下のような動作環境が必要となっています。

・Windows 95/98/Me/NT4.0/2000(NT 4.0では要Service Pack4以降)
・Pentium 300MHz以上、メモリ128MB以上(推奨)
・JDK 1.3以上

 ただし、このi-JADE Liteはpure Javaなプログラム(100%全てJavaだけでできている)なので、上記のプラットフォームでなくとも、Java2 ver. 1.3が動く環境であれば動作すると思います。ただし、アップロードされていたファイルはWindows用のインストーラのみのようですので、一度Windows環境で解凍インストールする必要があります。

 一応、ここではWindows Meをベースに(私がこれで使ってるので)して説明していきますが、他のWindows関係で使っても大丈夫なはずです。また試してませんが、Linuxでも大丈夫でしょう。

 Macではどうか?というと、現状のMacのMRJではダメみたいです。が、Mac OS Xという手はあります。Mac OS X にはJava2SE 1.3が標準で入ってますから。実際に試したところ、なんとか動きました。こんな感じね。

 が、うちで試してみると、Java関係はウィンドウを切り替えたりドラッグしたりする度にハングアップしたみたいに反応が返ってこなくなり、30秒ぐらいず〜〜〜っと待ってないといけないことが頻繁にあります。また、WindowsのようにJARファイルをダブルクリックで起動できず、ターミナルからjavawコマンドで実行しないといけないなど、今一つ使い勝手はよくないです。 Developer Toolsをインストールしてあるならば、Project Builderで連係して動かす方法があるんじゃないかと思います(まだやってない)。

 

■iアプリの仕組み

 というわけでこれからiアプリ作成について説明をしていきますが、実をいうと私自身もまだ触り始めたばかりで、あんまり深くわかってません。それで、まあ自分の勉強もかねて、わかったことを整理して講座にまとめた、という感もあります。ですので、もし「ここが違っている」というようなものが見つかりましたら、どうぞ御連絡下さいませ。よろしくね!

 さて、iアプリを作るためには、iアプリがどのような仕組みになっているのか、その基本構造を知らなければいけません。まず、それから説明していきましょう。

 通常のJavaとiアプリの最大の違い、それは「使用するライブラリ」です。JavaにはSun Microsystemsが標準で用意した膨大なクラスライブラリが付属しています。そして、それらを使って私たちはJavaのプログラムを作っています。iアプリの場合、私たちが使うJ2SEの環境そのままではありません。

 iアプリの環境を簡単に整理するなら、こんな感じになるでしょう。

 これが、ごく単純化したイメージです。OSなどのネイティブな環境の上に、J2SEならばまずJVM(Java仮想マシン)があり、その上にクラスライブラリが乗っている感じになりますよね? i-modeの場合、まず「KVM(K Virtual Machine)」という仮想マシンが用いられます。これは、組み込みJava用に開発されたJVMのサブセットといった感じの仮想マシンです。少ないメモリで動くよう設計されていますが、機能的には通常のJVMと比べかなり制限されています。

 その上に、「CLDC(Connected, Limited Device Configration)」と呼ばれるライブラリが搭載されます。これが、私たちが普段J2SEで使っているクラスライブラリに相当するものです。もちろん、普通のものに比べかなり内容は縮小されています。そして、その更に上に、NTT-DoCoMoが開発したi-mode用の専用ライブラリが用意されます。これらが、まあiアプリ用の基本ライブラリといってよいでしょう。

 それとは別に、iアプリ利用のための機能がいくつか用意されています。まず「Java Application Manager(JAM)」というもの。これは、文字通りiアプリの管理を行なうためのものです。そして「ScratchPad」。これは、iアプリで使用するデータなどを保存するための、まあ超小型RAMディスクみたいなイメージでいればいいでしょう。この他、細かな機能はいろいろありますが、こんな感じの仕組みになっているわけです。

 従って、iアプリを作るには、最低でも以下の2点を知っておかねばいけません。

1.iアプリではどんなクラスが用意されていて使うことができるのか。私たちは普段AWTやSwingのライブラリを使ってFrameやらAppletやら作って、そこにButtonやらFieldやら配置していますね。しかしこれらは全て使えません。代りに、i-mode用のライブラリにあるクラスを使ってアプリケーションを作ることになります。

2.iアプリはどうやって起動され、終了されるのか。ダブルクリックで起動したり、MS-DOSプロンプトからJavaコマンドで実行したりするわけじゃありませんから、「iアプリはこのようにしてロードされ実行される」といった仕組みを理解しておかないといけません。また、iアプリを終了する方法もわからないといけないですね。

 これらについて、まず概略だけでも理解できるようになれば、なんとかiアプリは作れそうです。

 

■iアプリを作る!

 では、とりあえずごく簡単なiアプリを作ってみましょう。とりあえず、DoCoMO純正のツールなどがあればコンパイル&Runは簡単なんですが、ここではWindows以外でも一応できるよう、J2SEベースで説明していきます。――まず、テキストエディタなどを起動し、ソースコードを作成しましょう。以下がそのコードです。細かい説明は後にして、記述をしたら「Test1.java」というファイル名で保存して下さい。

 

import com.nttdocomo.ui.*;
public class Test1 extends IApplication {
public void start() { Display.setCurrent(new Test1Frame(this)); }
}
class Test1Frame extends Panel implements SoftKeyListener { IApplication app;
public Test1Frame(IApplication a){ app = a; setTitle("Hello"); setSoftLabel(Frame.SOFT_KEY_1, "Exit"); setSoftLabel(Frame.SOFT_KEY_2, "TEST"); setSoftKeyListener(this); }
public void softKeyPressed(int softKey) { switch(softKey){ case Frame.SOFT_KEY_1: app.terminate(); break; case Frame.SOFT_KEY_2: Dialog dl = new Dialog(Dialog.DIALOG_INFO,"Test"); dl.setText("This is Test."); dl.show(); break; } }
public void softKeyReleased(int softKye){}
}

 

 次に、MS-DOSプロンプトを起動してコンパイルをします。cdコマンドでディレクトリを移動し、javacコマンドでコンパイルをします。が! 単に「javac Test1.java」ではコンパイルはできません。インストールしたi-JADEのJARファイルをクラスパスに指定し、ここからライブラリを読み込むようにする必要があります。これには「javac -classpath 《パスの指定》 ○○.java」というように、ライブラリとするJARファイルを指定してjavacを実行します。例えば、i-JADE Liteをライブラリとして使ってコンパイルするならば、こんな感じになります。

javac -classpath "c:\i-jade\i-jade-p.jar" Test1.java

 Cドライブの「i-jade」フォルダ内に「i-jade-p.jar」というファイル名でJARファイルがあるとした場合、上記のように実行します。もし、「毎回書くのは面倒だ」と思うなら、AUTOEXEC.BATでCLASSPATH変数にパスを追加してしまえばよいでしょう。

 コンパイルが成功し、クラスファイルができたら、i-JADEのエミュレータを起動します。Windowsでは、Java2より「Excutable Java Archive」という機能がサポートされ、ダブルクリックで起動できるアプリケーションファイルが作れるようになっています。このi-JADEもそれを使ってできてますので、「i-jade-p.jar(これがP503i用)」または「i-jade-f.jar(こちらはF503i用)」というファイルをダブルクリックするだけで、普通のEXEと同じように起動して使うことができます。

 起動したら、「iアプリのオープン」メニューを選び、作成した「Test1.class」を開き、実行します。しばらく待つと、エミュレータに「Hello」というタイトルの画面が現れます。これが、作成した「Test1」というiアプリです。

 右下に、「TEST」という表示が見えますね。これは携帯電話の右上にあるキー(キーパッドといいます)を押すと実行されます。これを押すと、画面に「This is Test」という表示が現れますよ。また、左上には「Exit」という表示が見えますが、これは携帯電話左上にあるキーで実行されます。これを実行すれば、iアプリは終了します。

 このプログラム、F503iとP503iの両方で動作確認した人は、若干動作が違っていることに気がついたかも知れません。P503iの場合、左上のキーを押し下げるとメッセージが現れ、離すと消えます。F503iでは、押すとメッセージが現れ、その後フォーカスをボタンに移動してもう一度キー(今度は決定キー)を押すとメッセージは消えます。なんか不思議ですね?

 詳しくは次回にソースコードの説明をするのでわかるはずなんですが、ここではキーを押し下げた時にメッセージを表示するようなコードを書いてあります。で、F503iでは、メッセージを閉じるには、そのためのボタンにフォーカスを移動しないといけないのです。ところがP503iの場合は、メッセージ表示をしたのと同じ右上のキーを離した瞬間に消えるようになっています。つまりボタンを押し下げた時にメッセージが表示され、そのボタンを離すと「メッセージを閉じる」という命令が選択されたのだと判断されてしまうため、そのまま消えてしまうんですね。

 とりあえず「iアプリ製作」に入る前に、「503iの仕様は全て統一されているわけではなく、細かいところで機種による違いがけっこうあるのだ」ということだけは知っておいて下さい。

 ということで、まー、たいしたものじゃないけど、ちゃんと「i-modeで動くiアプリ」が自宅のパソコンでできることはわかったでしょう? といっても、ここではエミュレータ上で動いただけで、実際に503iで動かしたわけではないけど(これにはもう一歩処理が必要、しばし待つべし)、iアプリが自分のWindowsマシンで作れるということはわかったでしょう。

 次は上のコードを元に、iアプリのコードの基本について考えてみる予定です。



GO NEXT


GO HOME