第0章 はじめに


はじめに
皆さんこんにちは。この本は、BeOSのアプリケーションプログラミングについて解説したものです。主な読者対象としては、C++言語に関する基本的な知識があり、小さなプログラムなら自分で書いたことがある、という方を想定しています。また、BeOSとはどんなアーキテクチャのOSなのか、あるいはそれで何ができるのかを知りたい方にも、興味を持って読んでもらえる内容を目指しました。

つまり、プログラマとしては中級者以上の方を主な対象にしています。また、プログラムは普段書かないが、ソフトウェア工学に対する知的好奇心は旺盛だ、という方も読者対象に考えています。もしあなたがBeOSに興味があり、雑誌の手短な紹介記事では物足りなく感じているのでしたら、この本は、あなたのためにこそ書かれたものです。

「BeOSってどんなOSなんだ?」それを知りたいのでしたら、百聞は一見に如かず。プログラムを書いて動かしてみましょう。そうすれば、BeOSを肌で感じることができます。あるいは、APIのリファレンスを眺めてみるのも一興です。APIリファレンスには、文字どおりBeOSでできることが全て書かれていますからね。BeOSのAPIリファレンスは、開発環境と一緒にBeOSにバンドルされていますし、またBe社のWebサイトでも公開されています。1998年の秋には日本語訳の書籍も出版されるそうですから、英語は苦手という方でも安心です。

もちろん、僕のような「APIリファレンス・ジャンキー」、いや「OSオタク」でもないかぎり、APIリファレンスを読むのは少々退屈で、骨の折れる仕事です。最初は、プログラミングの入門書を参考にして始めるのがよいでしょう。さいわい、日本では『BeOSプログラミング入門』という本[1]が出版されています。プログラミングに馴染みのない方は、この入門書が助けになるでしょう。また、本書でも第一部の第4章、そして第二部の第5章と第6章を使って、BeOSプログラミングの基礎を解説しています。

さて、この本の主題は、プログラミング入門書やAPIリファレンスではカバーしきれない領域をあつかうことにあります。つまり、「BeOSでは何ができるのか」という問いかけに対して、実例とヒントを与えるのが本書の目的です。一方、プログラミングの入門書では、開発ツールの使い方やAPIの概要と一覧情報など、マニュアルやAPIリファレンスのサブセット的な内容に偏りがちです。もちろん、それはプログラミングの初心者にとっては助けとなる情報なのですけれど、より現実的なプログラミングを行う場合には、もの足りなく感じることが多いものです。実際、その入門書がどんなに良くできていようとも、最終的には、おおもとのマニュアルやAPIリファレンスに目を通さざるを得ないのです。少なくとも、自分自身の力で一からアプリケーションを作ろうとすれば、APIリファレンスに書かれた説明に目を通し、その仕様を正確に理解しておかなければいけません。

とはいえ、APIリファレンスだけで十分かといえば、そうではありません。リファレンスに書かれているのは、個々のAPIに対する詳細な説明であり、いくつかのAPIを組み合わせてアプリケーションを組み上げていくやり方は、リファレンスには書かれていないのです。たとえば、現在動いているアプリケーションを一覧表示するプログラムを書こうとした場合、動作中のアプリケーション一覧を調べるAPIと、リスト表示を行うためのAPIを使います。しかし、APIリファレンスでは、それぞれのAPIは個別に説明されており、両者を組み合わせるやり方というのは説明されていません。本書の役割は、そのような、APIリファレンスには欠けている情報を補うことです。言い換えれば、APIリファレンスを横断し、目的指向の解説を行うのが本書の目的なのです。

第二部の第7章と第8章、および第三部では、それぞれ違う目的で作られた、完成済みのサンプルアプリケーションを使って解説を行います。それぞれの章の冒頭にはプログラミングのテーマが掲げられており、どのような目的でそのサンプルが作られているのかが、一目で分かるようになっています。たとえば第7章では、テーマの一つとして次の項目が挙げられています:

◇動きのある画面表示、つまりアニメーションの描画

ですから、もしあなたがアニメーション表示を行うプログラミング手順を知りたいのであれば、第7章の解説を読んで下さい。アニメーションなんかどうでもいいから、テキストエディタを作りたいという場合は・・・そうですね。冒頭のテーマ一覧だけを見ながら、それぞれの章をとばし読みしてみて下さい。たぶん、第10章あたりで見つかるでしょう。

この本では、「どのようにプログラミングするか」("how to")だけではなく、「何をプログラミングするのか」、つまり"what about"を意識した解説をこころがけました。さらに、プログラムが動く仕組みについての解説も行います。それが、第一部の第2章と第3章です。第2章では、BeOSの内部構造を解説し、他のOSと比べてどのような特徴があるのかを紹介します。第3章では、API内部の仕組、特にBeOSのアプリケーションフレームワークについて解説しています。ここでも、他のOSと比較しながら説明を行っていますので、BeOSが「他とどう違うのか」を理解してもらえるのではないかと思います。同時に、自分が書いているプログラムがどのようにして動くのかということを、システム内部から見た視点で理解してもらうことを狙っています。

また、実際のプログラミングを扱う第5章からは、章末に練習問題を設けています。これは、本文の解説では書き切れなかったことを補足するために設けたものです。読者の皆さんに、もう一歩進んだ内容について考えるヒントを提供することを狙ったものですから、解答は用意していません。一応、問題を作るときに解答を考えてはいますが、本書には掲載していませんので、ご了承下さい。どうしても解答が分からなくて、夜も寝られず睡眠不足になってしまったという場合や、あるいは、設問が間違っており、解答の出しようがないという指摘がある場合には、筆者までご連絡下さい。筆者のメールアドレスはkoga@ftgun.co.jp、またはshkoga@ibm.netです。

ところで、この本を書き始める時に思っていたことが一つあります。それは、新しいOSやテクノロジーが登場した時に、最初に出るタイプとしてありがちな内容にはしたくないということでした。つまり、「こいつはすごいです!」とまくしたてるばかりで、実際のところ、既存のOSやテクノロジーに対し、どのような違いや特長があるのかが全くといっていい程議論されていない本にはしたくなかったのです。また、開発ツールの操作手順や、典型的なアプリケーションのプログラミングを一通り説明しただけで終わる本にもしたくありませんでした。そうではなく、基本から一歩踏み出した先で必要となる情報を与えてくれる本、そしてまた、既存のOSやテクノロジーとの比較論を通じ、端的な解説を与えてくれる本というのが、僕が思い描いていた理想の形なのです。

そう思った背景には、ソフトウェア産業に関する日本の事情があります。新しいOS、新しいテクノロジーが話題に上り、その解説書が出るたびに思うのですが、なぜそれらの多くが、欧米、特にアメリカ合衆国からしか出てこないのでしょう?アメリカ企業の旺盛なマーケティング力で説明をつけることは簡単ですが、けしてそれだけが原因ではないと思うのです。その証拠に、本屋に行って流行技術の「まとも」な解説書を物色すると、いつもいつも、ひっかかってくるのは翻訳書が大半です。もちろん、その技術が生まれた土地だからこそ、解説書も立派なものを出せるのだという見方もできます。しかし、インターネットによる情報公開が日常的なものとなり、地理的な距離が障害とはならない現在にあって、もはやそれは言い訳でしかないと思います。

基盤の技術は輸入するに任せ、表層的な応用技術だけを追いかけていたのでは、その行く末は見えています。それは、解説書についても同です。優れた洋書と、その翻訳書が出るのを待つのではなく、自分自身で内容のしっかりしたものを作り出していくこと。それが、次の世代へ伝えていくべき態度なのではないかと思います。もちろん、この本がその理想に近づけているのかどうか、それは読者の皆さんが判定されることです。遠慮のない批判をお寄せ下さい。筆者としては、この本が少しでも役に立つものに仕上がっていることを、多少の不安に冷や汗をかきながら祈っています。

この本を通じ、あなたがBeOSを面白いOSだと感じられて、そしてBeOSのプログラミングが楽しいことを発見されたとしたら、それが僕にとっては一番嬉しいことです。プログラミングの楽しさに時間を忘れ、いつの間にか夜が明けた空を見ながらキーボードを叩くっていうのも、「たまに」はいいですもんね!

参考文献
[1]「BeOSプログラミング入門」


謝辞
この本を書くうえでお世話になった方々への感謝のことばを、ここに書くことにします。まず、草稿のレビューを快く引き受けていただき、多くの助言を寄せて下さった皆さんには、本当に感謝しています。

木坂 寿宏さん
加藤 ひろまささん
小山 哲志さん
秋田 克彦さん
廣田 Yasuakiさん
伊集 朝秀さん
渡辺 一宏さん
小林 潔さん
ほし たかのりさん
瀬戸川 教彦さん
長田 正彦さん
狩野 正嗣さん
小玉 岳史さん
長井 貴範さん
入野 晃彦さん

上に名前を挙げた方々が、この本の草稿をレビューして下さった皆さんです。どなたからも、有用な助言や励ましの言葉をいただきました。有難うございます。特に、長田さんからは種々のWebサイトに関する情報を教えていただきました。また、ほしさんには、マイクロカーネル技術の解説に対する論点や、C++プログラミングに関して大変参考になる指摘や意見をいただきました。それから、長田さんとほしさん、また小山さん他数名の方からは、初期の草稿に欠けていた部分、特に、BeOSのアプリケーションフレームワークが備えているメッセージ応答機構に対する説明不足を指摘していただきました。この本の第3章は、そのフィードバックがあったからこそ書けたものです。第2章の説明に関しては、初期の草稿で分かりにくい箇所があったのを秋田さんと廣田さんに指摘していただき、改善できたと思います。それから、小林さんにはソケットAPIを始め、UNIXアプリケーションの移植に関わる話題を取り上げてはどうかとの助言をいただきました。第11章の最初のサンプルは、それを反映させたものです。以上、レビューをお願いした方への謝辞とさせていただきます。

また、レビューをお願いした方々以外にも、国内のBeOSユーザ及び開発者向けのメーリングリスト("BeTalk-J"; http://www.gopherwood.com/pub/BeTalk-J/)上での議論を通じ、様々な方から参考になる意見をいただきました。特に、本書の初期の章構成案を公開した際、「もっと基本に関わる章を増やすべき」という助言を下さった柴田文彦さんには、大変感謝しています。当初、出版社からの執筆依頼を受けた時点では、より少ないページ数での企画が上がっていました。そのため、理想とするよりは随分と軽めの構成案を立てていたのですが、柴田さんから助言をいただいたことで、遠慮のない構成案に変更する勇気がわいたのです。そして、そのような機会をつかむことができたのは、BeTalk-Jという素晴しいメーリングリストの存在があればこそでした。BeTalk-Jを運営されている木坂寿宏さんには、草稿のレビューでもお世話になっており、重ねてお礼を申し上げます。

もちろん、この本を書くことができたのは、出版社から声をかけていただいたからこそです。ソフトバンク(株)の編集者、北島万寿代さんには心から感謝しています。当初の予定よりも二か月以上遅れる中で、なかなかできない原稿を辛抱強く待ちながら編集作業をしていただいたお陰で、何とか最後まで原稿を書くことができました。北島さんとは、けっきょく十ヵ月あまりのおつき合いになりました。北島さん、そしてこの本の制作に関わられたスタッフ全員に、この場を借りてお礼を申し上げます。

この先は、プライベートな関係の相手に対する謝辞です。まず、正味七ヵ月もの長期に渡って、この本の原稿執筆に専念する時間を与えてくれた、弊社(株)フォートガニソンのスタッフ全員には、非常に感謝しています。本当に有難うございました。それから、(株)ビー・ユー・ジー在籍時の上司と先輩、なかでも、エンジニアとしての夢の見方を教えてくれた、現メトロワークス(株)の植田省司さん、そしてプログラミングからプロジェクトの立案まで、仕事のやり方を教えて下さった佐藤敏彦さんには、大変感謝しています。また、できの悪い後輩に、格好いいプログラマとはどんなものかを教えてくれた、服部貴志さんにも感謝しています。今度飲みに行きましょうね!

また、原稿執筆で火照った頭と、アンバランスに疲れた体を休めさせてくれた札幌の素敵な店にも、感謝の気持ちを贈ります。"Jack Rabbit", "Voo Doo Dance", "Miss Jamaica", "MOJO", "Low Down", そして「一番」。僕にとって、本を書くというのは大変なパワーを消費する作業でした。原稿の中にパワーを放出し、空っぽになってしまいそうになった時、これらの店には、随分と励まされたように思います。有難うございました。これからも宜しく!

最後に。

この本を、僕の二人の母親と、そして父に捧げます。


古賀信哉
(株)フォートガニソン 開発本部長


Art of BeOS Programming
koga@stprec.co.jp