短期集中連載 大和哲の iアプリプログラミングをしよう
第1回: iモード携帯電話をPC的に見てみよう



■ はじめに

 先月26日にNTTドコモより、「503i」シリーズが発売になった。CMなどで「iアプリ」と連呼されている、iモード用Javaプログラムを利用できるiモード携帯電話だ。

スターソルジャー

(C)1986,2001 HUDSON SOFT
 この503iシリーズ、普通のケータイユーザーにとっては「ゲームが動いて、ソフトもダウンロードできる携帯電話」というイメージになるのだろうが、プログラム的なものに興味のある者にとってのそれはやはり「Java搭載でプログラムが作れる携帯電話」ということになるだろう。自分で作ったプログラムが携帯電話上で動くのだ。

 さらに503iシリーズで使われているiモード用Javaでは、開発環境も、必要最低限の物は必要なものはフリーで手に入れることができる。

 この連載では、この503iシリーズとそのプログラミング開発環境、そして、また、どのようなプログラミングが可能なのかを3回に渡って紹介していく。



■ アーキテクチャ的に見る503iシリーズと開発環境

 iモード携帯電話は、アーキテクチャ的に言うと、こんな感じになっている。

 iモード Javaは3つのAPI層から構成されてる。
 基本は組込み機器用途などに使われるバージョンのJava2であるJava2 Micro Edition(以下J2ME) Connected, Limited Device Configuration(CLDC)が利用されている。これはPCなどでよく使われるStandard Edition(J2SE) のサブセットで、通常のPC環境で言えば、CPUにあたるJavaVMは「KVM」という数十KBの大変小さなものが採用されている。KVMで実行されるJavaByteコード自体はJ2SEやエンタープライズ版のJava2 Enterprise Edition(J2EE)と共通だが、KVM自体には浮動小数演算の機能がないなどの制約がある。CLDCは標準化活動(Java Community Process)によって策定されたクラス構成で、これで、携帯型ネットワーク情報機器用にStandard Edition のどれだけをサブセット化するかが決められている。

 J2ME用のソフトの開発は基本的にJ2SEと共通のSDKを使う。そして、CLDCの開発キット中にある「preverify」(事前確認ツール)などで作ったプログラムがJ2ME CLDCの範囲内に収まっているかどうかをチェックし、実際にJ2ME搭載機で使用するわけだ。

NTTドコモのページにある、iモードのアーキテクチャの図。KVMの上に、CLDCライブラリ、そして、iモードライブラリがあり、同列に端末メーカによる拡張ライブラリ(機種依存ライブラリ)が存在する
 さらに、iモード用Javaには、「iモード対応Javaプロファイル」と呼ばれる、iモード独自のライブラリがある。ということで、iアプリは、Javaで書かれたプログラムだが、残念ながらiモードでしか使えないはずである(ただ、仕様は公開されているので、iモードJava互換のライブラリを載せて、iアプリが使えるようにした後発の携帯電話などが出てくる可能性もあるが)。

 なお、基本的には仕様が決まっているものの、細かい部分、たとえば、ユーザーインタフェースで、内容が表示部分より多くなった場合スクロールするか、あるいはリストが選ばれた場合の挙動など仕様の段階で「メーカーに依存する」とされている部分も多々あるので、基本的には同じような動作をするものの、細かい部分では挙動が違う関数もいくつかある。

 また、さらには、各機種毎にメーカーに依存した機種依存ライブラリというものも存在する。まだこの辺の仕様についてはドコモからも公表されていないので、どのようなファンクションがこれにあるのか(電話機のバイブレーション機能などがこれにあたるらしいが)、また、使用方法などもわからないので今のところ問題は出ていないが、もしプログラムでこれを使用すると、ほかの機種ではその機能が働かない、あるいはほかの機種では動かないプログラムになる可能性もある。

 なお、503iシリーズのJava周りの仕様はNTTドコモのWebサイトで「All about i-mode」として公開されている。ここでは、詳細な開発ガイドとAPIリファレンスのpdfファイルがダウンロードでき、 FAQ も用意されているので、プログラミングをするのであれば一度は目を通しておいたほうがいいだろう。

開発ガイドはNTTドコモのサイトからPDFファイルの形で配布されている


■ プログラムから見たiモードの特徴

 iモード携帯電話の特徴は、携帯電話なのでいつでもネットワークに接続できること。それと、ストレージとして「スクラッチパッドメモリー」というものがあることだ。

 iモード携帯電話は非常に小さな機械なので実行できるプログラムにはいくつか制約がある。その1つはプログラムの大きさがJARファイル(実行ファイルとリソースを圧縮プログラムで固めたもの)にして10KB以下に制限されていることだ。

 この10KBでプログラムも音楽データも、画像データもとなるとかなりつらい。
 しかし、画像や音楽データなどはインターネットから読むこともできるので、(時間ととパケット代さえ気にしなければ)サーバーから読み出すことでこのメモリ容量の少なさをある程度まで克服できる。

 スクラッチパッドメモリーは、永続的にデータを記録するための記憶モデル(メモリー)で、早い話が携帯電話内のデータストレージだと思えばいい。当然リソースデータなども格納できるので、ネットワークからダウンロードしてきたデータのキャッシュとして使うこともできるわけだ。

 また、携帯電話の場合、常に回線に接続が可能といいながらも、移動中などの場合に、回線が途切れることもありうる。そのため、オフライン時(電波の届かない状況など)のデータ格納などの用途に使うことが推奨されている。

 このスクラッチパッドは5KBまで確保できることになっている。ただ、機種によってはそれ以上確保できる場合もあるようだ。

 なお、セキュリティ上の理由で、iアプリからは、そのアプリをダウンロードした以外のサーバーにはアクセスすることはできないようになっている。また、プロトコルとしても、サポートされているのはHTTP、HTTPSのみだ。

 携帯電話のビデオ、音源周りもJavaプログラムから、当然、アクセスできる。
 これらをハンドリングする関数は基本的には全てiモードクラスライブラリに含まれている。画面周りなどは、ボタンやリストボックスなどのパーツごとに管理できる高級ライブラリ、自分で描画からキーイベントの監視まで行なう低級ライブラリの両方が用意されている。なお、低級ライブラリでも、画面解像度や音源の種類、音色の数などはこれも機種に依存するので、固定の画面ピクセル数などを前提のプログラムは作るべきではないだろう。

 なお、iアプリではスレッドの作成はできるが、別のiアプリケーションは起動できない。携帯電話上で走るiアプリは同時には1つまで、という制約がある。残念ながらマルチタスク動作はモードではできない。


□参考URL
・NTTドコモ(Javaコンテンツ解説)
http://www.nttdocomo.co.jp/mc-user/i/java/index.html

(2001年2月21日)

[Text by 大和哲]


【PC Watchホームページ】


ウォッチ編集部内PC Watch担当 pc-watch-info@impress.co.jp

Copyright (c) 2001 impress corporation All rights reserved.