|
この連載で説明していくのは,ウィルコムの携帯端末「W-ZERO3」(OS:Windows Mobile 5.0)で動作する超小型BASICインタプリタ「ワンべぇWM(Windows Mobile)」と,それを開発する過程で遭遇した様々な技術トピックである。ワンべぇWMは,8ビット・パソコン時代のBASICインタプリタに似た構造を持ち,W-ZERO3単体でプログラムの作成,実行,デバッグを可能とする開発環境である。これは8ビット・パソコン時代を経験した人達には,ワクワク興奮した昔を思い出させるものかもしれない(図1)。
|
|
図1●ワンべぇWMのサンプル・プログラム。 (a)対称位置に点を打つカレイドスコープ |
|
|
図1●ワンべぇWMのサンプル・プログラム。 (b)目の前で迷路ができていく迷路作成 |
|
|
図1●ワンべぇWMのサンプル・プログラム。 (c)往年のSTAR TREK風ゲーム「STAR WITCH」 [画像のクリックで拡大表示] |
また,ワンべぇWMはいくつかの理由からC(一部C++)によって開発されているため,この連載はCによるW-ZERO3(またはWindows Mobile)開発テクニックの解説という側面を持つ。これは,Win32 APIを直接呼び出す生APIプログラミングの世界である。
|
Cの価値・BASICの価値
筆者が,Cで記述されたBASICインタプリタを作った理由は,極論すれば一つしかない。それが自分にとって面白い作業だったから。
言うまでもなく,筆者の本質はホビイストである。プロフェッショナルではなく,「セミプロの領域に足を踏み入れているホビイスト」である(筆者はプロフェッショナルとして仕事をすることもあるが,この件に関して完全にはホビイストである)。
だが,面白さの追求の過程で,様々な価値が生み出されたことも,また事実である。そもそも,ワンべぇWMがCで書かれている理由は二つある。一つは,ワンべぇWMの原点となるワンべぇ(WonderWitch用BASICインタプリタ)をCで書いたこと。もう一つは,より低レベルの言語を使うことで消費するリソースを節約するためだ。
実装された言語がBASICであるという理由も,リソースの節約という目的にある。低レベルで効率は良くないが,開発環境一式を極めてコンパクトに実現できるという点で,古典的なTiny BASICは非常に優れている。
そのような観点から見れば,あえて「プロならば作らないであろう非効率的なプログラム」を作ることで得られた価値は明らかだろう。開発のやり方は非効率でも,実はリソース節約という点では効率アップされているのである。
リソースが極めて限定されたW-ZERO3のようなデバイスでは,切実な必要性が薄いプログラムを常に入れておくゆとりは少ない。コンパクトなワンべぇWMは,それを可能とするわけである。
では,メモリーの片隅にワンべぇWMを常に入れておくと何ができるのだろうか。
いつでもどこでも,プログラミングが可能になるだろう。思いついたときに,すぐプログラムを作り,その場で実行可能となる。
例えば,宴会に出かける電車の中で,ふと仲間内でしか通じないネタを題材にしたプログラムを思いついたとしよう。難しいものである必要はない。
いつも「何歳に見える?」と質問して,「17」と答えないと「本当は17歳なの!」と言い出す仲間がいるとすれば,数字を入力させて17以外ならそのようなメッセージを出力するプログラムを作ることができる。
10 a=input("何歳に見える?")
20 if a <> 17 then print "本当は17歳なの!":goto 10
30 print "うふふ。ありがとう"
40 goto 10
慣れていれば,10分で作れるだろう(図2)。それで一発ウケを取って,宴会が盛り上がれば「盛り上げツールとして十分な実用性があった」とみなしうる。
|
|
図2●リスト1の実行結果。部外者には何が面白いのかわからないが,身内に受ければOK! [画像のクリックで拡大表示] |
W-ZERO3+ワンべぇWMとは,そのような場面で強力なツールとなる。そして,そのような使い方は,プロ用のツールが見落としがちの使い方と言える。たいていの場合,プロ用のツールは大きく複雑なプログラムの開発を支援することを主目的にしていて,小さなプログラムへの支援にはあまり力を入れていないように見える。
ちなみに(複雑さに関して余談を書くなら),オブジェクト指向プログラミングとは本来システムの過剰な複雑さに対処するために要請された技術であり,複雑ではないシステムでは必ずしも必要ないものである。電車の中で作ることができる,せいぜい数十行規模のプログラムであれば,問題となるような複雑さは通常発生しない。つまり,オブジェクト指向プログラミングは必須とは言えないのであり,実際に開発していて不便を感じたことはなかった。
追体験しうる面白さ
要約すれば「私が面白かった話」をこれから語っていくのであるが,実は,ここにもう一つ,ホビイストが自己満足を脱して公共性を獲得する方法がある。自分が面白かったことを語り,それによって感性の近い人たちに「面白い話だ」と思わせることができれば,もはや自己満足ではない。たとえ共感する者が少人数であろうと,それはコミュニケーションに昇華するのである。
それに加えてもう一つ価値を付け加えたいと思う。それは,追体験を容易に可能とすることである。
ワンべぇWMは,VGA解像度のWindows Mobile 5.0 for Pocket PC(つまりW-ZERO3)を主な動作環境として想定して開発されている。しかし,これを実行するためにW-ZERO3を買う必要はない。デバイスのエミュレータがあるので,一般のパソコン上で実行してみることが可能なのだ。
ただし,あくまで開発用という位置付けであるため,以下のソフトウエアが必須となっている。
Visual Studio 2005 Standard, Professional, and Team Suite Editions
残念ながら,無償のExpress Editionは含まれていない。
このほかに必要とされるソフトウエアは以下の通りである。これらはダウンロードしてインストールすれば良い。
Windows Mobile 5.0 SDK for Pocket PC
これに,デバイスのエミュレータ本体が含まれている。英語版ではあるが,後で説明する日本語のエミュレータ・イメージを組み込めば日本語版のOSが起動するので問題はない。
なお,これを利用できるOSは,Windows Server 2003 Service Pack1およびWindows XPとなっているが,Windows Vistaでも一応動作している。
デバイス・エミュレータを含むデバイスとの通信には,ActiveSyncというソフトウエアが必要とされる。
ただしWindows Vistaには,これに相当する機能が最初から含まれているため,必要ではない。
最後に,忘れずに日本語版のOSイメージをインストールしておこう。以下に各国語版のOSイメージが用意されている。
Windows Mobile 5.0 PocketPC Localized Emulator Image
この中から間違えずに,JPNの3文字を含む「Windows Mobile 5.0 Emulator Images for Pocket PC - JPN.msi」を入手し,インストールしよう。
デバイス・エミュレータの起動
インストールがすべて終了したら,Visual Studio(VS)を開く。まず,デバイス・エミュレータを起動するためのダミーのプロジェクトを作ろう。[ファイル]→[新規作成]→[プロジェクト]とメニューを選び,どれでも良いので「スマート デバイス」の実行ファイルのプロジェクトを選ぶ。ここでは,Visual C++の下の「スマート デバイス」に含まれる「Win32 スマートデバイス プロジェクト」を選んでみよう(図3)。
|
|
図3●スマートデバイスのプロジェクトならどれでも良いが,ここでは「Win32 スマートデバイス プロジェクト」を選択した(これはワンべぇWMの作成に使用したテンプレート)。 [画像のクリックで拡大表示] |
しかし,プロジェクトを作成してもまだエミュレータを起動することはできない。はやる心を抑えつつ,最後に一つだけ設定を行おう。
[プロジェクト]→[プロパティ]とメニューを操作し,プロパティ・ダイアログを出す。そして,構成プロパティの下の「配置」を選ぶ。すると,右側に「配置デバイス」という項目が見えるので,これを“JPN Windows Mobile 5.0 Pocket PC VGA Emulator”に変更してOKボタンをクリックしよう(図4)。これが,比較的W-ZERO3に良く似た条件のエミュレータとなる。
|
|
図4●配置デバイスを“JPN Windows Mobile 5.0 Pocket PC VGA Emulator”に変更 [画像のクリックで拡大表示] |
なお,ここはまぎらわしい名前が多いので注意しよう。先頭にJPNの3文字がないものは英語版なので日本語フォントが入っていない。つまり,日本語文字が正しく表示できない。VGAの文字が入っていないものは,QVGA解像度なので表示ピクセル数が少ない。Squareの文字が入ったものは,縦横が同じピクセル数でランドスケープとポートレイトの切り替えに意味がないものである。
さあ,これで準備が終わった。F5キーを押して実行を開始しよう。
少し待たされる(初回起動時はかなり待たされる)が,真っ白の画面が表示されれば成功である。そのまま,画面左下のOKをクリックして終了させよう(図5)。
|
|
図5●実行して真っ白の画面が表示されれば成功。そのまま画面左下のOKをクリックする |
この状態で,デバイス・エミュレータは完全にVSから解放され,使い放題の状態になる(図6)。ここからが本番だ。
|
|
図6●デバイス・エミュレータがVSから解放されて使い放題の状態になる。ここからが本番だ! |
とりあえず,ワンべぇWMのインストールCABファイルを以下のURLより入手しよう(同じページからZIPファイルを入手するとワンべぇWMのソースコードも入っている。いきなりそちらに挑戦したい人はそれでも良い)。
http://www.piedey.co.jp/softs/wonbeWM001.html
入手したCABファイルを,デバイス・エミュレータから操作可能にしよう。デバイス・エミュレータのウィンドウのメニューを操作する。[ファイル]→[構成]と選び,「共有フォルダ」のフィールドに,CABファイルをダウンロードしたディレクトリ名を書き込み,OKをクリックする(図7)。
|
|
図7●CABファイルのあるディレクトリを共有フォルダに設定 [画像のクリックで拡大表示] |
これで,仮想的なスマートデバイスとして,そのディレクトリが認識されたことになる。仮想デバイスの画面左上のWindowsのマークをクリックし,ファイル・エクスプローラを選ぼう。これを使って,「マイデバイス」の下の「Storage Card」の下を見ると,CABファイルが見えるはずである。これをクリックすると,ワンべぇWMがインストールされる。
途中でデバイスとStorage Cardのどちらにインストールするかを選択する画面になる(図8)。ここはデバイスを推奨しておく。一部ファイルは,いずれにしてもデバイス側の「マイドキュメント」の下に入るからだ。
|
|
図8●ワンべぇWMのインストール先を選択する画面。「デバイス」を推奨 |
インストールが完了したら,いよいよワンべぇWMを使用できる。仮想デバイスの画面左上のWindowsのマークをクリックすると,「wonbeWM」の名前が見つかるはずだ(図9)。見つからない場合はこのメニューの中の「プログラム」を選ぶ。
|
|
図9●インストールが完了すれば,メニューに「wonbeWM」が登録される。見つからない場合は「プログラム」を選ぶ |
永遠の17歳を作ろう
では,wonbeWMをクリックし,さっそくワンべぇWMを開こう(図10)。ワンべぇWMの基本操作は1行入力してEnterキーを押すことにある。このとき,先頭に行番号と呼ぶ番号を入れるとプログラムの編集機能が動作し,入れないと命令を直接実行する。
|
|
図10●ワンべぇWM,利用OK!な状態 |
例えば,以下は直接実行の例である。
| |||
| |||
|
print 3-2
printは引数の値を出力するステートメントで,「3-2」は整数の引き算を行う式である。これを実行すると,即座に1という結果が表示される(図11)。一方,
10 print 3-2
のように行番号として10という数字を付けて入力してみると,Enterキーを押しても結果は出ない。
これは,この1行がプログラムとしてメモリーに記憶されたことを意味する。このあと,「run」(プログラムを実行する命令)と入力してEnterキーを押す(以降は+Enterと表記)と,記憶されたプログラムが実行され,結果が表示される。メモリー上に記憶されたプログラムは,run+Enterを入力すれば,何回でも同じ結果を出してくれる(図12)。
メモリーに記憶されているプログラムを見るには,listステートメントを使う。list+Enterと入力すれば,メモリー上にあるプログラムがリストされる(図13)。
ちなみに,行番号を変えれば何行でもプログラムを書き込める。実行すると,行番号の順番に実行される。同じ行番号で新しい行を入力すれば行の差し替え(上書き)となり,行番号だけ入力してEnterキーを押すと行の削除となる。とてもシンプルな編集機能なので,すぐに理解できると思う(効率は悪くても単純ですぐ理解できるのがワンべぇWMの長所といえる)。
もう一つ,スクリーン・エディタの機能についても説明しておこう。矢印キーを使って,すでに入力した行にカーソルを移動させ,内容を書き換えてから(あるいは書き換えずに)Enterキーを押すと,その行をもう一度動作させることができる。例えば,同じステートメントを何回も実行したい場合や,入力したプログラムの行を訂正する場合に便利な機能である。
listコマンドで表示した行を書き換えることも可能だ。これは絶対に便利なので,覚えておくと良いだろう。
プログラムの入力と実行方法をマスターしたら,いよいよ「永遠の17歳」プログラムを作ろう!
new+Enterというキーを押すと,メモリー上のプログラムはクリアされる。あとは,リスト1に書かれた4行を順番に入力していくだけである(行番号の入っていない行は単なる説明文なので,入力する必要はない)。
| |
リスト1●「何歳に見える?」と質問して,17歳と答えないと訂正されるプログラム |
入力を終えたら,listステートメントで入力ミスがないかを確認しよう(図14)。このあと,画面右下のMENUをクリックし,[File]→[Save As]と選んで「永遠の17歳」プログラムをファイルに保存しておこう。
|
|
図14●プログラムを入力し終えたら,listステートメントで確認 |
あとはrun+Enterキーで実行するだけである。え,実行しても面白くない?
それは当然だ。これはあなたが知らない誰かにとって面白いプログラムなのだから。だから,あなたの身内にしか通用しないネタを使って,同じような短い一発ネタプログラムを書くのである。それはきっと面白い体験になるだろう!
次回予告
ワンべぇWMを使うのも面白のだが,ワンべぇWMのソースを見ることも面白い。次回からは,この連載の主テーマとして,ワンべぇWMのソースを見ながら,Windows MobileでWin32 APIプログラミングを行う際の様々な特徴,興味深い点,凶悪な罠,そしてそれを通して得られる楽しいことや有益な価値について見ていくことにしよう。
次回のテーマは特に「生APIプログラミングの魅力」である。APIプログラミングは,一部に熱心な愛好者を持つ。それをWindows Mobileで実践することの価値と難しさとは果たして何だろうか?