1960 年生まれ,独身フリー・プログラマの生態とは? 日経ソフトウエアの人気連載「フリー・プログラマの華麗な生活」からより抜きの記事をお送りします。2001年上旬の連載開始当初から,2007年に至るまでの生活を振り返って,週2回のペースで公開していく予定です。プログラミングに興味がある人もない人も,フリー・プログラマを目指している人もそうでない人も,“華麗”とはほど遠い,フリー・プログラマの生活をちょっと覗いてみませんか。

 ある昼下がり,「明日は久しぶりにおでんでも作ろうか」などとぼんやり考えていると携帯が鳴った。切羽詰まった声が耳に飛び込んでくる。「トラブルが起こって人手が足りないんです。時間があいてるようなら,明日の午後,打ち合わせに来ていただけませんか」。聞くと,インターネットのショッピング・サイトで,複数の利用者が同時にアクセスした際に他人の情報を上書きしてしまう問題が発生したのだと言う。プログラムの不備かもしれないし,そうでないかもしれない。私はかかわってないので,詳細はわからない。言語はJavaだという。今回のミッションはこんな風に私のところに転がり込んできた。

明日の正午までに結果を出す

 ここ数年で何がやっかいになったかと聞かれて,インターネットの消費者向けサービスが登場したことを挙げないシステム屋はいないだろう。こうしたサービスは24時間365日稼働を売り物にしている。トラブルが起こっても,修理のために止めることができない。「走っている馬を手術する」気分を味わえるわけだ。私が知っているだけでも,こうしたドタバタは年に1,2回必ずある。普段は正しく動作しているのに,アクセスが集中するとホストがギブアップしたり,プログラムが死んだり,データベースが混乱したりする。「設計の問題でしょ」とおっしゃるだろうか。それは正しいかもしれない。しかし,机上では推し量れないものもあるのではないだろうか。

 打ち合わせは,私,知人,ボスの3人で,6時間にわたって行われた。私の担当はログの解析だ。問題が生じたケースを抽出するプログラムを作って,明日の昼までに抽出結果を提出してほしいと言う。ログの中から怪しい個所を見つけ出す方法を一通り説明してもらったが,はっきりしない部分も多々ある。もっとも,すべてが明確になるのを待っていたのでは,作業にかかれない。

 帰宅してPerlでログ解析の基本部分を書く。先方から解析すべきログを用意できたという連絡が来たのは,深夜の1時少し前である。まずはApacheのログだ。タイムスタンプを整形し,クライアント(ブラウザ)のIPアドレスをドメイン名に変換して逆順にする。こうするとソートしたときに同一ドメインを判別しやすいのだ。あとはURLを分解して必要な情報を抜き出し,特定のアクセスをフィルタリングするスクリプトを書く。これでタブ区切りファイルを作ってAccessに食わせれば,あとはクエリーで大抵のことができるようになる。

 時計を見ると2時半だ。次にアプリケーションのログを同じように処理して…と考えたところで,二つのログのカラムを合わせれば,両方をマージして一つのテーブルにできることに気づく。なんてこった。あわてて方針を変更して,1日分のログをAccessに読み込ませたところで4時を回った。

 手作業で抽出したときの手順にしたがってクエリーを書こうと四苦八苦したが,思うようにいかない。それでも,いろいろな条件でログをフィルタリングして,その結果を手作業による結果と比較するという作業を繰り返すうちに,疑わしいシーケンスをなんとか抜き出せるようになった。もう7時だ。外は明るくなっている。

 次に,1週間分のログを処理する。ログと,クエリーで抽出した結果を見比べて,クエリーを手直しする。これを繰り返して,信ぴょう性のある結果を得られるようになったのが9時過ぎ。引き続き,抽出結果をさらにクエリーで加工し,利用者コード,購入商品のコード,時刻などがひと目でわかる表を生成。この結果をExcelに流し込んでレイアウトを整えた。時計は11時半を指している。簡単な説明を添えて関係者全員にメール。ぎりぎりセーフだ。

午後6時までに再提出

 自炊したリゾットを食べながら先ほどメールした資料を自分でレビューする。先ほど抽出したのは「あやしいもの」に過ぎない。実際とどの程度合致しているのだろうか。調べてもらうと,サポート・センターに問い合わせがあった利用者は,すべて抽出できているという。打ち合わせでは「取りこぼしがあるぐらいなら,疑わしいものをすべて抽出してほしい」という感触だった。まずまずと言える。

 このあとボスに電話で「いったん寝る」と連絡したが,脳みそが沸騰した状態になっていて寝付けない。仕方がないので論文などを読んで過ごす。午後3時すぎに連絡があった。一連の処理の終了を確認する方法が少し違っていて,先方で必要な情報が一つ二つ欠けていると言う。午後6時までに結果を再提出してほしいとのことだ。

 頭の中を整理して,もう一度クエリーを最初から組み直した。そして抽出結果をあらためてExcelで整形してメールする。ここでちょうど6時。今度はOKが出たようだ。午後7時過ぎには,ソースコードのウォークスルーを2~3人で行っていた人たちがプログラムのバグを見つけたという連絡が入った。解決のメドは立ったわけだ。

 だが,なすべきことはまだたくさんある。問題が発生したケースをきれいに洗い出し,データを修復しなくてはならない。プログラムを修正して差し替えた後も,当分の間はログを解析して問題が起こっていないかどうかを確認する必要があるだろう。こうした戦いをいくつも乗り越えて,稼働実績ができていく。そう,システムにとって本当に大事なのは,どう設計したのかということよりも,どう実績を積み重ねていくのか,ということではないだろうか。