WorkPad 用プログラムの組み方(1)

1, 2 , 3 , 4 , 5 , 6 , 7 , Next


Palm/WorkPad(以降 WorkPad) は、 最近 Mobile ユーザーの中で人気中爆発(?)なデバイスである。 Motrola 68000 16MHz をコア MPU として使いつつ、 Windows CE よりも応答性のよい Application を搭載して、 PDA の世界に1つの利用形態を確立している。

WorkPad が人気な理由の一つに、 API がある程度公開されており、 ユーザーが独自のプログラムを開発しやすい、 という点があげられる。

しかし、実はいざプログラムを組もうとすると、 あまりにも通常の計算機と性質が違うことに困惑する。 実際、WorkPad の基本デザインは MacOS のそれ(しかも昔の MacOS) に似ており、それゆえにコンソールなどがないなど、 多くの点でプログラマーに厳しい環境となっている。 GUI は最後に作るものなのに…それを最初に作れと言われるからだ。

そこで、WorkPad 上で動くプログラムを作るために必要な ドキュメントを書くことにした。 が、普通のものを書いたのでは面白くないし、 だいたい私よりも詳細なものを書いている先達がたくさんいる。 というわけですごく癖の強いドキュメントを書くことにした。 人によってはアクの強さに辟易するかも知れないので、 先にそのことをお断りしておく。 無理せずに、もっと良いドキュメントをお読みになることをお勧めする。

このページに、 このドキュメントが前提とする知識、 プログラミングにおける方針などを書いておく。 参考にされたい。


このページの目次


前提とする知識

このドキュメントはいくつかの知識を前提とする。 これらの知識に関しては特に説明しないので、 別途資料を参考にして欲しい。

まず、このドキュメントでは、 主に Windows95/98/NT でのプログラムの開発について述べる。 使うツールとうに関しては、unix と基本的に同じなので、 一部のツールに関してオプション等が異る点を除けば unix においてもほぼ同じ知識が適用できるだろう。 が、 MacOS 上での開発に関しては他の WebPage を参照して欲しい。

使うツールは unix のそれと極めて類似した環境である、 cygwin である。従って、 cygwin で提供されているツールに関する情報は別途自分で調査して欲しい。 cygwin 自身にも manual はある。別途ダウンロードすることが可能だ。 ただし、ほとんどの情報は info フォーマットで提供されるので、 emacs あるいは Windows 版 emacs である Meadow に関する知識も前提となる。 さらに言えば、Perl5 に関する知識もあった方が良かろう。 ちょっとしたツールを作るには、Perl, AWK, Sed などの知識は欠かせない。

O'Reilly をはじめとして、何社もの出版社が本を出している。

これらを参考にすると良いだろう。


ここでは WorkPad 用のプログラムをつくるのに C 言語を使う。 ここでは C 言語に関する説明はしない。 自分で調べて欲しい。

C 言語に関する WebPage は星の数ほどある上に、 大抵のページはどこかしら誤解があるようで、 なかなか良い資料がないのが実情である (別に私が誤解していない、という意味ではない。 ただ、私が「これはおかしい」と判るぐらいおかしい、 という意味だ)。

比較的良い資料として、次の資料をお勧めしたい。 ただし、見れば判る通り、入門書はない。 C 言語ははっきり言って、「言語」としてだけの知識では理解できない。 常に Assembler とペアにして覚えるしかない、と思っていて、 実際いくら入門書を見ても足りないものを感じるのだ。


このドキュメントでは、開発ツールとして gcc を主に使う。 また、assembler としては gas を使う。 gcc 一般に関する話、gas に関する話はしない。 ld, m4, 等についても説明しない。

gcc に関しては GNU C Compiler という本がある。 また、gcc は info ファイルも充実している。

gas に関しては、info ファイルはほとんど充実していない。 gas には M68000 に限らず多くの「半マクロ」状態の ニーモニックがある。 このため、gas はかなりの情報がないと使いこなせないのだが、 残念ながら gas のドキュメントはほとんどない。 というわけで、私もうまく使いこなせていないので、 説明したくてもできないわけだ。

linker である ld, assembler macro m4 … これらに関しては ほとんど定型的な使い方しかしない。 そのほとんどでさえ gcc 経由で起動する。 従って説明できるほど、私自身経験していない。


PC 側のソフトとして、可能な限り perl を使う。 perl で書ききれない場合は c を使うかも知れないが、 基本的には perl, perl5 を使う。

perl のパッケージとしては Active Perl をお勧めしたい。 cygwin パッケージの一部である perl をお勧めしたい。 Active Perl ではなく cygwin にするのは、 そちらの方がCPANパッケージとの相性が良いからだ。 CPANパッケージの一部には、コンパイルが必要なものがあるが、 Active Perl だとVC++を要求するのだ。 その点cygwinであれば付属のgccを使ってくれるので余計な心配は要らない。

perl の参考になる資料は次の 2つがあれば完璧だろう。
プログラミング Perl (2nd Edition)
詳説 正規表現


vi, emacs などのエディターについての説明をしない。

改行コードが適切に処理され、 余計な attribute コードが入らなければ何を使っても良い。 Microsoft Word でもなんでも好きなものを使ってもらって構わない。 新しいものを一つ覚える、という目先の問題を回避するために、 より深いトラブルに捕らえられるとしても、それはあなたの自由だ。

言えることがあるとすれば、 世の Hacker という名のプログラミングに関しては一流の人間が ワードプロセッサーでも、 VisualC++ のような統合環境システムだけでもプログラムを つくらない(少くともそれ以外のものも使える場合は 可能な限り統合環境は使わない)のは、 決して偶然でも、故ない話でもない、ということだ。

前提とする資料・前提とする開発ツール

WorkPad 用のプログラムを作るには、 まず何よりも WorkPad が1台必要になる。 もし、あなたが PalmPilot など過去の OS、 PalmOS3.3 へ更新された デバイス などにも対応しようということになると、 それらをインストールしたデバイスも必要になる。 Palm OS Emulator という WorkPad をソフトウェアエミュレートするソフトもあるが、 どんなソフトでもエミュレートできる、と言うわけではない (赤外線デバイスに対応していないなど)以上、 どうあっても「現物」は1つは必要になる。


次に用意すべきなのは、 すでに出てきた Palm OS Emulator(POSE) である。 デバッガーを起動しやすい、Profile がとれる、 など 100% ソフトウェアで構築されているがゆえのメリットがあり、 一般的なアプリケーションに関してはかなり便利なツールである。

このツールは必ずソースコードも一緒に持ってくること。 ソースコードの中には、PalmOS のシステムコールをエミュレートするために、 内部挙動のかなりの部分をフックしている。 そのため、PalmOS の内部挙動に関する多くの情報が エミュレーターのソースコードには隠れている。 よって、実際にビルドする必要がなくてもソースコードはあった方が良い。

また、ここは定期的に調べることをお勧めする。 様々な errata リストや新しいバージョンがかなりの頻度でリリースされており、 そのたびにどんどん便利になっていっている (正直、去年この機能があれば…と思うようなことが結構ある)。


次に用意する必要があるのは、SDK である。 SDK は開発ツールに関係なく使える。 3com のページ (いや、今はもう Palm Computing なのか?) の Developers Zone からダウンロードできる。

ここでも重要なことがある。
「入手できるすべての バージョンの SDK を手にいれろ」
ということだ。 PalmOS にはアプリケーションから使える API の他に、 system use only と銘打たれている API 群がある。 ところが、実際にはこの API に関する情報がないとプログラムが書けない、 という状態に陥ることが結構ある。 SDK のバージョンによって、header file に書かれていることは微妙に異るので、 そこから API の意味を推察することが可能になるときがある。 よって、SDK は可能な限りのバージョンを入手する必要がある。


SDK と同時に入手が必要なのは、 PalmOS に関するドキュメント類である。 これも 3com のページ の Developers Zone から入手可能である。 これも、バージョンがある。 可能な限りのバージョンを入手することを薦める。理由は SDK と一緒だ。 さらに、HTML 版と pdf 版があるだろうが、 そのそれぞれが微妙にバージョンが異る。 全部手にいれておこう。 英語が読めない?大丈夫。 読まなきゃプログラムなんてどうせ書けないから。

PalmOS バイブル(ISBN4-8222-8051-9) という本が出ている。 これは昔のドキュメントを日本語訳したものである。 これは…あなたが英語が苦手なら買っておきなさい。 いちいち他人に PalmOS の説明をするのが嫌なら買っておきなさい。 英語に全く問題がないのであれば買う必要はない (ちなみに私には必要でした)。

PalmOS に関する 3Com が出しているドキュメントはどれもこれも、
「必要なことが書いてない」
「適切なものが適切なところに書いてない」
の塊のような性質を持っている。 従って、すべてのドキュメントを持っていても、 必要な情報が書いてあるとは限らないし、 必要な情報が書いてあっても発見できるとは限らない。 それでも、ないと困るものである。


Handspring の開発キット がその次に獲得する必要のあるツールである。 ここには gcc をはじめとする道具群がある。 他のところにも PalmOS 用の gcc はあるし、 そこには gcc 2.95 ベースのものもあるが、 ここで提供されているものは設定等がもっと簡単である。 従ってとりあえずここにある開発キットは手にいれておくことを薦める。

当然、ここにあるすべてのドキュメント、gcc ツール等のソース、 Example もすべてとってきておくことを薦める。 残念ながら gcc 自身はよくても、 そこから PalmOS 用のフォーマットに変換するために使うツールは 全くドキュメントが足りない。 よって、ソースコードを必要とし続けるのだ。


他に獲得しておくべきツールとして、 pilot-link ライブラリキットがあげられる。 ここには、pilot-xfer という、 開発にはもう絶対必要なツールのソースコードもある。 このツールキットは Conduit ツールキットと言われるものの free 版だが、 ここに含まれている情報はそれ以上のものがある。

ちなみに Windows 版の pilot-xfer のバイナリだけであれば、 Pilot-XFer Win32 に存在する。 これも獲得しておくことをお勧めする。

前提とするスタンス

これまでの資料や開発ツールの一覧でそろそろ判ってきただろう。

PalmOS のツールはどれもこれも「ドキュメントが足りない」状態にある。 実はこれは、Metrowerks 社の CodeWarrior であっても全く同じである。 CodeWarrior の使い方を示す Help 自体、不完全で不十分である。

実は、PalmOS においてもっとも厄介なのは このドキュメント不足をはじめとする情報不足にある。

PalmOS は PDA としてパフォーマンスよく挙動するために、 通常の PC とは異るアーキテクチャーに従っている。 この性質はシステム全般にわたっている。

ところが、PalmOS は決して天才がデザインし、 Hacker がコーディングしたシステムではない。 そのため、「本来あるべき姿」との間に多くの乖離がある。 PalmOS が圧倒的に良いパフォーマンスで動くのは、 PalmOS が優れているからではなく、 PalmOS の商業的対抗者である WindowsCE があまりにもできが悪いからである。

PalmOS に関する API のいくつもの名前は不適切なものである。 ドキュメントは不完全(というよりも完全にしたくても、 おそらくはコードが悪くてできない)。 そして、標準入出力というプログラミングの基本デザインに置いて 最も重要な機能を欠いている OS の基本コンセプト。 通信用ポートは1つしかなく、それゆえに通信用ソフトをテストしようにも その唯一の口を通信にとられ、リモートデバッガーが動かせない。 通常のプログラミングに必要な おおよそあらゆる道具立てを欠いているのだ。

確かにユーザーにとっては使いやすい構造になっている。 GUI で統一された操作性。 片手に入るサイズと Pen 操作。 スイッチを入れたら即座に起動するシステム (正確にはスイッチを切っても電源が落ちているわけではなく、 単に sleep するだけなのだが)。 これらは User Interface としては優れているのだが、 「これだけしかない」ことがそのまま開発環境としての劣悪さに繋がっている。

必要なドキュメントが不足している。 デバッグに必要なデータ獲得に必要なインターフェースがない。 デバッグ用のログをとるためのインターフェースが貧弱である。 この「データ不足」こそが PalmOS をプログラミングする上で 最も厄介な問題である。

そこで、私はまず、GUI を一切使わない、 通信を一切しないプログラムの作り方から説明を始めよう。 一種のフィルターシステムであれば通信もなく、GUI もなく、 問題の大半を「アルゴリズム」と「実装」のみに制約することができる。 こうして作り上げたプログラムに GUI を追加し、 通信機能を追加していけば問題点を最小に抑えることができる。

GUI を一切使わないプログラムの説明を優先するので、 shared library や デバイスドライバーの作成法、 GLib dynamic library などの作成法を優先する。

肌が合わない人のために

ここまで読んで
「この説明は肌が合わない」
と思った人は多いと思う。 そんな人の中で、それでもここまで読んでくれた人たちのために、 いくつか他の Palm/WorkPad 用プログラム開発に切っても切れない ページを紹介しよう。 実際、その多くは極めて優秀だ。 どうせならこっちを見た方がいいという噂はたくさんある。

http://homepages.enterprise.net/jmarshall/palmos/
正確に言うとここは prc-tools という PalmOS 用の開発環境の WebPage だ。 Handspring のツールは、 ここにおいてあるツールから派生して作ったものが多い。 ただし、ここにはさらに新しいツールがあるので、 チェックするにふさわしいポイントである。 ただし、英語。
http://www.csl.sony.co.jp/person/masui/
増井俊之さんのページ。 ここから『PalmOS の話だけ』を切り出すのは難しいかも知れないが、 どうせ役に立つ情報だから見て損はない。
http://www.cc.rim.or.jp/~egami3/palm/index.html
このポインターは Palm でのソフト開発のページへのリンクですが、 Oracle8 とかいろいろ面白いもんでの開発に関する情報のあるページ。
http://www.tt.rim.or.jp/~naoz-i/pilot/
IWAMA Naozumi さんのページ。 PalmOS はじめの一歩 のページの情報のまとまり具合いは、 とくにツールをインストールする人には都合が良い。
http://www.geocities.co.jp/SiliconValley/7074/pilot2.htm
soda さんのページ。 リソースで遊ぶ、など私とは方向性が180度逆の方向から責めている、 プログラム開発ページ。
http://www.sra.co.jp/people/hoshi/palmos/programming/
ほしさんのページ。 多分、この人のページから手繰るのが、 情報収集においてはもっとも有利ではないかと思われる。
http://www.isaac.cs.berkeley.edu/pilot/
おそらくは Palm の通信もののソフトのソースを探すなら、 ここをおいて他はあるまい、と思えるぐらいパワフルなところ。 こんな貧弱なマシン上で SSL 動かそうとか考えるか?普通…。 はっきり言って、ここはまだ発掘調査が終わっていない。 多分、宝物の宝庫か、ブラックホールだろう。

1, 2 , 3 , 4 , 5 , 6 , 7 , Next

このページに関する コメント、情報、誤りなどの情報がありましたら、 奥山 まで。