ケータイJavaのいろは 第一回 「iアプリ」の開発から公開まで


IDGジャパン JavaWorld 2001年6月号 に掲載された記事の原文を公開します。 編集の手がかなり加えられて掲載されたため、 雑誌に掲載されたものとは異なる部分があります (無断転載禁止)。

はじめに / 携帯電話で動く Java / 各社の動向 / i アプリをはじめよう / おわりに / 戻る / トップページ


はじめに

2001/1/26 に NTT ドコモから i アプリ対応の携帯電話が発売され、 ついに実際の携帯電話で Java アプリケーションが動作するようになりました。 携帯電話で動作する Java アプリケーションはその仕様に基づけば誰でも、 また小規模であることからアイディア一つで市販のコンテンツに 負けないものが作れる可能性を秘めています。
 
この連載では Java 入門者に向けて、 一から携帯電話の Java プログラミングに取り組むための方法を 解説していきたいと思います。 i アプリ対応携帯電話が発売されたことから今後しばらくは i アプリについて解説していきたいと思っています。
 
今回は国内の携帯電話で動く Java、特に i アプリの現在の動向と、 その開発方法について説明していきたいと思います。

携帯電話で動く Java

携帯電話で動く Java とは ?

携帯電話にはメモリの全体量が少ない、 消費電力が限られているなどの制限があり、 パソコンほどの性能は持ち合わせていません。 しかしこれは逆にいえば、i アプリが非常にコンパクトであることを意味し、 開発がしやすいともいえます。
 
携帯電話で動く Java は Java 2 Platform Micro Edition CLDC に分類されます。
 
Java2 Platform にはその使用目的に応じた規模の API セットがあり、 エディション (Edition) と呼ばれます。 エディションには標準的な Standard Edition、 サーバー用途の Enterprise Edition、 そして組み込み機器用の Micro Edition があります。 携帯電話で動作する Java2 は Micro Edition に含まれます。
 
Java2 Micro Edition にはさらに JavaVM の使い分けによって コンフィグレーション (Configuration) と呼ばれる分類がされます。 カーナビなどの比較的裕福な機能を有した機器に組み込む Connected Device Configuration (CDC)、 そして携帯電話などの機能制限された機器に組み込む Connected, Limited Device Configuration (CLDC) があります。
 
エディションとコンフィグレーションによってクラス構成 (Standard Edition のどれだけをサブセット化するか) が決定されます。 また、CLDC では KVM (Kirobyte Virtual Machine, 100KB 程度のメモリで動作する組みこみ機器用の実行環境) を使います。 KVM を使用することから、浮動小数点 (float, double 型)・ スレッドグループ・ファイナライズが使えませんので、注意しましょう。 当然、API のクラスにも float, double 型を扱うメソッド (Math.sin(double a) など) はありません。
 

プロファイル

 
CLDC はさらに用途ごとに特殊な API が追加されます。 プロファイル (Profile) と呼び、 携帯電話向けでは Mobile Information Device Profile (MIDP) と i モード対応 Java プロファイルがあります (図1)。
 
MIDP は Sun Microsystems を中心として各国の名立たる 電話会社によって話し合い、規定された携帯電話向けの公式な Profile です。 au (KDDI), J-Phone, DDI Pocket で採用される予定です。
 
i モード対応 Java プロファイルは NTT ドコモの i アプリのプロファイルです。 i モード対応 Java プロファイルに基づいて作成されたアプリケーションを i アプリと呼びます。 i モード対応 Java プロファイルは当初 i アプリ対応携帯電話のリリース時期に MIDP 正式版の規定が間に合いそうになかったため、 NTT ドコモによって独自のプロファイルが規定されることとなりました。
 
(図1 Java 2 Platform の分類)
Java 2 Platform
┣Enterprise Edition
┣Standard Edition
┗Enterprise Edition
┣Connected Device Configuration (CDC)
┗Connected, Limited Device Configuration (CLDC)
┣Mobile Information Device Profile (MIDP)
┗i モード対応 Java プロファイル

各社の動向

携帯電話で動く Java について、国内の電話会社の動向をみてみましょう。
 

NTT ドコモ

 
NTT ドコモは既に i アプリ対応の携帯電話を発売しており、 P503i, F503i, N503i, SO503i, D503i と一通りの機種が出揃っています。 i アプリ関連のサービスも本格的にスタートし、 携帯電話にダウンロードして実行することができます。 また、仕様も一般に公開されており、個人でも i アプリの開発・公開が可能です。
 
i アプリでは i-mode と同様に GIF ファイルと i メロディファイルが使えます。 他に、i アプリを一定時間間隔ごとに定期的に自動起動する エージェントモードをサポートする、 画像や文字列などのデータを永続的に保存するスクラッチパッドと 呼ばれる領域が用意されている、SSL によるセキュリティーが組み込めるなど、 特徴的な機能が幾つかあります。
 
また、ダウンロードにかかるパケット代と時間、携帯電話のメモリ容量に 対する配慮からファイルサイズは jar 圧縮で最大 10KB までとの制限があります。 このため、常にプログラムのサイズには気を使う必要があります。 スクラッチパッドにも 1 つの i アプリについて最高 5KB までの制限があります。 セキュリティーへの配慮として携帯のアドレス帳などの情報には アクセスできない、ネットワーク接続はアプレットのように ダウンロード元のサイトに対してのみ可能、 ある i アプリから他の i アプリは起動できない、 といった制限もかけられています。
 

J-Phone

 
J-Phone の Java 対応携帯電話のリリース時期は 2001 年 6 月頃です。 MIDP に準拠していますが、JSCL (J-PHONE Specific Class Libraries) と呼ばれる強力な拡張 API を持ち、30KB のプログラムの実行が可能です。
 
JSCL では 2D のスプライト処理、3D エンジンの使用、固定小数点演算、 電話やメール機能との連携 (着信イベントの取得)、位置情報の取得、 JPEG・SMAF・SMD 形式のサポートなどが可能です。 しかし、その分セキュリティーを考慮して当面は 公式コンテンツでのみ提供可能にするため、 残念なことにしばらくは個人でのアプリケーション開発は出来ないようです。
 

au

 
au (KDDI) の Java 対応携帯電話のリリース時期は 2001 年度夏頃で、 こちらも MIDP に準拠し、独自拡張 API が追加される予定です。 au は携帯電話で動作するアプリケーション環境として、 Java ではなく C/C++ による実行環境 BREW を中心に据えるようです。 いずれ Java アプリケーションは BREW 環境に乗った JavaVM 上で動作するようになります。

i アプリをはじめよう

これからすでに実機も存在し、仕様も公開されている i アプリでのプログラミングを始めようと思います。
 
まずは画面に「こんにちは」と表示するだけの簡単なプログラムを使って、 コンパイルから実行までの流れを説明します。 プログラムの書き方については次回以降順次取り上げていこうと思っています。
 
   
(図2 iアプリの実行例)
 

マニュアル

 
まずは、マニュアルをダウンロードしましょう。
 
公式なマニュアルは NTT ドコモのホームページ (http://www.nttdocomo.co.jp/i/java.html) から 仕様書「i モード対応 Java コンテンツ開発ガイド (詳細編)」と API マニュアル「i モード対応 Java コンテンツ開発ガイド (API リファレンス編)」 がダウンロードできます。いずれも pdf 形式になっています。
 
この API マニュアルには CLDC のクラスに関する説明は省かれていますので、 CLDC のホームページ (http://java.sun.com/products/cldc/) から CLDC の API マニュアルもダウンロードしましょう。 このホームページは英語ですが、 日本語の CLDC の API マニュアルが用意されています。 「Japanese documentation for the J2ME CLDC」と書かれた部分から ダウンロードできます。
 
また、非公式ないわゆる JavaDoc 形式の API マニュアル (html 形式) が Overflow! さかきけいのページ (http://member.nifty.ne.jp/vioret/) で公開されており、これも併せて参照されると良いかと思います。
 

インストール

 
i アプリの開発には Java2 SDK Standard Edition 1.3 と J2ME Wireless SDK for the DoJa が必要で、 この順にインストールしていきます。
 

Java2 SDK Standard Edition

 
i モード対応 Java プロファイルは Java 2 Platform Micro Edition に分類はされますが、Java 2 Platform Micro Edition の SDK があるわけではなく、 開発には Java2 SDK Standard Edition を使用します。
 
Java2 SDK Standard Edition 1.3 は Sun Microsystems のホームページ (http://java.sun.com/j2se/1.3/ja/) からダウンロードできます。 本誌にも収録されていますので、 まずはインストーラの指示に従ってインストールしてください。
 

J2ME Wireless SDK for the DoJa

 
J2ME Wireless SDK for the DoJa は NTT ドコモから公開されている Windows 環境向け (Windows98SE のみ正式対応、Windows2000 などでも動作しますが、サポート対象外です) の公式ツールです。 NTT ドコモのホームページ (http://www.nttdocomo.co.jp/i/java.html) からダウンロードできます。 名前とメールアドレスを記入することで無償で入手できます。 最新バージョン (脚注:本誌執筆時の最新バージョンは release 2.2 です) をダウンロードし、インストーラの指示に従ってインストールしてください。
 
J2ME Wireless SDK for the DoJa は Java 総合開発環境 Forte に組み込むことも出来ますが、今回は単体で使用します。 J2ME Wireless SDK for the DoJa には 携帯電話エミュレーターやユーティリティー、 シンプルな開発環境などが含まれています。
 
(図3 J2ME Wireless SDK)
 

[コラム] エミュレーター

 
他にも非公式なエミュレーターとして ZENTEK 社から i-JADE Lite が無償提供されています。 i-JADE Lite は ZENTEK 社のホームページ (http://www.zentek.com/i-JADE/ja/index.html) からダウンロードできます。 i アプリは携帯電話のメーカーによってその挙動が若干異なるため、 エミュレーターは各機種用に用意されています。
 
また、他にも個人の方が実装したエミュレーターとして iEmulator (http://uni.himitsukichi.com/iap/index.html) や i503Engine (http://i503.sourceforge.net/) があります。
 

開発の流れ

 
i アプリの実際の開発方法について説明します。
 
コマンドラインからコンパイル・実行も出来ますが、 ここでは J2ME Wireless SDK に含まれている KToolbar を使った作業方法を説明します。 KToolbar はシンプルな GUI ベースの開発環境で、 スタートメニューから KToolbar を選んで起動します。
 
開発の流れはコーディング、アプリケーション属性設定、ビルド、 エミュレーターを使用しての実行テスト、実機での実行テスト、 そして完成となります。
 

コーディング

 
まず、「新規」のボタンを押してプロジェクト名を入力し、 プロジェクトを作成します。プロジェクトを作成すると J2ME Wireless SDK をインストールしたフォルダの下の apps フォルダの下にプロジェクト名と同じ名前のフォルダが出来ています。 そのフォルダの下には bin, res, src の 3 つのフォルダがあります。 なお、以前作成したプロジェクトは「開く」ボタンで読み込めます。
 
プログラムのソースファイルは src フォルダの下に、リソース (画像ファイルなど) は res フォルダの下に作ります。 お好きなテキストエディタでプログラムを書いてください。 プログラムの書き方については次回以降に解説していきますので、 今回は リスト 1 を入力して下さい。 これは画面に「こんにちわ」と表示するだけの簡単な i アプリです (図4)。 もちろん、「こんにちわ」をお好きな言葉にしてもかまいません。 Hello.java で保存します。
 
(図4 Hello.java 実行結果)
 

アプリケーション属性設定

 
プログラムを書いたら「アプリケーション属性設定」ボタンを押して ADF (アプリケーション・ディスクリプタ・ファイル) の設定をします。 ADF とは i アプリの置いてある URL やサイズを記述した テキストファイルです。 拡張子を .jam とすることから jam ファイルと呼ぶこともあります。 携帯電話は ADF の情報からダウンロードする i アプリの情報を取得します。
 
ADF は「キー = 属性値」の形で書かれ、必須のキーは以下の 5 つです。
 
AppName
携帯電話で一覧表示させたときに出る名前、 16バイトまでで、漢字も使えます。
PackageURL
JAR ファイルの URL を指定します。
AppSize
JAR ファイルのサイズをバイト数で正確に指定します。 間違っているとダウンロードできません。 i アプリは 10KB 以下との制限があるため、 この値は 10240 以下になります。
AppClass
i アプリの起動に使うメインクラスの名前です。
LastModified
i アプリの最終更新日です。
 
KToolbar がある程度は自動生成してくれます。 プログラマーが最低限設定する必要がある属性は AppClass キーで、 今回は「Hello」としてください。 また、AppName キーはなくてもエミュレーターでの実行できてしまいますが、 本来は必須で実機での動作には必要なので、 この段階で忘れずに設定しておきましょう。
 
また、これら以外にも追加できるキーがありますが、 それらについては必要となったときに随時説明していきます。
 

ビルド

 
ビルドを行うには「ビルド」ボタンを押すだけで済みます。 エラーがあれば下に表示されますので、 ソースファイルを修正して再度「ビルド」ボタンを押します。
 
ビルドは実際にはコンパイル、事前検証、JAR 圧縮、 ADF の作成の順に行われますが、KToolbar はこれらを一括して 実行してくれます。 しかし、i アプリの構成を理解するためにこれらの処理内容に ついて解説しておきます。
 
まずは事前検証ですが、CLDC のプログラムではコンパイルの後に 事前検証を行う必要があります。検証とは間違った・悪意のある バイトコード (class ファイル) をチェックすることで、 Java の安全性を高めるための機構です。 通常の JavaVM では検証はプログラムの実行時に自動的に 行われていますが、処理能力が限られている KVM では その処理もかなりの負担となってしまいます。 そこで、事前に検証を行って class ファイルに検証済みとの 情報を書き込むのです。
 
コンパイルと事前検証が行われた class ファイルと関連する リソース (画像などのファイル) は実行するためには JAR 形式で一つにまとめる必要があります。
 
ADF の作成は「アプリケーション属性設定」で設定した内容に 基づいて KToolbar が作成してくれます。
 

エミュレーター上の実行テスト

 
デバッグの手間を考えて、普段はエミュレーター上で実行・テストを行い、 しっかりと動くことが確認できた上で実機でテストするとよいでしょう。
 
「実行」ボタンを押せばエミュレーターが起動し、 作成したアプリケーションが読み込まれて実行されます。
 
エミュレーターとして白黒とカラーの携帯電話が用意されており、 「デバイス」で切り替えが可能です。 標準では白黒の携帯電話が設定されていますが、 実機は全てカラーのためカラーに変更しておきましょう。 ここでの変更は一時的な変更となります。 常に特定のデバイスを使用したい場合は、 「編集」メニューの「設定」からデバイス指定を変更しておきましょう。
 
エラーが出たときにはその旨が表示されます。
 

実機上の実行テスト

 
最後に実際の携帯電話でダウンロードして動作チェックをしてみましょう。 機種によって表示のされ方などの挙動が違い、 エミュレーターでは完全にエミュレーションできるわけではありませんので、 最後には実際の携帯電話でのチェックが必要です。
 
プロジェクトのフォルダの下の bin フォルダに出来ている JAR ファイルと ADF を WEB サーバー上に置き、 HTML にダウンロード用のタグを記述すれば WEB 上で公開して実際の携帯電話でダウンロードすることができます。 サーバー側に特別な設定は必要ありません。
 
リスト 2 のように OBJECT タグの ID 属性で ADF の ID を、 DATA 属性で ADF のアドレスを指定し、 A タグの IJAM 属性でその ID を指すようにします。 携帯電話でこのリンクをクリックするとダウンロード出来ます。 i アプリ未対応の携帯電話では A タグの HREF 属性 (必須) で示されたページに飛びます (http://www.nttdocomo.co.jp/i/tag.html)。
(リスト2 ダウンロード用 HTML ファイル)
	<OBJECT DECLARE ID="hello" DATA="http://cgi14.plala.or.jp/antun/hello.jam"
	 TYPE="application/x-jam"></OBJECT>
	
	<A IJAM="#hello" HREF="old-phone.html">ここ</A>
実機ではエラーチェックが厳しく、記述が少しでも間違っていると 実行できませんので、ご注意ください。
 
動作チェックも終わり、完成したら ギガアプリ (http://g-appli.net/) や アプリ★ゲット (http://appget.com/pc/) などの検索サイトに登録して多くの人に実行してもらいましょう。

おわりに

今回は携帯向け Java の概要・i アプリの開発方法を説明しました。 次回からは i アプリの具体的なプログラムの書き方について 説明していこうと思います。

戻る