短期集中連載 大和哲の iアプリプログラミングをしよう
第3回:iモードで何をするのか

■ 新しいプラットフォームに、新しいアイデアを

 iモード携帯電話にはほかのプラットフォームにはない特徴的な使われ方や、機能がある。これは人より少しでも豊かな想像力のプログラマにとっては非常に大きな魅力になるだろう。なにしろ、プログラマにとっては今まで身につけていたスキルとわずかなプラスαだけで、いろいろなことに使えるプログラムのネタを思いつくことになるだろうからだ。(プロのプログラマにとってはビジネスチャンスの種、と言ってもいいかもしれない)。

 ぱっと、思いつくことでは、たとえば、iモードはほかの機器に比べると非常に小さい。また、多くの人にとっては、携帯電話というのは出かけるときなどに常に身につける、一番人間と一緒にいる時間の長いデバイスのひとつとなっていることがある。だから、一番身近で小さなPIMとしても使えばとても便利だし、あるいは電卓プログラムを作れば、いつでも割り勘に役立つアイテムや、どこにいてもつけられて参照できる家計簿にできるかもしれない(たとえば、F503iの場合は、これらのプログラムが、実際に富士通から提供されている標準iアプリがまさにそのものなのだが)。

 ただ、iアプリにはできることもあるが、できないこと、制限事項もいくつかある。いろいろなアイデアを、あなたのプログラミングに役立てられるかどうか、少しこれらを考えて検討してみて欲しい。


■ iアプリでできることと制限されていること

・できること

 既に書いたこととしてはiモード携帯電話として可能な機能には以下のようなものがあった。

 ・120×160ピクセル程度のカラー画面に描画
 ・iメロディによる音楽データの再生
 ・9,600bpsパケット通信による、Webサーバーとのデータ送受信
 ・スクラッチパッドによる5KB(あるいはそれ以上)までのデータの保存

 画面データはiアニメと呼ばれる256色のGIFアニメデータも利用できる。また、iメロディは502iシリーズから対応した3和音以上が可能な着信メロディ用のデータだ。

 Webサーバー、スクラッチパッドメモリへのiモードのデータ入出力関係のAPIはとてもすっきりしている。Java2ME CLDCではネットワーク(HTTP、Datagram、Socket など)、ポート、ファイルなど全ての入出力への接続を簡単に、メモリの消費を抑え、そして汎用的に扱えるようにするため、Generic Connectionフレームワークを採用しているからだ。

 HTTPで接続する場合、Webサーバーへの接続は

HttpConnection conn = (HttpConnection)Connector.open(
            "http://hogehoge/i/hoge.dat",
            Connector.READ,
            true);

でできるし、スクラッチパッド書きこみのためのファイルオープンは

Connector.openOutputStream("scratchpad:///0");

でOKだ。

 ほかには、iアプリから使える機能としては以下のようなものがある。

 ・液晶パネルのライトON/OFF
 ・電話本体のバイブレーション
 ・1時間間隔での定時プログラム実行

 液晶パネルのON/OFF、バイブレーションに関しては、既に配布されている手引きによると、機種依存のAPIとなるため、機種依存ライブラリを利用することになるようだ。使い方は残念ながらNTTドコモから正式にクラスライブラリとドキュメントが公開されるまでわからない(かもしれない)。

 定時プログラム実行は、プログラミングというより設定によるものなのだが、iアプリでは、ダウンロード済みのプログラムを自動的に起動させることができる。JAMファイルのパラメータに「LaunchAt」を追加すれば、自動起動ができる。1時間単位で、起動間隔を指定可能だ。

・制限されていること。

 携帯電話にはさまざまな機能がある。たとえば、電話回線を通じたネットワークのアクセスは簡単だし、それ自身に内部の電話番号などのデータを書きかえる機能をもつものすらある。セキュリティホールなどがあった場合、その上で悪意あるプログラムを走らせてしまうと、今までのPCやPDAの比ではない被害をこうむることにもなりかねない。

 そのため、iモードのセキュリティに関する部分はかなり厳格だ。ネットワークということでいえば、まず、iアプリのアクセスできるサーバーは「iアプリをダウンロードしたサイトのみ」になっている。つまり、ダウンロード元サーバー以外のサーバーにアクセスしたいときには、ダウンロードを行なったWebサーバーの支援が必要になるわけだ。

 また、iモードJavaの場合、ネイティブOS上の上にJava環境があるわけだが、Javaアプリケーションからネイティブな機能へのアクセスは厳しく制限されている。(ちなみに、この辺はauの採用するBrewだと、プログラミング言語がC/C++、電話機ネイティブのコードで走る。セキュリティへの対応は開発環境をオープンにせず、限られた開発者にだけプログラミングをさせることで守る方針であるようだ)

 たとえば、Javaから携帯電話内の電話帳データなどにはアクセスできない。
 また、携帯電話にはショートメール発信などの機能があるが、この機能なども使用不可だ。

 また、携帯電話というのは非常に小さくて電池もかなり長時間持たせることができるのだが、そのトレードオフがあることも了解しておいたほうがいいだろう。すなわち、PCでの実行に比べるとかなりJavaVMの実行速度が遅い。
 また、繰り返しになるが、プログラムの大きさはJARファイルで10KB以下だ。


■ iアプリでできることと制限されていること

 ということで、たとえば、こんな使い方もできる、というサンプルをお見せしよう。
 Webサーバーへのアクセスと定時実行を組み合わせた例だ。

 iアプリはそのファイルがダウンロードされたサーバーへのアクセスができる。そこで、Webサーバーからスタティックなテキストデータやイメージファイルを渡すのではなく、サーバーで何らかの情報をそのときに応じて渡してやるのだ。
 これと定時実行を組みあわると、たとえば、1時間ごとに何かの状況を見て、変化があったらユーザーに知らせてくれるようなアプリケーションを作ることができる。

iアプリとWebサーバー、さらにその先のサーバーと組み合わせた例。今回のサンプルプログラムではPC Watchをiアプリのダウンロード元サーバーが監視し、その情報をiモードが定期的に見に行く
 たとえば、Webサーバーからリモートメールのようにメールサーバーを見に行って、新しいメールが来ていたらユーザーに知らせるようなプログラムを書く。これを1時間ごとに実行するようにすれば、ユーザーは携帯電話を「メールサーバーに新しいメールが届いたら1時間以内にそれを教えてくれるツール」として使うことができる(と書いていたら、「リモートメール」では本当に、iアプリを使ってメール到着通知サービスを始めたらしい。このサンプルと原稿は「リモートメール」発表以前に書かれたものなので、ご勘弁いただきたい)。

 また、たとえば、世間には、いわゆる「アンテナスクリプト」というものがある。

 これは簡単に言うと、あるサーバーに設定しておくと、一定時間間隔でほかのWebサーバーを見に行き、その更新時刻をリストアップしておいてくれるというものだ。よく使われているものとしては「なつみかん」や「朝日奈アンテナ」などがある。

 このアンテナ系のサーバーソフトと組み合わせれば、Webページがが更新されたら1時間以内に、携帯電話がユーザーに教える、などということもできるわけだ。

 ということで、作ってみたのがサンプル2。「PC Watch Dog」。PC Watchの本文が更新されたら、携帯電話が鳴ってユーザーに教える、というiアプリだ。

【お詫びと訂正】初出時に誤ったプログラムリストが掲載されておりました。ご迷惑をおかけした方々にお詫びして訂正いたします。

 仕組みは、まず、筆者の使用しているWebサーバー上のプログラム(dog.pl)が15分間隔でPC Watchの本文の更新をチェックしている。(ただし、今回のサンプルプログラムではは簡単に試すことができるように、このスクリプト自身でPC Watchを見に行き、そのバイト数を出している。が、そのため、必ずしもPC Watch上に表示された更新時刻と、iモードで報告される更新は一致しないことがあるようだ。より実用的なプログラムにするには、アンテナスクリプトの出すhina.txtなどから取り出したいサイトの情報を抜き出してファイルとしておくのがいいだろう)。

 iモードは、jamファイルで指定されたように、1時間ごとにWebサーバーにアクセスし、このバイト数をチェックする。もし、以前調べた本文のバイト数(スクラッチパッドに記録されている)から増減していれば、アラームを鳴らしてユーザーに知らせる、というわけである。

 というわけで作ってみたのが、サンプルプログラム2のPCDogである
(本当はPc Watch Dog Watcerなのだが、長いので縮めて…)。

 実際に、自分でコンパイルしなおして使う場合は、(WebサーバーがUNIX系マシンである場合)、まず、crontab.txtの要領でpcdog.plを定期的に実行させる。それから、javaファイル、jamファイル中でWebサーバー(web.pe.to)を指定している部分を自分のサーバーのURLに書き換えて使う。

 なお、簡単に試してみたい場合は、前回のサンプルと同じように筆者のWebページからダウンロードできる。http://web.pe.to/~deyamato/iにある「PCDog」がそれだ(記事の公開から3カ月間公開の予定)。
 プログラムをダウンロードすると、1時間おきにサーバーを見に行き、PC Watchが更新されていた場合はチャイムで知らせる。もし、更新されていない場合はそのままプログラムは終了する(更新されている場合も、「終了」が押されなかった場合は、1分間で自動的に終了する)。

 ダウンロード後、使用を止めたい場合には、iアプリの設定で、このプログラムの定時実行を禁止して欲しい。

 当然、iアプリの自動実行をON、ネットワークへの接続をつねに許可しておく必要があり、また、電波が届かないような場合は更新チェックがスキップされてしまうので、必ずしもタイムリーに更新されたことがわかるわけではないが、結構面白い使い方なのではないだろうか。

□サンプルプログラム2のダウンロード
http://pc.watch.impress.co.jp/docs/article/20010223/pcdog.lzh


□参考URL
なつみかん
http://amano.haun.org/natsumican.html
朝日奈アンテナ
http://masshy.fastwave.gr.jp/hina/release/

(2001年2月23日)

[Text by 大和哲]


【PC Watchホームページ】


ウォッチ編集部内PC Watch担当 pc-watch-info@impress.co.jp

Copyright (c) 2001 impress corporation All rights reserved.