[小西ホームページ]   [目次・索引]   [前の授業]   [次の授業]

コンピュータIIB(Javaプログラミング入門)第12回

目次
12.1 携帯アプリとJava
12.1.1 携帯アプリとは
12.1.2 iアプリの開発から実行まで
12.1.3 開発環境のインストール
12.1.4 開発環境の使い方
12.1.5 iアプリの実行
12.2 今後の予定
12.3 成績評価について
12.4 演習12
12.5 レポート課題
12.6 参考文献
索引
ADF   BREW   DoJa   EZアプリ(BREW)   iアプリ   JAR   Java EE   Java ME   Java SE   MIDP   S!アプリ   オープンアプリ   携帯アプリ   ビルド   プロジェクト  

12.1 携帯アプリとJava

12.1.1 携帯アプリとは

これまでJavaを勉強してきましたが、勉強してきたのはパソコン用のJavaです。 実は、Javaは3種類あります。

Java EE(Enterprise Edition)
大規模なコンピュータ・システムのためのJavaです。
Java SE(Standard Edition)
パソコン用のJavaです。
Java ME(Micro Edition)
携帯電話用のJavaです。

携帯アプリmobile application )とは、携帯電話で利用できるアプリケーション・ソフトウェアです。 例えば、ゲームの携帯アプリを開発すれば、携帯電話でゲームが楽しめます。

日本の場合、携帯アプリの仕組みは、NTT DoCoMo, au(KDDI), SoftBankの3キャリアの間で大きく異なります。 しかし、3キャリアともJavaが関係しています。

NTT DoCoMoの携帯アプリは、 iアプリiappli )と呼ばれます。 iアプリを開発するときは、Java MEの一種である DoJa という規格に基づきます。 iアプリを配布するとき、キャリアによる審査は必要ありません。

au(KDDI)の携帯アプリには、 EZアプリ(BREW)EZappli(BREW) )と オープンアプリOpenAppli )の2種類があります。 EZアプリ(BREW)を開発するときは、C/C++の一種である BREW (Binary Runtime Environment for Wireless)という規格に基づきます。 オープンアプリを開発するときは、Java MEの一種である MIDP (Mobile Information Device Profile)という規格に基づきます。 EZアプリ(BREW)を配布するとき、キャリアによる審査が必要です。 オープンアプリを配布するとき、キャリアによる審査は必要ありません。

SoftBankの携帯アプリは、 S!アプリS! Appli )と呼ばれます。 S!アプリを開発するときは、Java MEの一種であるMIDPという規格に基づきます。 S!アプリを配布するとき、キャリアによる審査が必要です。

表 12.1  携帯アプリのキャリア間の違い
キャリア サービス名 言語 規格 配布
NTT DoCoMo iアプリ Java DoJa 自由
au(KDDI) EZアプリ(BREW) C/C++ BREW 審査が必要
オープンアプリ Java MIDP 自由
SoftBank S!アプリ Java MIDP 審査が必要

結論として、個人で携帯アプリを開発・配布するには、NTT DoCoMoのiアプリかau(KDDI)のオープンアプリということになります。 この授業では、NTT DoCoMoのiアプリについて説明します。

12.1.2 iアプリの開発から実行まで

iアプリを開発する前に、Windowsパソコンを用意する必要があります。 パソコンには、Javaの開発環境とDoJaの開発環境をインストールしておきます。

iアプリを開発するには、まず、DoJaの開発環境を起動します。 そして、Javaプログラムを入力し、コンパイルします。 DoJaの開発環境には、iモード携帯のエミュレータがあり、iアプリがiモード携帯でどう動くのかが確認できます。

動作確認ができたら、iアプリを配布します。 iアプリのファイル一式を、ウェブ・サイトにアップロードします。 iモード携帯でこのウェブ・サイトにアクセスし、iアプリをダウンロードします。 すると、iアプリが実行できます。

12.1.3 開発環境のインストール

DoJaには、DoJa 1.x, DoJa 2.x, DoJa 3.x, DoJa 4.x, DoJa 5.xがあります。 数字が大きいほど、新機種に対応しています。 ここでは、中間のDoJa 3.0を利用することにします。 DoJa 3.0と組み合わせて使うJavaは、Java 1.3.1です。

Javaの開発環境(Java 2 SDK, Standard Edition Version 1.3.1)を、次のようにインストールします。

  1. Administratorでログオン。
  2. J2SE 1.3.1ダウンロードのページ
    http://java.sun.com/products/archive/j2se/1.3.1_20/
    を開く。
  3. Download J2SE v 1.3.1_20の項目を探し、WindowsのSDKの部分にある「DOWNLOAD」をクリック。
  4. OSを選択し、「Software License Agreement」にチェックを入れ、「Continue」ボタンをクリック。
  5. ファイル名をクリックして、ファイルをダウンロードする。
  6. ダウンロードしたファイルのアイコンをダブルクリックして、インストール・プログラムを実行する。
  7. インストール・プログラムの質問に答える。 質問が分からなければ、そのまま「次へ」をクリック。
  8. インストールが完了する。

インストールが完了したら、次のようにパスを設定します。

  1. 普段のユーザでログオンし直す。
  2. コントロール・パネルを開き、「システム」をダブルクリック。
  3. 「詳細」または「詳細設定」→「環境変数」とクリック。
  4. 「ユーザ環境変数」の欄で変数「PATH」を探す。
  5. 変数「PATH」があればそれをクリックして「編集」をクリック。 「変数値」の最初に「C:\jdk1.3.1_20\bin;」を追加する。
  6. 変数「PATH」がなければ「新規」をクリック。 「変数名」に「PATH」を入力し、「変数値」に「C:\jdk1.3.1_20\bin」を入力する。

ここで、試しにJavaアプレットを作成してみます。 Windowsでは、プログラムの入力には「メモ帳」などを使います。 プログラムのコンパイルや実行には「コマンドプロンプト」などを使います。

JBox.java
import java.applet.*;
import java.awt.*;

public class JBox extends Applet {
    public void paint (Graphics g) {
        g.fillRect(50, 50, 100, 100);
    }
}
JBox.html
<applet code="JBox.class" width="300" height="200">
</applet>
アプレットビューア: JBox.class
アプレット
Javaアプレットの例
アプレットが開始されました。
図 12.1  Javaアプレットの例

次に、DoJaの開発環境(iappli Development Kit for DoJa-3.0)を、次のようにインストールします。

  1. Administratorでログオン。
  2. iアプリのページ
    http://www.nttdocomo.co.jp/service/imode/make/content/iappli/
    を開く。
  3. 「開発ツールダウンロード」→「DoJaプロファイル向けの開発ツールダウンロード」とクリック。
  4. 「DoJa-3.xプロファイル向け」→「DoJa-3.0プロファイル向けiアプリ開発ツール」とクリック。
  5. 「iappli Development Kit for DoJa-3.0のダウンロード」をクリック。
  6. 「同意する」をクリックして、ファイルをダウンロードする。
  7. ダウンロードしたファイルのアイコンをダブルクリックして、ファイルを解凍する。
  8. 解凍されたフォルダを開き、「DISK1」→「setup.exe」とダブルクリックして、インストール・プログラムを実行する。
  9. インストール・プログラムの質問に答える。 質問が分からなければ、そのまま「次へ」をクリック。
  10. インストールが完了する。

12.1.4 開発環境の使い方

DoJaの開発環境を起動するには、「スタート」→「プログラム」→「iappli Development Kit for DoJa-3.0」→「iappliTool for DoJa-3.0」とクリックします。 起動すると、メイン画面とエミュレータ端末画面が表示されます。

新しくiアプリを作成するには、まず、プロジェクトというものを作成します。 プロジェクトproject )とは、1つのiアプリを作成するためのファイルの集合です。 では、メイン画面の「プロジェクト新規作成」ボタンをクリックしてください。 すると、プロジェクトの格納先と名前を聞かれるので、「参照」ボタンをクリックして格納するフォルダ(例えばC:\Documents and Settings\ユーザ名\デスクトップ)を選択します。 「プロジェクト名」にはiアプリの名前(今回はIBox)を入力し、「作成」ボタンをクリックします。 すると、指定したフォルダにプロジェクトが作成されます。

プロジェクトにJavaプログラムを追加するには、メイン画面で「プロジェクト」→「ソースファイルの新規作成」とクリックします。 すると、ファイル名を聞かれるので、ファイル名(今回はIBox.java)を入力し、「作成」ボタンをクリックします。 自動的にテキスト・エディタ(メモ帳)が開き、テンプレートが挿入されます。 これを変更してプログラムを完成させ、ファイルに保存します。 もう1つのJavaプログラムIBoxCanvas.javaについても、同様に追加します。

IBox.java
import com.nttdocomo.ui.*;

public class IBox extends IApplication {
    public void start () {
        Display.setCurrent(new IBoxCanvas());
    }
}
IBoxCanvas.java
import com.nttdocomo.ui.*;

public class IBoxCanvas extends Canvas {
    public void paint (Graphics g) {
        g.fillRect(50, 50, 100, 100);
    }
}

このプログラムの説明は省略しますが、これがJavaアプレットに似ていることに注目してください。

プログラムをコンパイルするには、メイン画面の「ビルド」ボタンをクリックします。 ここで、 ビルドbuild )とは、プログラムをコンパイルして1つのiアプリにまとめることです。 もし、プログラムにエラーがあれば、エラー・メッセージが表示されます。 エラーがなければ、「ビルド終了」と表示されます。

ビルドしたiアプリを実行するには、メイン画面の「起動」ボタンをクリックします。 プログラムにエラーがなければ、エミュレータ端末画面にiアプリが表示されます。 プログラムを終了するには、エミュレータ端末画面の終話ボタンをクリックします。


iアプリの例

図 12.2  iアプリの例

12.1.5 iアプリの実行

作成したiアプリをiモード携帯で実行するには、iアプリをウェブ・サーバにアップロードします。 アップロードするファイルは次の3個です。

JAR (Java ARchiver)ファイルは、〜.classファイルなどをアーカイブしたファイルです。 プロジェクトのフォルダのbinフォルダに入っています。 ADF (Application Descriptor File)は、iアプリの名前やJARファイルのURLなどを設定するファイルです。 これも、binフォルダに入っています。 ADFを変更するには、メイン画面の「ADF設定」をクリックします。 HTMLファイルは、ホームページ作成言語ですが、ここにADFのURLなどを指定します。

IBox.html
<OBJECT declare id="application.declaration"
    data="IBox.jam" type="application/x-jam">
</OBJECT>
<A ijam="#application.declaration" href="no_appli.html">ダウンロード</A>

最後に、iモード携帯で、このHTMLファイルのURLにアクセスします。 すると、iアプリがダウンロードされ、iアプリが実行できます。


12.2 今後の予定

今後の予定は以下の通りです。

7月17日(金)
授業中に試験を行います。 今日の演習問題をよく見直しておいてください。
7月24日(金)
この日までに、レポートの提出状況をメールで知らせます。
7月31日(金)
レポートの最終締め切り日です。 これ以降提出されたレポートは採点しません。

12.3 成績評価について

この授業の成績は、レポートの提出と試験の得点で決まります。

S
レポートはすべて提出。 「余力のある人」のための問題にも取り組んでいる。 試験の得点は「優」相当。
A
レポートはすべて提出。 試験の得点は「優」相当。
B
レポートはおおむね提出。 試験の得点は「良」相当。
C
レポートは未提出が目立つ。 試験の得点は「可」相当。
F
レポートは未提出が多い。 試験の得点は「不可」相当。

成績に関して次のような事情のある人はメールで連絡してください。 できる限り対処します。


12.4 演習12

問1. 次のプログラムは、入力された3つの整数の合計を出力する(つもりの)ものです。 このプログラムの不具合を修正してください。

/*  1*/ import java.io.*;
/*  2*/
/*  3*/ class FigureSum {
/*  4*/     public static void main (String[] args) throws IOException {
/*  5*/         InputStreamReader isr = new InputStreamReader(System.in);
/*  6*/         BufferedReader br = new BufferedReader(isr);
/*  7*/         int x, y, z, sum;
/*  8*/         System.out.print("整数を入力してください: ");
/*  9*/         x = Integer.parseInt(br.readLine());
/* 10*/         System.out.print("整数を入力してください: ");
/* 11*/         y = Integer.parseInt(br.readLine());
/* 12*/         System.out.print("整数を入力してください: ");
/* 13*/         z = Integer.parseInt(br.readLine());
/* 14*/         sum = x * y * z;
/* 15*/         System.out.println(sum);
/* 16*/     }
/* 17*/ }
asiaa1:~/comp2b b08a001$ java FigureSum
整数を入力してください: 1
整数を入力してください: 2
整数を入力してください: 3
6 // 正しい
asiaa1:~/comp2b b08a001$ java FigureSum
整数を入力してください: 10
整数を入力してください: 20
整数を入力してください: 30
6000 // 間違い
asiaa1:~/comp2b b08a001$

問2. 次のプログラムは、入力された3つの整数がすべて異なるかどうかを出力する(つもりの)ものです。 このプログラムの不具合を修正してください。

/*  1*/ import java.io.*;
/*  2*/
/*  3*/ class AllDifferent {
/*  4*/     public static void main (String[] args) throws IOException {
/*  5*/         InputStreamReader isr = new InputStreamReader(System.in);
/*  6*/         BufferedReader br = new BufferedReader(isr);
/*  7*/         int x, y, z;
/*  8*/         System.out.print("整数を入力してください: ");
/*  9*/         x = Integer.parseInt(br.readLine());
/* 10*/         System.out.print("整数を入力してください: ");
/* 11*/         y = Integer.parseInt(br.readLine());
/* 12*/         System.out.print("整数を入力してください: ");
/* 13*/         z = Integer.parseInt(br.readLine());
/* 14*/         if (x != y || y != z || x != z) {
/* 15*/             System.out.println("すべて異なる。");
/* 16*/         }
/* 17*/     }
/* 18*/ }
asiaa1:~/comp2b b08a001$ java AllDifferent
整数を入力してください: 10
整数を入力してください: 20
整数を入力してください: 30
すべて異なる。 // 正しい
asiaa1:~/comp2b b08a001$ java AllDifferent
整数を入力してください: 10
整数を入力してください: 10
整数を入力してください: 30
すべて異なる。 // 間違い
asiaa1:~/comp2b b08a001$

問3. 次のプログラムは、入力された3つの整数の最大値を出力する(つもりの)ものです。 考え方は、 xy を比較し、大きい方と z を比較する、です。 このプログラムの不具合を修正してください。

/*  1*/ import java.io.*;
/*  2*/
/*  3*/ class FindMax {
/*  4*/     public static void main (String[] args) throws IOException {
/*  5*/         InputStreamReader isr = new InputStreamReader(System.in);
/*  6*/         BufferedReader br = new BufferedReader(isr);
/*  7*/         int x, y, z, max;
/*  8*/         System.out.print("整数を入力してください: ");
/*  9*/         x = Integer.parseInt(br.readLine());
/* 10*/         System.out.print("整数を入力してください: ");
/* 11*/         y = Integer.parseInt(br.readLine());
/* 12*/         System.out.print("整数を入力してください: ");
/* 13*/         z = Integer.parseInt(br.readLine());
/* 14*/         if (x < y) {
/* 15*/             max = y;
/* 16*/         } else {
/* 17*/             max = x;
/* 18*/         }
/* 19*/         if (z > max) {
/* 20*/             max = z;
/* 21*/         } else {
/* 22*/             max = z;
/* 23*/         }
/* 24*/         System.out.println(max);
/* 25*/     }
/* 26*/ }
asiaa1:~/comp2b b08a001$ java FindMax
整数を入力してください: 10
整数を入力してください: 20
整数を入力してください: 30
30 // 正しい
asiaa1:~/comp2b b08a001$ java FindMax
整数を入力してください: 30
整数を入力してください: 20
整数を入力してください: 10
10 // 間違い
asiaa1:~/comp2b b08a001$

問4. 次のプログラムは、入力された1以上の整数の、最も左の数字を出力する(つもりの)ものです。 最も左の数字を求めるには、1桁になるまで、整数を次々と10で割ります。 このプログラムの不具合を修正してください。

/*  1*/ import java.io.*;
/*  2*/
/*  3*/ class LeftDigit {
/*  4*/     public static void main (String[] args) throws IOException {
/*  5*/         InputStreamReader isr = new InputStreamReader(System.in);
/*  6*/         BufferedReader br = new BufferedReader(isr);
/*  7*/         int x;
/*  8*/         System.out.print("整数を入力してください: ");
/*  9*/         x = Integer.parseInt(br.readLine());
/* 10*/         while (x > 1) {
/* 11*/             x = x / 10;
/* 12*/         }
/* 13*/         System.out.println(x);
/* 14*/     }
/* 15*/ }
asiaa1:~/comp2b b08a001$ java LeftDigit
整数を入力してください: 12345
1 // 正しい
asiaa1:~/comp2b b08a001$ java LeftDigit
整数を入力してください: 54321
0 // 間違い
asiaa1:~/comp2b b08a001$

問5. 次のプログラムは、{30, 50, 10, 40, 20} で表される配列のすべての要素を逆順に出力する(つもりの)ものです。 このプログラムの不具合を修正してください。

/*  1*/ class PrintReverse {
/*  2*/     public static void main (String[] args) {
/*  3*/         int i;
/*  4*/         int[] a = {30, 50, 10, 40, 20};
/*  5*/         for (i = 0; i > a.length; i--) {
/*  6*/             System.out.println(a[i]);
/*  7*/         }
/*  8*/     }
/*  9*/ }
asiaa1:~/comp2b b08a001$ java PrintReverse
asiaa1:~/comp2b b08a001$ // 何も出力されないので間違い

12.5 レポート課題

今日の演習12の答案(Javaプログラム)をメールで提出してください。 差出人は学内のメール・アドレス(b08a001@cis.twcu.ac.jpなど)とし、宛先はkonishi@cis.twcu.ac.jpとします。 メールの本文には、学生番号、氏名、科目名、授業日(7月10日)を明記してください。


12.6 参考文献


[小西ホームページ]   [目次・索引]   [前の授業]   [次の授業]

2009年7月10日更新
小西 善二郎 <konishi@cis.twcu.ac.jp>
Copyright (C) 2009 Zenjiro Konishi. All rights reserved.