補足1 J2ME を理解しよう!

そもそも Java言語 って?

Java言語 は Sun が開発したオブジェクト指向のシンプルな言語。 文法は C/C++ に似ていますが、ポインタや多重継承などの複雑な要素を省くことで、 理解しやすく間違えにくい開発環境を実現しています。

Java のソースコード (.java) は、Javaコンパイラによって Javaコード (.class) に変換されます。 C/C++ のように、対象機器用のマシンコード (ネイティブ・コード) に変換される訳ではありません。 これが Java の大きなポイントです。

生成されたコードは、JVM (Java Virtual Machine) という仮想的なコンピュータ上で実行されます。 なので作成されたソフトウェアは JVM の用意された全ての環境で実行することができます。 同じ実行ファイルが、Windows、Linux、Mac OS 等でそのまま使えるので便利です。 Sun はこれを 'Write once, Run Anywhere' と表現しています。

Palm OS 用には JVM ではなく、簡易的な実行環境 KVM が用意されています。 機能 (API) が JVM に比べ限定されてはいますが、 対応範囲内であれば JVM と同じコードを使用できます。

Write once, Run Anywhere

実行環境 と 開発環境

Java 環境 と言った場合、目的に応じて2種類の配布形態があります。

  • 実行環境 JRE (Java Runtime Environment)
  • 開発環境 JDK (Java Development Kit)
JRE は Java ソフトウェアを実行するのに最低限必要なファイルが入っています。 JDK は JRE に加えて、開発に必要なツールが入っています。 この講座を読んでいる人に必要なのはむろん、JDK のほうですね。

ちなみに Palm OS 向けで JRE に相当するのは MIDP for Palm で、 JDK に相当するのは J2ME Wireless Toolkit になります。

J2ME って?

Java環境は、目的とする範囲によって3種類の規格にわかれています。

  • 大規模向け J2EE (Java2 Platform, Enterprise Edition)
  • 一般向け J2SE (Java2 Platform, Standard Edition)
  • 携帯/組み込み J2ME (Java2 Platform, Micro Edition)

J2SE を基本として、それに大規模アプリケーション開発に必要な規格を加えたものが J2EE です。 逆に J2SE の機能を制限して、小型の機器でも使用できるようにしたのが J2ME になります。 具体的には、

  • 浮動小数点計算
  • ファイナライゼーション (オブジェクト削除時の関数呼び出し)
  • リフレクション (クラスに対する実行時参照)
  • スレッドグループ (並列処理)
が使用できません。 また java.lang、java.util、java.io のライブラリは主要な機能以外は削られ、 それ以外のライブラリは含まれません。 J2SE のプログラム経験がある人は、これを聞いてちょっと眩暈がするかもしれませんね。 (笑

J2ME Environments

J2ME って規格は、1つではない - コンフィギュレーション

さて携帯向けといっても、その対象範囲は広い。 モバイル PC、PDA、携帯電話、カード等、それぞれに異なった制限があります。 例えば、PDA に必要な全ての機能は、小さなカードには実装できない。

実は J2ME というのは規格の総称であり、その制限に応じて複数の規格が存在しています。 それが 'コンフィギュレーション (Configuration)' と呼ばれるもの。 J2ME の対象を目的別に分類しておいて、その分類ごとに必要な機能を定義するという感じになります。

現時点では

  • CLDC (Connected Limited Device Configuration)
  • CDC (Connected Device Configuration)
という2つのコンフィギュレーションが策定されています。

Palm 機 が属するのは CLDC のほう。 CLDC を直訳すると「接続された限定されたデバイス」かな? PDA、携帯電話、業務用小型端末などが含まれるようです。

Connected がポイントで、ネットワーク関係のライブラリが主に残されている気がします。 今の Palm 環境だと、ちょっと使い道は限られる気がしますが。 最近になって Bluetooth が盛り上がってきてるので、うまく利用できると良いですね。

J2ME Configurations

独自機能もサポートしなきゃ - プロファイル

java, J2ME、CLDC プロファイルまで説明してきました。 でも、何か足りないものがないでしょうか? "J2ME Configurations" の図を、よーっく眺めてみてください。

全部の機能が、J2SE の箱の内側にありませんか? これは J2ME 規格が、J2SE の完全なサブセットであることを示しています。 これは正しいのでしょうか? J2SE に携帯や PDA に必要な全ての機能が含まれているのでしょうか?

答えはノーです。 J2SE は、携帯機器に特有の機能をサポートすることができません。 例えばバイブレータを振動させたり、スタイラスでの入力を感知したり、 小さな液晶画面を制御することができません。

なのでこれらの独自機能をサポートするため、規格を追加しなくてはなりません。 それが 'プロファイル (Profile)' と呼ばれるもの。

Palm が属するのは MIDP (Mobile Information Device Profile) というプロファイルになります。 対象は 'mobile phones and entry level PDAs' だそうで、 これの日本語訳は 「携帯電話と禅の思想を体現したPDA」 となります。 (ぉぃ

つまり Palm 機用の Java (J2ME) 環境というのは、 最低限の機能を定めた CLDC というコンフィギュレーションに、 MIDP というプロファイルを追加したものです。 下の図を眺めて、確認してみてください。 プロファイルが J2SE の箱の外側にあるのがポイントです。

J2ME Profiles

余談になりますが、左側の J-Phone や au の携帯電話の部分をみてください。 MIDP プロファイルでは全ての機能をカバーできず、更に規格を追加しています。 例えば J-Phone ではゲームに有効なスプライト機能や、3D ポリゴン機能が追加されているようです。

実は Palm機 も同様で、全ての機能が MIDP プロファイルに含まれているわけではありません。 例えば Java プログラムから、内部のデータベースにアクセスできないようです。 つまり標準ソフトの予定表に、予定を追加するような機能が実現できません。 そういった部分を補完する追加ライブラリの提供を、Palm 社には期待したいですね。

更に余談を続けます。 SHARP のザウルスが使用している Java は以前 PersonalJava と呼ばれていた規格です。 これは現在、 CDC (Connected Device Configuration) コンフィギュレーション の Personal プロファイル として策定中とか。 CLDC MIDP より J2SE に近いので、使える機能は比較的多そうですね。

説明は以上です!

さてさて、長い説明を読んでいただいてありがとうございます。 実はこの補足で強調したいことは 『J2ME で書いたプログラムはいろんなトコで使えるよ♪』 ってコトだったりします。

MIDPプロファイルの機能だけは J2ME 独自のものですが、 それ以外の部分は普通の J2SE でも、企業向けの J2EE でもそのまま流用できます。 講座の中でも、機会があればこのあたりを試せるといいなと思っています。

楽しみましょう! (^-^)/


Copyright (c) 2002 Toshio Yamashita
first version 2002/07/07