Java ルーキーでも大丈夫!

勝手に作ろう!
第 i アプリプログラミングの基本

1 回

木寺祥友 + 株式会社エル・カミノ・リアル
www.ecreal.co.jp

J a v a で広がる
ケータイワールド
今年 1 月、NTT ドコモからJava アプリケ

らダウンロードもできるので、ぜひとも試してーション「i アプリ」に対応した503i が発売もらいたい。また、CD-ROMにはサン・マイされた。このi アプリは今までのようなテキス

クロシステムズの提供しているJava 2 SDKがトや画像のブラウジングだけでなく、アプリ納められているので、Doja とともにインスト

ケーションならではのこと、たとえば音楽をールすればソースを書き直すこともできる。こ鳴らす、画像を操作する、文字を操作する、れらのツールの使い方に関しては第４回に解といったことができる。これによりゲームやス説するが、すぐに試したい人はチャレンジしケジュール帳など、C-HTML ではできなかってもらいたい。

た、多くの表現ができるようになったのだ。

なお、i アプリは機種依存性が高いのだが、しかも、このiアプリは一般ユーザーでもパ

この連載では全機種対応版としてのi アプリ

ソコン1 台あれば手軽に作成できる。しかもの作り方もそのつど解説していく。どの機種作成に必要なツールはサン・マイクロシステを持っていてもちゃんと動かせるので安心しムズとNTTドコモが提供しているので、新たてもらいたい。にソフトを買い足す必要もない。特にNTTド

www.nttdocomo.co.jp/i/java/tool.html

コモが提供しているDoJa

intranet.impress.co.jp/iappli/という開発ツールには、パソコン上で携帯電話をエミュレートする機能が付いているので、どのような動きをするのかが、携帯電話を使わなくてもこ の よ う な 表 現 も 自 由 自 在確かめられるのだ。ここまで環境がそろってきたのだから、これを機会にiアプリの作り方を覚えてみよう！というわけで、今回から6回に分けて、iアプリの基本構造からどのようにすれば503i上で動かせるのかまでを、「MyIntro」というiアプリを例に解説する。MyIntroは自己紹介を楽しく演出するもので、音を鳴らす、画像を操作する、文字を操作するといったマルチメディア機能を使っているので、これをとおしてさまざまな表現方法を学べるはずだ。イ

文字をタイプライターのように打ち出す画面。アプリケーショ
ンならではの表現の1つだ。このようなテキストの表現は次号で解説する。

サーバーからデータを取ってきて表示している。i アプリをダウンロードしたあとでも、データだけ自動的に更新させるといったことができる。

ンターネットマガジンのウェブサイト

か220 INTERNET magazine 2001/7

インターネットマガジン／株式会社インプレスR&D

C-HTML ：コンパクトHTML の略称。携帯電話やPDA などの携帯情報端末向けのコンテンツ記述言語。HTML のサブセットとして定義され、HTMLと下位互換性がある。NTT
ドコモの「iモード」などで利用されている。
©1994-2007
Impress R&D

オープニング画面。音楽が流れ、幕が開き写真が出てくる仕掛けだ。画像の操作に関しては9 月号、音楽に関しては10月号で解説するので、少し待って欲しい。

i アプリを車にたとえてみると・・・
iアプリを作るということは、Javaという言■車にたとえた i アプリの構造語を使ってプログラムを記述するということ車=アプリケーションだ。Javaの場合、プログラミングといっても命令を羅列していくのではなく、部品を組み合わせていくイメージに近い。ここではiアプ
リのプログラミングとはいったいどのような作部品の実体化 =インターフェイス

カーステレオエンジン

ライト・CDを聞く・ラジオを聞く

・動力となる・光を出す業なのかをイメージし、そしてこれからの解説で出てくる単語がどのような意味を持っているのかを理解できるように、車をたとえに各部品の設計図=クラスして説明する。というのも、車の製造にあたって部品を組み合わせてゆくプロセスが、iア部品の機能=メリットプリの構造に似ているからだ。図を見ながら読んでもらうとわかりやすいので参考にしてとなる。先ほどのエンジンクラスを例にとる

スのなかで「実体を作る」という命令を書かもらいたい。と、エンジンの始動や停止といった機能がメかなくてはならないという点だろう。これは、まずiアプリを語るうえで絶対に覚えておかソッドにあたる。車を動かすときには、エンエンジンクラスという設計図のなかには「エなければならないのが「クラス」である。簡ジンクラスのエンジン始動メソッドを使えばンジンをいつ製造して、いつ納品してもらう」

単に言うとクラスとは、「ある機能に関連しよいのだ。など、製造指示までが含まれていると考えるた情報や操作を1つにまとめたもの」をいう。

そして次が「インスタンス」だ。今まではとよい。
「車を走らせるのにエンジンが必要な車の設計にたとえると、設計図のような位置「設計図」の話ばかりだったが、車が部品のので、エンジンの設計書をもとにエンジンを付けのものと考えてもらってもよい。エンジ

設計図を集めてもそれだけでは動かないのと作れ」がインスタンスの生成、「エンジン、点ンの設計図はエンジンクラス、車全体の設計同じように、iアプリも設計図だけでは動かな火しろ」がメソッドの呼び出し、そんなイメ図は車クラスといった感じである。

い。設計図から部品という実体を作り、それージでよいだろう。

次に「メソッド」である。メソッドとは、を組み合わせてはじめて車が走るように、iア

これで全体的な構造の概観が見えてきただ

クラスのなかにある機能をあらわしたものといプリも設計図から実体化させる必要があるのろうか。インスタンスがちょっと難しいかもしえる。設計図ならば、それぞれの機能をどうだ。この 実体化れないが、少しずつ自分なりのイメージを深実現するかを表現した部分がメソッドの内容がインスタンスだ。

ここで理解しにくいのが、プログラムソーめていって欲しい。

ソースを書くうえでの約束ごと1つ「コメント」がある。このコメントは、プ
ログラム上はまったく関係がない。人間がソースを見たときにわかりやすいようにするために書いておくメモのようなものである。書きインデントについてなどのまとまりを表すのに、中括弧{方は2 種類で、「/*」と「*/」で囲む方法と、すくする知恵のようなものである。

i アプリはプログラム内でメソッドやクラス}を使「//」以降に記述する方法がある。
「//」で指{っている。少々長いソースになると、これが//第1段落の始め{

山と出てくる。これを、なんの工夫もなく記//第2段落の始め{//第3段落の始め/*}//第3段落の終わり*/述していくと、とてもではないが中括弧がどここはコメントです。

こからどこまでを括っているのかわからなくなってしまう。そこで、決まりごととして イ定すると、改行するまでがコメントとなる。

}}//第2段落の終わり//第1段落の終わり

ンデント というものを使う。
「{」から「}」//ここはコメントです。
ここはコメントではありません。の間のすべてをスペース2つぶんだけ右にずらして記述することで、中括弧の表す範囲を明確に表現できる。いわばソースコードを見やコメントについてまた、ソースを見やすくする知恵にはもうインターネットマガジン／株式会社インプレスR&D

それでは、次のページでは実際のソースを掘り下げながら見てみよう。

JAVA（ジャバ）：サン・マイクロシステムズ社の開発したプログラミング言語。ネットワーク環境で利用されることを前提とし、Javaで開発されたソフトウェアは特定のOSに依存せず、基本的にどのようなプラットフォーム上でも動作することになっている。
©1994-2007 Impress R&D

INTERNET magazine 2001/7221

勝手に作ろう!

iアプリ

i アプリプログラミングのイロハ
iアプリは、メインクラスを中心にして構成由来する。総容量を10 キロバイト以内にしされている。右図をみれば、その関係がわかなければならないというi アプリの厳しい制限るだろう。このMyIntro の場合、オープニンから逃れるための知恵なのだ。

■メインクラスと他のクラスの関係（MyIntro の場合）

グの画面の動作と、トップ画面の動作、プロフィール画面クラスの動作とで、それぞれクメインクラス
プロフィール画面クラス

ラスを形成している。

トップ画面クラス

ユーティリティークラス

また、「ユーティリティークラス」という、どのクラスからでも使うメソッドを集めたクラスがあるのだが、通常iアプリではメインクラOK.じゃあユーティリティークラスを使わせてオープニング画面を出してスに組み込まれる。これは、複数のクラスを形成すると全体の容量が増えてしまうことにオープニング画面クラス
メインクラスが場面によって他のクラスを呼び出す

パッケージを呼び出す【9-12 行目】
1 つのアプリケーション内で使われるメソッドやクラスのすべてをソース内で定義

MyIntro.java（メインクラス）するわけではない。パッケージという、すでに用意してあるクラスの集まりを呼び1234567891011121314151617181920

込んで使うこともあるのだ。たとえば11 行目で、パッケージの1 つでDisplay クラスなどが入っている"com.nettdocomo.ui"を呼び込んでいるのだが、これにより36 行目のようにDisplay クラスが使えるようになるのだ。このようにパッケージを呼び出すことを「インポート」と言い、以下のように記述する。

import[パッケージ]

メインクラスをつくる【17 行目】
アプリケーションの中心であるメインクラスの宣言方法は以下のようになる。

[宣言子]

class

[クラスの名前][オプション][宣言子]:このクラスがどのようなものなのかを宣言している。"public"は、「みんなが見られる」といった意味合い。くわしく述べると難しいので、ここでは「メインクラスは"public"」と覚えてしまおう。
[オプション]:ここでは、"extends IApplication"となっているが、これは親クラスから機能を引継ぐ「継承」をするという意味である。これで何も記述することなく、親クラスのメソッドが使える。この場合は、IApplication というクラスを継承し、これを使えるようにしている。継承の記述方法は、オプション部を"extends [親クラス]"とすればよい。ちなみに、メインクラスはIApplicationクラスを継承しなくてはならない。

変数をつくる【23-25 行目】
iアプリでは、数字や文字、インスタンスなどは、器である変数に入れてやり取り/*** タイトル: MyIntro* 著作権:
Copyright (c) 2001
* 会社名:El Camino Real, inc.
* @author Shinichi Iwashita* @version 1.0*/
import java.io.*;import javax.microedition.io.*;import com.nttdocomo.ui.*;
import com.nttdocomo.io.*;/*** アプリケーションのメインクラス*/
public class MyIntro extends IApplication{// 定数（システム）
private static final int MAX_MSG_LEN = 1000;// メッセージの最大長（半角）212223242526272829303132333435363738// 変数
static TopFrm
topF;
static OpenFrm opnF;
static ProfiFrm proF;// トップパネル// オープニングキャンバス// プロフィールパネル/*** アプリケーションが起動したら呼ばれる*/
public void start(){// フレームを準備
topF = new TopFrm();
opnF = new OpenFrm();
proF = new ProfiFrm();
Display.setCurrent( opnF );}する。ごはんを茶碗に盛るようなものだ。そのためには、その変数にどのようなも※共通メソッドのため中略※のを入れるのかを宣言する必要がある。
271

[宣言子]

[変数の型]}// MyIntro クラスの最後[変数の名前];■：変数名

222 INTERNET magazine 2001/7■：コメント ■：外部ファイル名やカスタマイズ可能なところ

インターネットマガジン／株式会社インプレスR&D

定義：メソッドやクラス、変数などを使う際には、それがどのようなものなのかをコンピュータに認識させる必要がある。これを定型に従ってプログラムソース上で行うことを定義という。

©1994-2007 Impress R&D[宣言子]:"static"の部分。これは少し特殊な宣言子なので、くわしくは次の機会生成されたインスタンスは変数に格納されるので、クラス型の変数が必要になる。に説明する。一般的に、このクラスのなかだけでしか使わない変数の場合はこの前に用意しておこう。

"private"を使う。
[変数の型]:この変数が何を格納するものかを書く。ここではインスタンスを格納メソッドを使う【36 行目】

する変数を宣言しているので、クラス名が書かれている。

クラスが実体化してインスタンスになると、その機能を使えるようになる。記述[変数の名前]:名前。変数の場合は先頭を小文字にするのが決まりである。

方法は、以下のとおりだ。

最初に動くメソッドをつくる【30-38 行目】
iアプリは、起動するとまず最初にメインクラスのなかのstartメソッドに記述され[インスタンス].[メソッド]（[引数]）ている動きをする。従って、メインクラスのなかには必ずstart メソッドが必要になる。記述方法は以下のとおりだ。
引数とは、そのメソッドに与える値のことだ。値と言っても、数だけではないので注意してもらいたい。36 行目では、インスタンスを格納した変数（opnF）をpublic void start（）指定している。

{

ところで、その36行目で呼び出しているメソッドのsetCurrentはDisplayクラス※ここに一番最初に実行する内容を記述する※のものなのだが、メソッドを生成することなく使われていることに気が付いただろ}うか。実はメソッドの中にはインスタンスを作らなくても使える「スタティックメソッド」というものがあり、このメソッドもこれにあたる。これらは例外として考インスタンスをつくる【33-35 行目】

えておこう。

クラスは設計図のようなもので、そこに書かれている機能を使うには、生成して実体化させる必要がある。

次回以降は、iアプリの文字や画像、音楽などのマルメディア機能をどうのようにして実現させるのかを見てゆく。来月は文字列をタイプライターのように打ち出すメソッドを中心にして進める。楽しみにしても[クラス型の変数] ＝ new [クラス名]

らいたい。

今月のオマケ!

3 分で完成するオリジナル i アプリ「 自 分 の 顔 の 時 計 を 作 ろ う 」！
ここでは、ちょっとした変更だけで作れる自分だけの i アプリを紹介してゆく。
今月は好みの画像を背景にできる時計「PictWatch」だ。

4 完成!

1まずはダウンロード!
PictWatch は、internet.impress.
co.jp/iappli/に置いてあるので、PictWatch フォルダーを丸ごとダウンロードしてしまおう。

2 画像を差し替えろ

3 ftp でアップロード
変更したPictWatch フォルダーをそのまま自分のホームページエリアなどにアップロードしよう。

アップロードしたフォルダーのなかにある
PictWatch.html にi モードでアクセスすれば、オリジナルiアプリをダウンロードできる。これだけで自分のiアプリを使えるぞ。

オリジナルiアプリ募集中!
今月のオマケ!は、バイト数の制限のなかでどれだけ画像をキレイにできるかがポイントだ。うまくできたら、オリジナルi アプリをアップロードしたサイトのURL を編集部宛にメールしよう。もしできなくても、質問でも感想でもなんでもOK だ。ドシドシ送ってきてもらいたい。宛先は次のとおり。
多数のメールを期待している。 lim-iappli@impress.co.jp

もっと知りたいキミにはコレ！
PictWatch フォルダーのなかには、back.gif がある。これを差し換えるだけで、背景の画像を変更できる。ただ気をつけてもらいたいのが、gif ファイルの大きさだ。5120 バイトまでしか入らないのだ。それ以上になる場合はjamファイ
ルのSPsize にある数字を大きくする必要がある。最大で10240バイトまで大きくできるぞ。

『今すぐできるi アプリプログラミング』
小社発行 本体価格2,400円
来月なんて待ってられない、もっとくわしくいろいろと知りたい!と思っている君にはコレがオススメ。この連載で取り上げているiアプリについても解説しているので、一緒に読んでいけばもっとよくわかるぞ。

インターネットマガジン／株式会社インプレスR&D

Jam(Java Application Manager)ファイル：拡張子.jamをつけたシフトJISコードのテキストファイル。iアプリがダウンロードされる際に1番最初に読み込まれ、携帯の空き容量や互換性をチェックするのに使われる。
©1994-2007 Impress R&D

INTERNET magazine 2001/7223

［インターネットマガジン バックナンバーアーカイブ］ ご利用上の注意
この PDF ファイルは、株式会社インプレス R&D（株式会社インプレスから分割）が 1994 年～2006 年まで発行した月刊誌『インターネットマガジン』の誌面を PDF 化し、「インターネットマガジン バックナンバーアーカイブ」として以下のウェブサイト「All-in-One INTERNET magazine 2.0」で公開しているものです。

http://i.impressRD.jp/bn
このファイルをご利用いただくにあたり、下記の注意事項を必ずお読みください。
z 記載されている内容（技術解説、URL、団体・企業名、商品名、価格、プレゼント募集、アンケートなど）は発行当時のものです。
z 収録されている内容は著作権法上の保護を受けています。著作権はそれぞれの記事の著作者（執筆者、写真の撮影者、イラストの作成者、編集部など）が保持しています。
z 著作者から許諾が得られなかった著作物は収録されていない場合があります。
z このファイルやその内容を改変したり、商用を目的として再利用することはできません。あくまで個人や企業の非商用利用での閲覧、複製、送信に限られます。
z 収録されている内容を何らかの媒体に引用としてご利用する際は、出典として媒体名および月号、該当ページ番号、発行元（株式会社インプレス R&D）、コピーライトなどの情報をご明記ください。
z オリジナルの雑誌の発行時点では、株式会社インプレス R&D（当時は株式会社インプレス）と著作権者は内容が正確なものであるように最大限に努めましたが、すべての情報が完全に正確であることは保証できません。このファイルの内容に起因する直接的および間接的な損害に対して、一切の責任を負いません。お客様個人の責任においてご利用ください。

このファイルに関するお問い合わせ先
All-in-One INTERNET magazine 編集部
im-info@impress.co.jp
Copyright © 1994-2007 Impress R&D, an Impress Group company. All rights reserved.