ゼロックスのパロアルト研究所に転勤後は「PageMill」プロジェクトに従事

柴田芳樹氏:1990年の終わりには、Globalviewの開発はほぼ目途が立って、20人近くいた駐在員も1991年には日本に帰る予定でした。私1人だけゼロックスのパロアルト研究所に転勤してくれと言われたのは、たぶん1990年の終わりか1991年の頭ですね。

私自身は、もう日本に帰るつもりだったのですが、今度は1991年5月にゼロックスのパロアルト研究所に転勤しました。

ゼロックスのパロアルト研究所は、AltoワークステーションやEthernet、ビットマップディスプレイなどで非常に有名ですが、当時「PageMill」と呼ばれるプロジェクトがPARC内にありました。

それは簡単に言うと、「ペーパーユーザーインターフェイス」という、あまり聞き慣れない言葉のものです。当時の複写機は、操作パネルが非常に小さくて使い勝手が非常に悪いということで、紙にいろいろなフォームを書いて、そこにチェックボックスを用意してチェックして、それを複写機に読ませていました。その指示に従って処理を行わせようという基本的な考え方ですね。

ということで、ペーパーユーザーインターフェイスの技術開発のプロジェクトが、PageMillと呼ばれるもので、そこで私自身は、個々の技術の開発、要素技術の開発というよりも、研究者の人たちが開発した技術を組み合わせてシステムを作って検証していくことを主に担当していました。

最初、ゼロックスのPARC内にオフィスを構えていたのですが、1年ほど経った時点で、「Hillview」と呼ばれる、ゼロックスPARCからちょっと歩いて下りていくだけなんですけど、そこにゼロックスのビルが出来上がって、PageMillプロジェクトはそちらに移って、後半の1年はHillviewのオフィスで働いていました。

このPageMillのプロジェクトの成果として、当時のゼロックスが製品化したのは、「PaperWorks」というPC向けのソフトウェアです。これは、PCに対してフォームをFAXで送ると、中のドキュメントを送り返してくれる機能を持つものです。

2年ほどこのPageMillプロジェクトに従事していたのですが、今度は富士ゼロックスがこの技術を使って商品化するということで、1993年5月に日本に帰国しました。

帰国後は「DocuStation IM 200」の開発に携わった

帰国して、2年ほどかけて開発したのが、「DocuStation IM 200」「AS 200」というものです。

左側の絵は、小さくて見えませんが、日経ビジネスの広告です。1枚の紙を持っていて、そこにはいろいろなチェックボックスがついていて、それでチェックしたものをFAXで会社にあるIM 200に送ると、該当するドキュメントがFAXで送り返されるといった機能。

それと、IM 200でコピーを取ったりFAXを取ると、自動的にドキュメントが保存されて、後でそのドキュメントを参照するための「フォーム」と呼ばれる紙がまた1枚出てくるんですよね。その1枚を使って、またFAXしたりコピーしたりできるというものです。

富士ゼロックスはこれを商品化・発売して、同時に「DocuStation AS 200」というものも開発しました。AS 200はIM 200と何が違うかというと、コピー、FAXの基本機能は一緒ですが、AS 200は自治体窓口証明発行システムを搭載していました。

AS 200は、プラズマディスプレイのタッチパネルがついていて、プリントする時に判子を押すという装置もついていました。これも同時に開発しました。この商品開発をしたのですが、システムの構成としては、すべてC++で、マルチスレッドプログラミングをやっています。

OSは、当時のデジタル複合機ではあり得ない、UNIXを普通に採用していました。「Solaris」ですね。CPUはSPARC。今から考えると非常に小さいのですが、メモリは64MBで、ハードディスクを搭載。先ほど言ったように、ペーパーユーザーインターフェイスを搭載していました。

マルチスレッドプログラミングですが、当時はまだPOSIXスレッドのAPIは登場しておらず、Sun独自のライブラリを使ってマルチスレッドプログラミングをしました。

このプロジェクトの中で、私自身は、主にデバイス制御層、スキャナーやプリンターを制御する部分と、「Multi-function Application Environment」と呼んでいましたが、コピーやFAXの各種サービスを1つのスレッドとして動作させるためのランタイム環境の設計・実装をしていました。

プロジェクトの後半はコピーが取れるようになったのですが、コピーを1枚取るたびにメモリが2MBリークして標準のC++のnewとdeleteオペレーターでは問題が解決しなかったので、newとdeleteのオペレーターを全部独自で実装し直して、メモリ管理をして、メモリリークやメモリ破壊を検出するような機構の構築をしました。

この当時はまだ1990年代なので、ビルドというと、いわゆるビッグバン・インテグレーションを行っている時代でした。ビッグバン・インテグレーションは、ご存じのように必ず失敗するというのがあって、なかなかビルドが成功しなかった。

ある時、思い立ったように、夜中に自動ビルドをするシステムを導入しました。ビルドが成功するまで、たぶん当時で2週間か3週間ぐらいかかったと思います。一度ビルドが成功するようになってからは、それほどビルドは壊れなくなってきたのですが、そういったものも導入しました。

IM 200はマルチスレッドプログラミングですが、実際にはハードウェアを制御するプリンター、スキャナー、FAX、操作パネルの部分が別のプロセスになっています。それぞれの中はマルチスレッドで動いていますが、その上に「Voyager」と呼ばれる大きなプロセスがあって、その上でさまざまなサービスがスレッドとして動作する構成になっています。

各種サービスは、Voyagerが起動される時にダイナミックローディングしていくかたちです。実はこのランタイムに相当するMAEは、コンフィグレーション(設定ファイル)を見てロードするだけでした。各ロードしたサービスがどんな機能をサポートするのかは、実はランタイムはまったく知らなくてもいいような作り、設計にした記憶があります。

C++マルチスレッドプログラミング用ライブラリの設計を担当

IM 200を開発したのですが、IM 200も先ほどの6060と同じように後継機は開発しないとなったので、私自身も富士ゼロックスを退職して日本オラクルに行きました。その後、またジャストシステムに行って、また富士ゼロックス情報システムに戻ってきました。

富士ゼロックス情報システムでは、いわゆるコンサルティング的なことを中心にやってきたのですが、2000年頃に確か「DocuCentre」のプロジェクトに従事しました。新たなコントローラですね。

当時のコピー業界は、アナログからデジタルへシフトしている時代で、最初のシフトの時は、プリンター、FAX、コピーなどがそれぞれ単体でデジタル化されました。それらを1台の筐体に集約しようということで、それを集約する際に過去の製品のボードを3つ無理やりくっつけて集約するということを当初はやっていました。

そうするとハードウェアのコストがかかってどうしようもないので、ハードウェアコストを下げるために、1枚のコントローラボードですべてのソフトウェアを動かすということで、コントローラをまったく作り直すというプロジェクトが始まったのが2000年です。

それに対して私自身は、主にC++用のライブラリの設計をやってきました。C++用のメモリ管理のライブラリで、かつ、スレッドライブラリなので、スレッドの生成だけではなくスレッドセーフなさまざまなコレクション系のライブラリも提供する。ということで、それらのAPIの仕様の作成ですね、プログラミングのガイドの作成をやっています。

実は私は、実装に関しては1行も書いていません。実装コードは全部レビューしたのですが、実は仕様しか書きませんでした。

同時に、このプロジェクトはいわゆるコンサルティングということで、技術教育ですね。従来の複合機の開発エンジニアはほとんどCしか知らないので、C++で開発させるにはさまざまな技術教育が必要でした。それに教育しただけでは駄目なので、設計とレビュー、コードのレビューをやっていました。

この時に作ったメモリ管理ライブラリは、名前は変わりましたが、富士フイルムビジネスイノベーションのカラー複合機で現在でも使われています。

開発部長・開発者・コンサルタントを兼務

米国のゼロックスにもう1度駐在するという話が出てきたので、そのプロジェクトは抜けて米国に行きました。予定したプロジェクトは赴任したと思ったらすぐにキャンセルになってしまい、すぐに帰国しました。

帰国して、また新たなプロジェクトに従事しました。実際には商品になっていないので(スライドには)「XXX」と書いていますが、もう1度デジタル複合機を作るというプロジェクトでした。

これもC++で全部書くものでした。私自身は、その中で全体のアーキテクチャの設計、主要なモジュール、API設計、実装をかなりやりました。

それと同時にこのプロジェクトが特徴的だったのは、ほぼ完全に実機レスによる完全なテスト駆動開発を実践していたということです。

開発者は100名ほどいて、中国人が20名、日本人が80名でしたが、ほとんどのエンジニアは実機なしで、PC上でコントローラソフトウェアのソフトウェアの開発・デバッグを全部行い、かつテスト駆動開発でした。

このプロジェクトで私自身は、開発部門長でもあり、いち開発者としてけっこうコードも書いていました。また、親会社である富士ゼロックスに対するコンサルティングも行っていました。

デジタル複合機のコントローラソフトをGo言語で開発

このプロジェクトはけっこう長いことやりましたが、2009年に富士ゼロックス情報システムを退職して、今度はリコーに入社しました。

リコーでは、コンサルティングみたいなことをやっていましたが、2013年7月に所属していた開発本部の副部長に呼ばれて、なんとまたデジタル複合機のコントローラソフトを開発してくれとお願いされました。

ということで、私自身にとっては4回目なのですが、やりましょうということで、2年間の開発をやったわけです。4回目で、また前と同じことはあまりやりたくないので、今度はなんとGo言語を使って開発しました。

ハードウェアとして、1分間に120枚のプリントやスキャンができるカラー複合機を使っていました。OSとして、リコーの複合機は「NetBSD」を使っているのですが、Linuxを移植して、最低限必要なドライバも移植して、Linuxより上はすべてGo言語で開発しました。

これも先ほどの富士ゼロックスでのプロジェクトと同じように、完全に実機レスによるテスト駆動開発でした。チームメンバーは十数名しかいなかったので、私自身も本当は開発したかったのですが、私がマネジメント業務もやりながら開発をすると足を引っ張る可能性も高かったので、この時はけっこう我慢して、開発はしませんでした。実際には、各メンバーが開発した成果物のレビュー、あるいはコードのレビューをかなりやっていました。

このプロジェクトは、それなりに成果を上げたのですが、会社の方針としては継続しないということで、残念ながら終わりになった次第です。

現在はバックエンドのサービス開発に従事

2017年にリコーを退職して、その後、ソラミツ、メルペイ、カウシェですね。Webサービスのバックエンドのエンジニアとして5年ほど開発をやってきています。これらのバックエンドのサービスの開発は、すべてGo言語です。

先ほどお話ししたように、いわゆるテスト駆動開発での開発経験は2000年の頃からやってきているのですが、私自身はWebサービスの開発が初めてでした。

テストファーストで開発したいという思いがあって、やはりバックエンドのサービスの仕様をきちんと書かないとテストファーストでもテストコードが書けないというのがあったので、そういったことが実現できるようなフレームワークを自分で構築して、いわゆるテストファーストというかたちでソフトウェアを開発してきました。

そういったかたちで開発してきた方法を、幸いにも『WEB+DB PRESS』のVol.134で記事にできたので、機会があればぜひ読んでいただければなと思います。

デジタル複合機のコントローラソフトは、実際には4回開発しているので、それと比べるとWebサービスは比較的複雑さがかなり低いというのは、正直なところですね。

ということで、現在はバックエンドのサービス開発に従事しています。

(次回へつづく)