以前の「エンジニア今昔座談会」や「JavaScriptエンジニアリングの実践史」でも登場いただいた北條さんを、今回もお呼びしました。
北條さんは、グロースエクスパートナーズにおけるテクニカルフェローかつ最古参エンジニアの一人です。「母国語はC++」と自認しつつ、JavaScriptも大好きと公言され、Emacsはかれこれ30年来の相棒、ハードウェアにも明るい——そんな方です。
今回は社内イベントで話してもらった「コンピュータ遍歴」がテーマです。1970年生まれ、今年56歳になる北條さん。MS BASIC からはじまり、Z80 アセンブラ、UNIX 系 OS、Emacs・・。コンピュータとの付き合い方の変遷を、ざっくばらんに語ってもらいました。
この記事では、イベントで話された各時代のエピソードの一部を紹介します。
最初の環境は電気屋の店頭
北條さんのコンピュータ遍歴の始まりは、10歳ごろ。電気屋の店頭に展示されていたパソコンで MS BASIC を触っていたといいます。
当時のパソコンは高価なうえ、店員ですら「何に使うのかよく分からない機械」として電気屋に展示されていた時代でした。最初は店員に怪訝な顔をされながらも通い続けるうちに店員さんと顔なじみになり、最終的には北條少年用のフロッピーディスクを1枚もらって、書いたコードを保存できるようにしてくれたとのことです。
後日談として、その店員さんはお店の社長の息子さんで、その後ちゃんと社長になっていたそうです。
参加者から「Winny の金子さんの映画でも同じ光景がありましたね、電気屋でゲームを作ってそのままにしておいてもらう、みたいな」という話が出ると、北條さんも「当時は割と、日本中でそういう風景が見られたと思います」と頷いていました。
デパートの催事場も遊び場だったそうで、池袋の西武百貨店には触り放題の状態でパソコンが大量に並んでいたといいます。近所の悪ガキどもがわらわら集まってきて、BASIC が起動しているパソコンを操作し、画面を左右反転の鏡像状態にしてそのまま帰る——そういう悪ガキたちの腕自慢が流行っていたそうです。
後日、こんな補足コメントも届きました。
縄張りの店が何店舗かあるんだけれど、他のオタク少年と若干縄張りがかぶっててね。先客がいると「チッ」って感じで、了見の狭い子供でした(笑)
電気屋や百貨店の催事場が、情報と仲間が集まる場所でもあった――そんな時代のリアルな光景です。
背景として、当時のまともなコンピュータは25〜30万円台、高いものだと40万円台。北條さんいわく「当時は物価が安いから、今の感覚だと100万円超えですよ。小学生におもちゃで買い与えるものじゃない」。だから電気屋の店頭で覚えるしかなかった、というのが当時の子どもたちの共通事情だったようです。
ストレージ事情も似たような状況でした。参加者から「その頃ってもうフロッピーだったんですか? カセットテープの話も聞いたことがあって」という質問が出ると、北條さんいわく、当時フロッピーが使えたのはお金持ちだけ。5インチが出たばかりの頃で、その前の8インチは研究所レベルの代物でした。5インチになってようやくビジネス用途に降りてきたものの、それでもドライブだけで50万円コース——「お金持ち専用」の状況は大して変わっていなかったそうです。
その後、安い8ビットパソコンとして MSX なども普及しましたが、フロッピーディスクドライブは子どもが付けられる値段ではなく、「だから子どもたちはみんなカセットテープでした」とのことでした。本体と同じく、まともなストレージを手に入れること自体がひとつのハードルだった時代です。
Z80 アセンブラとハンドアセンブル
BASICだけだとできることに限界があるので、次に手を出したのが Z80 アセンブラ。しかもアセンブラツール自体が入手しにくかったため、大学ノートにアセンブリコードを鉛筆で書き、16進数でアドレスを手計算する「ハンドアセンブル」をしていたといいます。面倒なのはアドレスの計算で、「この命令は3バイトだから次はここ、この命令は2バイトだから次はここ」と、命令ごとのバイト数を手で積み上げながら16進数で筆算していく作業です。
先日、実家に行ったらそのノートが出てきたそうで、左ページにアセンブリコード、右ページにアドレス計算の16進数の筆算がびっしり書いてあったとのこと。北條さん自身も「子どもの遊びとしてはすごく楽しかった」と振り返ります。ハンドアセンブルしたコードを自作モニタープログラムでメモリに書き込み、想定通りに動いたときの達成感は格別だったといいます。
参加者からも「仕事ではやりたくないけど、遊びとしてはめちゃくちゃ面白そう」という声が出ていました。
X68000 と、フロッピー回覧で届いた Emacs
ハードウェア寄りの少年時代を経て、「ソフトウェアに転向しよう」と決めたのが大学2年のときだったといいます。危険手当つきのアルバイトをして、シャープの X68000 を購入したとのことです。OS は Human68k(DOS 系)、CPU はモトローラ製の MC68000 でした。
そこから C++ に手を出し、最初に使い始めたのは NG という軽量エディタだったそうです。Emacs に似た操作感を持つ mg の日本語(Shift_JIS)対応版で、当時の MS-DOS のような環境でも動く省メモリな実装でした。
そのうち、Emacs を Human68k に「無理やり移植した」バージョンが登場し、その入手経路が、当時ならではの仕組みだったといいます。
インターネットがない時代、ソースコードの入手自体がひと仕事でした。パソコン通信の掲示板には「フロッピーディスク回覧」という仕組みがあり、登録すると段ボール箱に詰まった大量の5インチフロッピーが宅急便で届くとのこと。中には Emacs や diff、GCC のソースコードが入っていて、読み終えたら次の登録者へ回す、という形だったそうです。
こうして回覧で入手した Emacs が、北條さんと Emacs の出会いです。以来30年以上使い続けており、現在のバージョンは 29.4。
当時のバージョンは 18.53。この数字は北條さんにとって特別な記憶として刻まれているようで、以前は暗証番号にしていたこともあるとか。
数千箇所の修正を金曜の夜に終わらせた話
舞台は、総合試験が目前に迫った大きめのプロジェクト(北條さんの記憶によると、少なくとも2008年より前の話とのこと)。そのタイミングで、比較的ダメージの大きい仕様変更が飛んできました。修正箇所はたしか2400箇所ほど。しかも安全に直すには、先にリファクタリングまで済ませておく必要がある——という状況です。
「まあ無理じゃん」という空気が漂うなか、「誰がやるんだ」という話になりました。みんな目をそらしている。
そこで北條さんは「Emacs を使えばいけるんじゃないか」と思い、「じゃあやってみようかな」と手を挙げます。金曜の夕方にコードフリーズして全員にコミットしてもらい、月曜朝までに片をつける——という段取りです。このとき、チームメンバーから向けられた冷たい視線のことは今でも忘れられない、と北條さんは言います。「そんなのできるわけないじゃん、という感じで見られていた」。
実際の作業は、grep で対象を洗い出し、awk やスクリプトで機械的な変換を仕込み、Emacs のキーボードマクロで残りを片付けるという流れ。その日の夜9時ごろには全修正が完了。軽くレビューを通すと「きれいに直っていた」——だいたい3時間の出来事でした。
北條さん自身のまとめがこちらです。
Emacs から一番学んだのは「論理的にテキスト編集をする」ということ。命名規約や書式が揃っていることは、こういう作業をやるときに本当に大事。
インデントが微妙にばらついていたり、命名が統一されていないだけで、こういう作業はとたんに難しくなる
サクラエディタの話、でも結局 grep に戻る
エディタ遍歴の中で、「日本製のエディタで唯一ちゃんと使ったのは サクラエディタ」という話が出ました。あれだけ Emacs 一筋の人が、わざわざ Emacs を差し置いてサクラエディタを選んだ理由は明快で、「巨大なテキストファイルを開くときにメモリマップ系の仕組みを使っていて、8GB みたいなログファイルでもスッと開けて検索できた」からだといいます。
具体的な使い道は障害調査でした。大量のログを相手にする現場では、ファイルサイズがすぐ数GBを超えます。一般的なエディタはファイル全体をメモリに展開しようとするため、そのサイズになると立ち上げた瞬間に死ぬ。サクラエディタはそこを回避できた。参加者からも「他のツールだとメモリ展開で死ぬので、障害調査のときはよく使ってました」という声が出て、北條さんも「そうそう。どんなにでかくても大丈夫というのは本当にすごかった」と頷いていました。
ところが、しばらくしたら「あっという間に使わなくなった」といいます。理由はシンプルで、「そんな大きいファイルをそのままエディタで開くより、grep みたいな UNIX 系のストリームツールで絞り込んでから Emacs で開いた方が仕事が速い」と気づいたから。巨大ファイルを丸ごと開くという発想自体をやめてしまった、ということです。
おわりに
カセットテープでコードを保存していた話、ソースコードが段ボール箱に詰められて宅急便で届いて回覧される話——社内イベントで話を聞いたとき、まるで別世界の出来事のように感じて大変面白かったです。多くの若い読者の方々にとって、なかなか聞いたことのない話ばかりだったのではないでしょうか?一方、北條さんと同世代の読者には、「あるある」と思わず頷いてしまうエピソードがいくつかあったかもしれません。
機会があれば、今後もベテランエンジニアならではのエピソードを取り上げていきたいと思います。
