題名:Java Diary-22章

五郎の入り口に戻る

日付:2000/4/16

目次に戻る


FleetCommander

さて、Ver0.72をリリースした後、いくつか「こんな機能はいかがでしょうか」というメールをもらって、それらのうち、簡単にできそうな機能はばりばりと追加した。例によって例のごとく「ミススペルがあるよ」という指摘をフランスのドメインにいるユーザーからもらったりもしたのだが。

さて、そうしているときに、数ヶ月前隅においやったはずの考えが妙な勢いで頭をもたげてきた。

私と同じくらいの年頃の人で、当時今ほどは全く一般的でなかったパソコンなるものを(当時の雑誌を観ると「パーコン」なる呼び方も存在していたようだが)使った人間には共通の思い出があると思う。当時パソコンと言えばNECのPC-8001かSharpのMZ-80シリーズであり、記憶容量は32KBとかいう大きさっただ。そして利用できた補助記憶装置とはカセットテープだったのだ。

さて、これまた今では考えられないことだが、当時雑誌にはプログラムが「掲載」されていた。この「掲載」とは間違っても付属のCD-ROMにプログラムが収録されている、ということではない。文字通りすべてのリストが掲載されていて、それを一行一行入力していく、ということを当然のごとく行っていたのである。

この話を始めると当時の「若者は誰も聞かない苦労話」はつきないのだが、それは別の機会に書くとして、そうした(今からみれば)異常な環境下でのプログラムであっても人気を博したものがいくつか存在していた。そのうちの一つにシミュレーションゲーム「Fleet Commander」というものがあった。

これはきわめてシンプルはウォーゲームであるが、雑誌を読んだり、掲示板を読んだりするとこのプログラムを「打ち込んで」遊んでみて、またあれこれ改造などをして(プログラムはBASICで書かれていたから改造は可能だった)プログラムの道にはまりこんだ人もいるようだ。そして思えば私もその一人だったかもしれない。

さて、かくのとおり人々の記憶の底に残っているプログラムである。そしてJavaでプログラムを書いていると「あのプログラムをJavaで書き直せないか」という考えが突発的に浮かぶことがある。

最初にこの考えが浮かんだのがいつであったか覚えていない。機能は制限されたものだから作るのはそう難しくないだろう。リストを手に入れればたぶん解読できるだろう(と当時は思っていた)となればJavaで書き直すことはできるはずなのだが、問題はそのリストだ。私はそのプログラムが月刊ASCIIに掲載されたことは知っていたが、何年の何月号であるかは知らなかったのである。

一時どこかの掲示板に「Fleet CommanderをJavaで書き直すことを考えています。もしリストをお持ちのかたはご連絡ください」と書いたような気もするが、当然のことながら反応はなかった。となれば自分で手に入れるしかないのだが、どうしたものか。ということでそれまではいつも挫折していたのである。

 

さて、そこに再び私に訪れた「企業内失業者」の立場である。しばらく私はインターネットで遊んでいるしかない状態に陥った。そうするといろいろな雑念が頭にわき起こるが、その中の一つにこの「Fleet Commander復活計画」があったのである。

そんなことをつれづれと考えながら、インターネットで検索を書けてみる。するといくつかのページがヒットすることがわかる。その中にこのプログラムがいつ掲載されたかを示した物があった。しめたしめた。

ついでにこのプログラムの作者の名前も掲載されいている。もしや、と思ってその名前で検索をかけてみると別のホームページがヒットした。この作者が作っていると思われるページである。なるほど。20年たったいまでも彼はプログラムにいそしんでいるわけだ。

しばらくの間、「この人にメールを書けばリストが手にはいるのではないか」と思ってみたが、どう考えても面倒を相手に頼むことになるので気が進まない。そのうち「国会図書館なるところに行けばいいではないか」と思い始めた。考えてみれば私はいま首都圏に住んでいるのだ。電車にのってちょっと行けば国会図書館にいけるはずではないか。そして日本で発行された本はその多くが国会図書館に存在しているはずだ。私が必要なのはリストのコピーだけだから図書館で閲覧し、複写すればそれで問題解決である。

そう考えると、今度は国会図書館のサイトにアクセスだ。利用方法などあれこれ調べてみると好運なことに今週の土曜日はどうやら月に二回の「開館している土曜日」のようだ。となると結論は明白である。

 

四月一五日の土曜日、私は小雨のふる中、地下鉄永田町の出口からでて小走りに国会図書館に向かっていた。

国会図書館に向かうのはおそらく一八年ぶりである。大学のとき一時ミニコミ誌のサークルに在籍していた私は妙な理由から国会図書館で雑誌記事を調べようとしたことがあったのである。そのミニコミ誌では毎月特集を組んでいたが、その次の号では「ナンパ特集」をやることになっていた。そして「ナンパの方法」特集がどっかの雑誌にあったのではないか、と言われ

「では私が」

とのこのこ調べにいったのである。

さて、雑誌を閲覧できるコーナーに行ってみたのだが、そこには「ゼロ禁本」なる言葉が掲げられていた。どうやら雑誌の類はゼロ日、つまり閲覧を申請した当日は読むことができないらしいのである。後日読みにこなくてはいけないらしい。これでは雑誌を山のようにかかえてかたっぱしから調べる、ということは難しいではないか。だいたいその「ナンパの方法」がどの雑誌にのっていたかも定かではなかったのである。

それでも当てずっぽうで何冊かの雑誌を申請し、後日読みにいったがやはり全部はずれであった。しょうがないからそのときの特集は手元の雑誌にのっていた「合コンの技特集」でもって乗り切った覚えがある。

 

もしあの「ゼロ禁本」なる制度がいきているといやだな思う。しかしインターネット上で検索した限りではそうした制限は記述されていない。もうあれから二〇年近い歳月が経過したのだ。となればシステムが変わっていても不思議ではない。

ようやく図書館につくときょろきょろする。雑誌はどうやら他の本とは別の場所で閲覧のようだ。そちらの建物にはいるとまたきょろきょろする。どうやら鞄の類はすべてロッカーに亜づけなくてはいけないらしい。私はボールペンだけもって荷物をロッカーに放り込んだ。もっとも後で気がついたことだが、荷物を持ち込もうと思えば透明のビニール袋にいれておけばよかったようだ。

入館の時にカードを渡される。これは何だ?と思いながらもまたうろうろして雑誌の閲覧を希望するカウンターらしきところに向かう。どうやら申請書の類を書かなくてはいけないようだ。どうやって書いた物やら、と思うとそこらへんに検索用の端末が置かれていることに気がつく。あれこれやって検索すると目的の雑誌は見つかった。次に申請書を書かなくちゃ、、と思ってどこに紙があるんだ?と思ったらボタンを押して機械からとりだす方式だった。

ようやく記述して、カードといっしょにカウンターに提出する。こうしたところで「ここが抜けてます」と言われるのは私の得意技(というかいつものこと)なのだが、このときはすんなり受理された。そこでどうするんだろう、と思っていたら、カウンターの前にたくさん椅子がならんで人々が座っている。たぶんここで待っていると前の掲示板にカード番号が表示されて雑誌がうけとれるのだろう。どうやら「ゼロ禁本」の呪縛からは逃れられたようだ。

とはいってもここでどの程度まてば良いのか見当がつかない。カウンターの中で働いている人を観てみると結構てきぱきと本をこなしているようだからそう遠くない未来に本が受け取れるのかもしれない。どっちにしても他にすることもないからそこに座ってぼーっとしていた。雑誌を借りようとしている人たちをみていると、色々な人たちがいるきがする。それぞれに雑誌を閲覧する理由はあるのだろうが、私には想像もつかない。

 

そうこうしている間に私のカードの番号が表示された。カウンターに行ってみると固い表紙がついた本を渡してくれた。開いてみれば懐かしいあの雑誌である。私はにたっと笑うと手近の机に座って本を開き始めた。

 

中の雑誌をみればまさしく「ビンゴ」である。表紙には「シミュレーションゲーム特集」と書いてあり、ページをめくればなつかしの「Fleet Commander」がのっている。そこでぱらぱらと読みながら活字がやたらと小さいのに気がつきだした。おまけにそのプログラムは確かにBASICなのだが、CとかJavaになれた(あるいはVisual BASICもだが)身からすると

「なんだこのやたらと詰め込まれた文字列は?」

と思ったりする。

しばらく感慨にふけりながら中を読みたい衝動に駆られたが、それはとりあえず後回し。一つ階を降りると今度は「複写コーナー」に向かう。前の雑誌かり出しでだいたい要領はわかっていたので、今度も申請書を書いてカウンターに提出だ。ここは「現在の待ち時間は約一〇分」とでているから「いつまでまつのやら」という疑心暗鬼にならずにすむ。ぼーっと椅子に座っていると私の番号の複写ができたらしい。カウンターの中に座っているのは若い女性達だが、見事なくらい愛想を振りまかず機械的に事務をこなしている。私は礼をいってコピーと雑誌をうけとった。これで本来の目的は達成された。あとは昔をなつかしながら雑誌でも読んでみるか。

 

椅子に座ってぱらぱらとページをめくる。今はパソコンは基本的に二種類しか存在していない。PCとMacintoshだ。しかし当時はとてもたくさんのパソコンが存在していた。TRS-80, VIC,BASIC Master Level 3, PC-8001,それにMZ-80シリーズ。それらの広告を観ていると互換性だのなんだのが全くない機種同士が競い合っていたあの時代をふと思い出したりする。

記事を観れば、この時期のパソコン雑誌というのはハードの作成記事から、パソコン雑誌ににつかわしくないようだシミュレーション関連の軍事記事のようなものまで、ずいぶんとバラエティに富んでいたことが解る。最近の「何がお買い得」とかいうばかりの記事とは大違いだ。

思うに当時のパソコンは人々が「こんなことがあるのではないか」と夢を広げるのに十分なほど何もできない未成熟な製品だったのではなかろうか。ハードの制作に凝ろうと思えばそれも可能。あれこれ用途に夢をはせようと思えばそれも可能。そしてそう考えながらなかなかうまくいかないカセットテープと格闘していた、というのが当時の図式ではなかったか。

ある製品が成熟するに従って観ることができる夢の範囲が狭まってくるのはいたしかたがないことだ。しかしパソコンはその狭まり方がまだ少ないような気がする。一時はMicro$oftのビジネスアプリケーションとゲームプログラム実行だけがパソコンの役目と思えたこともあったが、インターネットの普及はその地平線をまた広げてみせた。最近その広がりにも少しかげりが見えるが、この後がどうなるかは私の知るところではない。

 

そんなことを思いながら雑誌を読み終えると喫茶店に向かう。なぜだかわからないが私はここの喫茶店でランチを食べたい、という欲求にかられていたからである。おそらくまずいだろうが、しかしそれがまずければまずいほど話のネタになるではないか。

さっそく腰を下ろすが、ランチはまだのようである。一〇分ほど早かったようだ。しょうがないからホットドックなど食べて出ようかと思ったらちょうど良い時間になったようだ。ランチを追加で頼む。「ロールパンとライスとございますが」と聞かれて「ライス」と答える。私は日本の白いお米が大好きだ。

まつことしばらく、そしてでてきたものは十分「話のネタ」になるようなしろものだった。

一つの皿と一つのカップにスープらしきものがはいっている。皿の上には刻みキャベツ、小さいコロッケ。ちいさいポテトサラダのかたまり、それにご飯がのっている。そして山のような形にもられたご飯の頂上には赤い梅干しが埋め込まれている。これがランチなのだ。なんとなく栄養のバランスはとれているような気がするが、何をおかずとしてこのご飯を食べればいいのだろう。

しょうがない、と私はコロッケにやたらとソースをかけだした。そしてついてきたのはフォークと小さなバターナイフのようなナイフである。これでどうやってご飯を食べろというのだろう?そしてコロッケは不思議なことに大変ねばりがあって、フォークで容易に分解する事ができないのである。

ようやくその皿をかたずけるとカップの中のスープにとりかかる。油がたくさん浮いているのがわかるが、味はほとんどない。コンソメをお湯でといてももう少し味があるのではないかと思うほどだ。確かに話のネタにはなるが、二度食べようとは思わない。私はそうそうにそこを後にした。

 

行きは地下鉄で来たが、帰りはバスにした。時刻表をみて「あと一〇分でくるや」と思ったのだが、今日が土曜日であることをすっかり忘れていた。結局三〇分近く小雨の中で待ったあげく、バスに乗り込んだ。そしてさっき手にいれたばかりのコピーを眺めだした。

いくつかのスクリーンショットが載っている。確かに昔の記憶の通りのプログラムだ。しかしプログラムリストを眺めだした私は揺れが激しいバスのなかでこの細かい文字を追うことは不可能だと気がついた。そしてリストをしまったのである。ここでリストをしまったのにはもう一つ訳があったのだが。

 

安らかに家に帰るとさっそくプログラムを作り始める。まずは画面からだ。当時のPC-8001は横160,縦100の解像度だった。となればまずそれをシミュレートする画面から作り始めなくてはならない。たとえば昔の一ドットを4×4ドットでシミュレートすれば、640×400となる。最近のコンピュータの解像度は最低が640×480だ。どこで縦が400から480になったかは私の知るところではない。などと考えながら、やることはわかっているが、いつも新しいプログラムを作るときはこの「土台」ができるまでは結構面倒だ。

さて、土台はできた。これからN-BASICをJavaに移し替えるという作業に取りかからなくてはならない。そしてさっきバスの中で読むのをあきらめたリストをみた私はしばらくしてからため息をついた。

これは一体なんなんだ。

プログラムはすべて大文字でかかれている。それだけでも読みづらいのに、恐ろしいことに予約されたキーワード(FORとかNEXT)と変数の間に空白が置かれていない。予約語を思い出しながら頭のなかで分解するしか変数を認識する方法はない。おまけに変数名は最大で二文字しかないから、ここの変数が何を表しているかは全く不明だ。幸いなことにコピーした記事には変数表もついているが、この変数表とリストをいきつもどりつして読むのはとても苦痛だ。

それにCとかJavaであれば、プログラムにはやたらと空白が大きくなる。場合によっては

”{”

ひとつが一行に書いてあったりする。ところがこの時代のBASICのある行はこんな感じだ

100 IF K=0 TEHN FORN=1TO100:FORE=0TO10:PRINT E(N,E):NEXT E:NEXT N ELSE GOSUB105

配列らしきE(N,E)とループの添え字であるEがいっしょだが、どうやらこうしたことも許されていたようである。構造化プログラミングどころか字下げなどは影も形もなく、上の行のように一行に二つのループがはいっていることなど当たり前のように行われている。そういえば、一行にコロンでくぎって複数の文が記述できることはN-BASICの特徴のように言われていたこともあったな、、ある本によれば「邪悪なCプログラムコンテスト」なる「読みにくいCのプログラムの技を競う」というコンテストが存在するそうである。しかしこのプログラムはどこをみても、このコンテストで「敢闘賞」をとれるようなシロモノである。

 

そうした驚きを乗り越え、なんとかプログラムを解読しようとするが、なかなか進まない。画面を記述している文と、モデルを計算している文が混然一体となっているのも私にとっては虫ずがはしるような事態だ。おまけにこのプログラムは末尾についている「Data文」をいじればあれこれの違った設定が楽しめます、と書いてあるのだが、プログラム中で堂々とData文に書いてあるのと同じデータを定数として記述しているところもあるから、それだけでは済むまい。

すべての変数はGlobal変数だから、どこでどう使われているかに常に気を使っている必要がある。しかし当時にはエディタなどというものも存在していなかったから、プログラム中で特定の文字列-たとえば変数名-を検索するなどということもできなかった。そして当然のごとくデバッガなるものも存在しなかったのである。何かおかしな事がおこったときのデバッグはどうやっていたのであろうか。

 

しばらくの間リストを眺めた私はひっくりかえった。何故こんな方法で動作するプログラムが記述できたのだろう。「本当のプログラマーはPascalを使わない」という有名な論文が存在する。その中には「本当のプログラマーは非人間的になることも恐れない」とあったが、確かに当時は「本当のプログラマー」が生きていた時代だったのかもしれない。

 

昔を思い出し、そして「本当のプログラマー」たちに思いをはせながら、私の「Fleet Commander Java化計画」は細々と続いている。最初は結構簡単に移植できると思っていたのだが、なかなかそうも行かないようだ。今のところこのプログラムが日の目をみるかどうかは今ひとつわからない。仮に完成したとしても最終的に世の中に公開するにはアスキー編集部の許可を得る、という問題も存在しているのだが。

 

次の章


注釈

 合コンの技特集:この記事を参照して、実際に合コン体験記を書いた男がいた。もっとも記事じたいは妙な小物の宣伝などが多くあまり参考にならなかったようだが。

私はダンパ体験記を執筆した。それが「俺達に友情はない」である。本文に戻る

ある本:Life with UNIXである。(参考文献一覧本文に戻る