作品

 2007年1月の本書の販売実績データが出版社の方に届いたようで、いくつかの書店ではIT関連書籍の月間1位だったようです。書籍全体では全く桁が違うレベルなのでしょうけれど、なんとなくうれしい気持ちです。本書は秀和システムの編集を担当された方のアイディア満載で、脚注や見出し、さらになんと言っても書名のインパクトなどのおかげで、まずは手にとっていただけているのだと思っています。本は書名や表紙デザインで売れ行きが全く違ってくるそうです。実際私の3冊目の著書「C言語によるTCP/IPセキュリティプログラミング」は書名が悪かったのか全く売れず、2冊目の「C言語によるTCP/IPネットワークプログラミング」が10刷まで売れているのと非常に対照的という感じです。いずれにしましても、ご購読いただきました皆様に心より感謝いたします。少しでもお役に立てれば幸いですし、疑問点や指摘などございましたら、メールなどでお知らせいただければできる限り対応させていただきますので。

 さて、今回は「作品」というテーマなのですが、著書もある意味作品なのですが、プログラムの作品というお話です。

 このページを見ていただいている皆さんですから、実際にプログラムを作られる方が多いと思うのですが、皆さんはご自身で作られたプログラムで「作品」と呼べるようなプログラムはいくつくらいありますか。「作品」の定義が曖昧ですが、私の気持ちとしては、依頼されて作ったか自分から作ったかはともかく、出来上がったプログラムが、

・自慢したいレベル
・育てたいプログラム
・自分で使い続けたいプログラム

など愛着のあるもの、という定義としましょう。仕事でプログラミングをしていると、ほとんどの仕事は要求仕様にしたがって開発しますので、意外と愛着の感じられないプログラムが多い気がします。私自身では、

・技術的に非常に苦労した
・自分でこだわって仕様を考えた
・自分が困っている問題を解決するために作った
・世の中にないと思われるものを作った
・ソースが美しい
・性能が高い
・大活躍している

このようなプログラムに愛着があります。私が今まで作ったプログラムでは、

・WEB負荷試験シミュレーター「SADEE2」
・HTTPファイアーウォール兼サーバ分散システム
・サーバ2重化システム(クラスターシステム)
・ネットワーク回線遅延シミュレーター
・DHCPサーバ
・高スループットメールフィルタプロトタイプ
・負荷分散配下のサーバ同期システム
・MPEG2-TS用DirectShow Demultiplexerフィルタ

こんなものが思いつきます。お客さんから依頼されたり、こんなプログラム知らない?と聞かれたり、自分で不便なので作ったりしたものなど、きっかけはさまざまなのですが、「こだわって作った」という点が共通しています。

 実はたまたま昨日、DHCPサーバをあるシステムで使用していただいているお客さんから問い合わせがあり、1年以上某大手通信サービス会社で安定稼動しているのですが、どうも最近パラメータ反映のためのHUPシグナルによる再起動の速度が遅いので調査して欲しいという依頼を受けました。このDHCPサーバは、10万件のリース情報を管理した状態で、設定ファイルの変更を行い、サービスを限りなく止めることなく設定反映を行いたいという点がポイントで、2年前くらいに知り合いのお客さん経由で相談が私のところにきた時に作ったものです。UNIX系サーバではオープンソースのISCのDHCPサーバを使用する場合が多いのですが、ISCのDHCPサーバは設定変更の反映はプログラムを完全に停止して再起動する必要があり、10万件のリース情報を管理したような状態では本格的なサーバ機でも3分ほどかかってしまうということでお客さんが困っており、ISCのものを改良できないか、という依頼だったのですが、そもそもそういうリクエストは対応できない、と、ISCが明言している通りに、改造は難しく、結局私が自分でゼロから作ったものです。当然設定変更反映速度を常に意識して作りましたので、10万件を管理した状態でも3秒程度で反映ができる状態でした。それが最近20秒くらいかかるということで調査依頼がきたのです。

 お客さんの許可がいただけ、設定ファイルをお借りし、自社のテスト環境で実験してみると、確かに10秒くらいかかります。ほとんど他に何も動いていない軽いサーバなので実機よりは速いのですが、それでも以前開発中に確認していた頃は2・3秒だったはずです。

 ログ出力を仕込み、時間がかかっている場所を絞り込んでみたところ、一度リリースした後に、機能向上を依頼されて追加した部分が遅いということがすぐにわかりました。お客さんからは、まずは何が遅い原因かを調査してほしいというだけで、改善してほしいということではなかったのですが、報告する前に、改善可能かどうかもお知らせしたいと思い、該当箇所の改良を検討し始めました。DHCPサーバは簡単そうで実は非常に複雑な機能を持ち、ソースも決してシンプルではないのですが、こだわって作ったプログラムですし、実は客先でリリースした後に自社で使いながらどんどん機能追加をしていたので、ソースの構成は大体あまたに入っていて、リース情報を再構築する処理の中のある検索処理を高速化すればよいということで、単純にその処理に入る前にソートして、検索はバイナリサーチにすれば高速になると考えたのですが、よく考えると複数同じ値がありえるデータで、バイナリサーチでは複数見つけるのは工夫が必要なので簡単にはできないという感じでした。その部分を作った当時もそれで高速化をできなかったことが思い出されてきました。しかし、高速化は無理とは回答したくありませんので、改めて客観的な見方で考え直したところ、検索順序を変更すればバイナリサーチが単純に使えるということに気がつき、無事にその部分の処理は秒レベル以下に高速化できました。もちろん動作も問題ありません。さすがに、それでは、とすぐに入れ替えられるようなシステムではないのでまだリリースはしていませんが、解決可能であるということも含めて報告ができました。

 どんなソースなのかを紹介せずに書いていますので、ただの自己満足みたいになってしまいましたが、こういうのが「こだわり」で、自身で「作品」という愛着を持てるプログラムなのだと思っています。単に要求仕様を必要最低限満たしているから自分の仕事はここまでで完了、と考えたり、一度リリースして受け入れてもらったものなので、瑕疵責任以外の調査や改良は追加費用が出ないとやらない、というような姿勢では「作品」と思えるようなプログラムは生まれないと思います。そんなにこだわっていては商売にならないじゃないか、と思うかもしれませんが、その姿勢こそがお客さんからの信頼を高めるのだと思います。こだわってくれるから、また次も依頼したいと思っていただけたり、次に依頼する際に無理なコストダウン要求をしたりしないように配慮してくださったり、他の方に紹介してくれたりするのだと思います。

 プログラムに限らず、少しでも良い製品・良いサービスを提供したいという姿勢はお客さんの心をつかむのです。誰でもどこでもできるようなものは少しでも安い方が良いと考えるかもしれませんが、そうでないものは提供する側の姿勢によって結果が全く変わるのです。自ら手がけるものは「作品」と誇れるような「こだわり」を持って取り組んでみてはいかがでしょうか。それでは儲からないということもあるかもしれませんが、そういう姿勢を続けていれば、それに見合う良いお客さんが増えていき、いつの時点かでそれでも儲かる、あるいはその方が儲かる、評判が上がる、ということになるはずです。

2007.2.17

フレームページへ

from 2007/1/13