携帯 Java 入門
携帯 Java とは
BREW と対比される携帯 Java ですが、BREWよりも
Java の略歴
- GreenProject と呼ばれるプロジェクトで Oak を 1991 年 4 月に開発開始
- Oak をインターネット言語 Java として開発することに 1994 年春に決定
- Oak をベースにしたブラウザ WebRunner を 1994 年に制作
- Java 開発キット JDK の α 版のソースコードが 1995 年 3 月からダウンロード開始
- サンフランシスコの開発者向けカンファレンス、サン・ワールドで 1995 年 5 月に公式技術発表
- Netscape 社と 1995 年 9 月にライセンス契約、同月に Netscape Navigator 2.0 が Java をサポート
- 携帯機器向け Java 実行環境 J2ME を 1999 年 6月に発表
- 世界初 Java 搭載携帯電話が 2000 年韓国 LG から発売
- NTT DoCoMo が 2001 年 1 月に日本初 Java 搭載の携帯電話 503i シリーズが発売
- vodafone(当時 J フォン) は 2001 年 6 月に会社最初の Java 対応携帯電話 J-SH07 を発売
Java は Blu-ray Disc、NASAの火星探査車、デジタル放送、携帯など多くの分野に使われています。
ここまで普及した要因として次のことがあげられます。
状況
- JDK の無料配布
- ブラウザへの組み込み、インターネットの急激な普及
言語自体
- C 言語に類似した構造
- C++ に比べ簡単で、しかもポインタがなくなっているなど安全性の高い言語設計
- コードの再利用が可能
- オブジェクト指向
では、携帯 Java が採用された理由はなんでしょうか。次のことがあげられます。
- アプリがダウンロード可能
- 互換性が良い事
- 高い安全性
Java と同様言語自体が優れている点。
目次
- 携帯 Java の歴史
- 携帯 Java が可能にする世界とは?〜高性能機器への変身〜
- 携帯 Java が選ばれる理由
- 様々な Java 実行環境〜NTT DoCoMo の Java はそのまま vodafone で使えない〜
- 携帯 Java J2ME で注意すべき仕様とは
- 知らなかったでは済まされないアプリのサイズ制限
携帯 Java の歴史の原点、組み込み系言語 Oak からの道のり
Java の歴史は Oak と呼ばれるプログラミング言語まで遡れます。特定のアーキテクチャに依存しない言語を必要としたゴスリングは セットトップボックスなどの家庭用機器を制御するための組み込み用の言語として Oak を設計します。
GreenProject の一環として行われたのですが、プロジェクト自体はビジネス的な問題で挫折することになります。
そのような中、「 Mosaic 」が 1993 年に現れます。このブラウザによりテキストや静止画像を閲覧できるようになります。これは当時の人々にとって衝撃的なものであり、インターネットは急速に普及しはじめました。
この普及に目をつけたゴスリングはインターネット言語 Java を作り、1995 年に公開します。
メモリ管理などシンプルで優れた言語設計をもった C に似た言語でした。そうして、人々に Java が浸透してゆきます。
時間をおいて携帯機器向け Java 環境 J2ME が発表されました。1999 年のことです。このような組み込み系の Java には優れた点がありました。
昔はマシン語により制御されていた組み込み機器の内部の部品や本体が変更するとき、プログラムの修正が大変でした。Java であるとその修正が極力少なくてよいのです。
また、ハードができていなくても必要なライブラリを揃えるだけで、パソコン上でシミュレーションができるため、ハードとソフトを平行して作ることが可能になり、製品開発時間の短縮や製品自体の質の向上になります。
現在 J2ME は NTT DoCoMo や vodafone の携帯で採用されています。
携帯 Java が可能にする世界とは?〜高性能機器への変身〜
1987 年に携帯電話が初めて誕生しました。この頃はサイズも大きく通話しかできませんでした。2000 年にアナログ方式からデジタル方式に完全移行し、通話だけではなく インターネット やメールもできる時代へと移ってゆきます。
そして 2001 年に Java が携帯に導入されました。Java は携帯をただの意思伝達の道具ではなく、ゲームやカメラ、音楽プレイヤー、スケジュール管理などの機能を備える高性能な小型電子機器へと変身させました。
Java により変わったものを日常でよく使うメール、時計(アラーム)機能、ゲームを中心に見ていきましょう。
ゲーム
Java アプリが使えるようになった当時、アプリの大多数はゲームでした。今でも結構な割合を占めています。ファイナルファンタジー、ドラゴンクエストの移植などが頭に残っている人もいるのではないでしょうか。以下のような有名な作品が携帯でできるようになっています。
当初は通信機能を搭載したアプリが期待されていました。しかし、通信料金が高くなる傾向にあるアプリは定額サービスのない当時、ユーザーに歓迎されませんでした。そのため、通信機能を搭載したゲームは減少し、逆に旧作を再現するゲームが増えました。
パケット定額サービス、割引サービスが定着しつつある現在では、通信機能を使ったアプリの復活してきています。
メール
携帯電話で良く使う機能といえばメールです。携帯で標準搭載されているメール機能は Java によって実現しているわけではありません。Java は今までパソコンでやり取りしてきたメールを携帯電話上でも送受信できるようにしましたのです。
以下のツールはその一例です。
パソコンと同様の機能
旧来パソコンで行ってきた作業を携帯電話上でも可能にするアプリは他にもあります。例えば以下のようなものがあります。
jig ブラウザ
PC のサイトを閲覧することができます。
FutureIsNow2006
スケジュール管理を PC と同期して管理することができる
かるくゅセル
CSV 形式で入出力ができるため、PC の Excel と連携した使い方ができます。
ハードウェア固有のシステムを利用したもの
最初は Java はハードウェア固有のシステムは基本的に使えませんでしたが、バージョンアップを繰り返し使用できるようになってきました。最近ではおサイフケータイなど Felica を利用したものが続々でています。
モバイル Suica
改札で切符を買う手間をはぶけます。
KEY・ID
施錠をするのに鍵が必要なくなります。
TICKET
映画館のチケットを買わなくてすみます。
Felica の他にもハードウェア固有のシステムを利用したものはあります。
防犯ブザー
GPS と連携することで既存の防犯ブザーとは違い、所持者の位置情報を把握することができます。
歩数計
従来とは違い腰につけなくても歩数をはかり、GPS と連携することもできます。
iTunes との連携
iTunes が携帯でも使えるようになります。この iTunes は Java で作られています。
近未来ナビ
携帯で立体地図を表示できるため、詳細な位置の把握が可能になります。
ゲームなどの一般的なものからこのような特殊なものまで Java が使用されています。
一昔前、ケータイ不況という言葉が一時期はやりました。携帯への支出が増えたのはこれらの Java による機能拡張も一因であったことは想像に難くありません。
これまでの説明で Java が携帯の可能性であることがわかっていただけたでしょうか。
携帯 Java が選ばれる理由
BREWは Java に比べ軽量高速です。また、当初は Java で制限がかかるバイブレーションなどのハードウェア固有の機能の使用ができることが魅力の一つでもありました。
現在では携帯 Java でもバージョンアップによりそのような機能が使えるようになりました。
Java はガーベージ・コレクションの導入によりポインタを排除し、サンドボックスで利用範囲を限定、保護しています。そのため BREW で採用している C/C++ に比べ安全性が高くなっているのです。また、シンプルな構文のため、C/C++ よりも使いやすくなっています。
携帯 Java では BREW とは違い「余計な心配に縛られない自由な開発」ができるのです。
様々な Java 実行環境〜NTT DoCoMo の Java はそのまま vodafone で使えない〜
J2ME の二つの実行環境
J2ME とは携帯 Java 実行環境の事です。CLDC(Connected Limited Device Configuration)、CDC(Connected Device Configuration)の二つがそれにあたり、CDC はカーナビなどの大型端末向けで CLDC は携帯などの小型端末向けとなっています。
Java プログラム | プログラム | Java プログラム |
KVM+CLDC API | 実行環境 | ClassicVM+CDC API |
携帯などの小型端末 | ハード | カーナビなどの大型端末 |
CLDC(Connected Limited Device Configuration) という実行環境
NTT DoCoMo と vodafone の携帯 Java 環境は同じ CLDC で実現されていますが、携帯 Java アプリは別々に開発しなければなりません。ユーザーインターフェイスやクラスなどに関する情報を含むプロファイルが違うために実際の処理の様子も変わってくるからです。
NTT DoCoMo は DoJa、vodafone は MIDP というプロファイルを使っています。
DoJa 仕様の Java プログラム | プログラム | MIDP 仕様の Java プログラム |
DoJa | プロファイル | MIDP |
CLDC | 実行環境 | CLDC |
NTT DoCoMo の携帯 | ハード | vodafone の携帯 |
また、i アプリが全ての DoJa 搭載機体で同じように動くわけではありません。アプリのサイズ制限や API 仕様、ハード仕様が機種により異なるからです。
同じ事が vodafone にもいえます。
携帯 Java J2ME で注意すべき仕様とは
主に以下の三つが J2SE と違う点です。
- ユーザーインターフェースの制限
- 極端に少ないメモリ容量
- 細かな機能の削除
GUI(AWT と Swing)に関する機能は削除され、Canvas クラスなどが追加されています。他にも例えば以下の機能が削除されています。
スレッドグループの作成 | スレッドのグループ指定 |
JNI(Java Native Interface) | プラットフォームに依存するプログラムの呼び出し |
クラスローダ(ユーザー定義) | クラスを読み込んで使えるようにする |
知らなかったでは済まされないアプリのサイズ制限
プログラムのサイズ削減をする方法は次の二つに分けられます。
複雑な人がやるべき作業
- アルゴリズム最適化・即値の利用
- メソッド削除・インライン化
- フィールド削除・定数展開
長時間かかる機械的な作業
- クラス融合
- 名前の共有・短縮
具体的には IM を例にとってサイズ削減を行っているimprove の ダウンサイズをご参照ください。
サイズ制限に悩まされずに開発したい方は
圧縮ツールを使えば開発でサイズ制限を気にしなくてすみます。「アプリがサイズオーバーしているのに明日が納期」という場合にも効果を発揮します。
このような携帯 Java 圧縮ツールが有名です。
弊社の携帯 Java アプリの圧縮に特化した Sophia Compress Java もお使いいただけると幸いです。
無償トライアルをご用意してますのでよろしければ送付許可をください。
他社に差をつける開発〜オブジェクト指向の魔法を使うには〜
オブジェクト指向での開発は以下の恩恵をもたらします。
- グループ開発が容易になる。
- 既存のコードを修正、拡張、再利用が容易く作業が楽になる。
結果効率があがり、「納期に余裕を持った開発をする」ことができるために会社の信頼度も上がります。
しかし、アプリをオブジェクト指向で開発をすることはまずありません。アプリサイズが大きくなり、サイズ制限の壁にぶつかりがちだからです。
Sophia Compress Java はクラス融合によりこれを解決し、オブジェクト指向での開発を可能にします。他社に差をつけてみませんか。
サイズ制限
以下に主な携帯の Jar サイズ制限、ヒープ領域制限をまとめました。海外携帯端末や古い機種の情報をご入用の方は主要な キャリア 、企業についてまとめたこちらの携帯端末情報もご利用ください。
DoJa Version | 機種 | Jar size(KB) | Scratch Pad(KB) | Heap size(KB) |
4.3LE | N702iD | 30 | 200 | 8192 |
4.2LE | F702iD | 100 | 400 | 4500/3500 |
N701iECO | 30 | 200 | 8192 | |
4.1LE | F700iS | 30 | 200 | 3000/5000 |
N701i | 30 | 200 | 8192 | |
4.1 | SO902i | 100 | 400 | 4096/4096 |
F902i | 100 | 400 | 4500/3500 | |
N902i | 100 | 400 | 9216 | |
4.0LE | F700i | 30 | 200 | 3000/5000 |
N700i | 30 | 200 | 4000 | |
4 | F901iC | 100 | 400 | 3000/5000 |
F901iS | 100 | 400 | 3000/5000 | |
N901iC | 100 | 400 | 8192 | |
N901iS | 100 | 400 | 9216 | |
3.5 | F900i | 100 | 400 | 2048/3584 |
F900iC | 100 | 400 | 2048/3584 | |
F900iT | 100 | 400 | 2048/3584 | |
N900i | 100 | 400 | 3000/4700 | |
N900iG | 100 | 400 | 3000/4700 | |
N900iL | 100 | 400 | 8192 | |
N900iS | 100 | 400 | 3000/4700 | |
3 | SO505i | 30 | 200 | 1800 |
SO505iS | 30 | 200 | 2048 | |
SO506i | 30 | 200 | 3072 | |
SO506iC | 30 | 200 | 3072 | |
SO506iS | 30 | 200 | 3072 | |
F505i | 30 | 200 | 2000/1500 | |
F505iGPS | 30 | 200 | 2000/1500 | |
F506i | 30 | 200 | 2048/2048 | |
N505i | 30 | 200 | 1494/1472 | |
N505iS | 30 | 200 | 1494/1472 | |
N506i | 30 | 200 | 1533/1511 | |
N506iS | 30 | 200 | 1533/1511 | |
N506iSII | 30 | 200 | 1533/1511 | |
2.1 | FOMA N2051 | 30 | 200 | 760/1228 |
FOMA N2102V | 30 | 200 | 760/1488 | |
FOMA N2701 | 30 | 200 | 760/1228 | |
FOMA F2051 | 30 | 200 | 600/700 | |
FOMA F2102V | 30 | 200 | 1536/1024 | |
2 | SO504i | 30 | 100 | 1000 |
N504i | 30 | 100 | 544/600 | |
N504iS | 30 | 100 | 544/1030 | |
1.5OE | NM850iG | 30 | 100 | 555/455 |
1 | FOMA N2002 | 30 | 10 | 560/940 |
MIDP Version | 機種 | Jar size(KB) | RecordStore size(KB) | Heap size(KB) |
2 | 802SH | 1024 | 512 | 2000 |
804SH | 1024 | 512 | 4000 | |
903SH | 1024 | 512 | 4000 | |
703SHf | 1024 | 512 | 4000 | |
803T | 1024 | 512 | 2000 | |
902T | 1024 | 512 | 2000 | |
903T | 1024 | 512 | 2000 | |
904T | 1024 | 512 | 4000 | |
702NK | 1024 | 512 | 異なる | |
702NKU | 1024 | 512 | 異なる | |
1 | J-SH010 | 50 | 50 | 649 |
J-SH07 | 50 | 50 | 194 | |
J-SH08 | 50 | 50 | 649 | |
J-SH09 | 50 | 50 | 649 | |
J-SH51 | 80 | 50 | 422 | |
J-SH52 | 80 | 50 | 794 | |
J-SH53 | 200 | 200 | 1229 | |
V301SH | 50 | 50 | 649 | |
V302SH | 50 | 50 | 512 | |
V401SH | 50 | 50 | 649 | |
V402SH | 50 | 50 | 650 | |
V403SH | 50 | 50 | 512 | |
V501SH | 200 | 200 | 1500 | |
V601SH | 200 | 200 | 1229 | |
V602SH | 200 | 200 | 1500 | |
V603SH | 200 | 200 | 1500 | |
V604SH | 200 | 200 | 1500 | |
V801SH | 80 | 50 | 880 | |
V401T | 50 | 50 | 384 | |
V501T | 200 | 200 | 1500 | |
V502T | 200 | 200 | 1500 | |
V601T | 200 | 200 | 1500 | |
V602T | 200 | 200 | 1500 | |
V603T | 200 | 200 | 1500 |