根本対応
朝日が昇るのを会社の屋上から見た。早朝の散歩、美しい場所で美しいプログラム、作ってみたいなあ、ふいにそんなことを思った。ナギの家はいい所だった。あそこならぴったりだ。他に候補はあるだろうか。インフラチームの建物も良いが、元本社だけあって広すぎた。海沿いにはこだわっていない。どこか居心地の良い場所はないだろうか。そうだ、この建物にはお気に入りの場所がもう一つあった。
私が思いだしたのはイサキの部屋だ。いや別にイサキに個室が与えられているわけでないのだが、その部署はイサキ以外はほぼ出払っているので、昼間は彼一人に占有されていた。技術的な雑談を心おきなく出来る場所だ。今の私は、やるべきことは分かっているが、どうアプローチするかが全く決められていない。イサキの部屋はこんな時にちょうど良かった。
「久しぶり。今日も一人かい?」
午前の早い時間、やはりその部屋にいるのはイサキ一人だった。
「なんだ、ミヤマか。」
イサキは気さくに言葉を返してきた。何度かプロジェクトで一緒だったし、時に私がイサキをプロジェクトに引き込むこともある。
「なんかお前の入るプロジェクトはいつも盛り上がるな。」
彼はもう私のプロジェクトのことは知っているようだ。
「なんだ、内容知ってるの。」
「大雑把には聞いている。面白そうだからな。」
イサキも優秀な技術者だが、シオヤとは得意な方向が違う。どちらかと言えばネットワーク系だが基本はなんでも屋である。会社組織の決めごとを軽んじる所があって、その分、私は昔から気楽に話せる相手だ。私の口調もつい気安くなる。
「締切までに性能をもう少し上げたいんだ。」
雑談とも相談とも決めきれずに、私は話を続ける。よくあることだ。
「だけど、もう納期までに出来ることなんてないだろ。」
「まあ、粘ってみるさ。」
それからしばらく、イサキにデータリンクの今の問題点について話をした。人に説明していると、それで自分の頭の再整理にもなる。そうしたことをイサキもよく分かっていて、私にしばらく付き合ってくれた。時おり挟み込むイサキの質問や感想が的確で、それだけでも新たな刺激になる。
「粘ってみた方がいいだろうな。なんだかキナ臭い。」
私が一通りの話が終わると、イサキは断定的に言った。情報は多くないはずなのに、思い込みでよくしゃべる。それはいつものことだし、時に本質的な指摘なこともある。さも当然なように、イサキは無責任に言葉を続ける。
「データベースの入れ替えは無理だな。コストが合わない。」
「ああ、それは分かっている。信頼できる仲間が検証して、私も納得させられた。」
「一、二か月でクリアできるとしたら、まだ見落としているボトルネックを見つけるくらいか。」
「もうそんなものはないんじゃないかと思っている。だけど何か改善が必要だって思っているのさ。」
イサキは質問を次々と投げかけ、私もテンポ良く返していく。
「処理速度を上げるハードの投資しても無意味?」
「たぶんハード性能の問題じゃない。心配なのは論理的な欠陥さ。ハード性能はそれが出やすいかどうかの影響としてしか現れない。」
単に私の勘だ。でも、イサキ相手の雑談でないと、気軽に言葉には出来ない。
「並行で登録できない時が存在する、これをなくす必要がある。登録できないのと遅れるのとでは大きな違いだ。」
「さっき言ってたな。IDが同じなら、心配はないんだろう?」
それは最初に私が話していた。イサキはそれをちゃんと整理して記憶しているようだ。
「うん、ネットワークIDとセキュリティIDとが同じ時なら大丈夫だ。その場合の動きは全て想定内だ。」
「そうか。」
そこでイサキは少し考え込む仕草を見せた。プロジェクトメンバー相手なら、そこで私も待つのだが、今は違う。私は自分勝手に言葉を繋げる。
「だから論理的な問題の可能性が高いと思うんだ。ハード性能を上げて、この問題の発生確率を下げたとしても火種は残っている。発生のメカニズムが分かってないんだからな。」
「どっか今の設計で余裕のある部分はないのか?」
「え? そうだな。もう見つかる気がしない。」
「じゃあ、登録のしかたを考えるしかないだろう。」
「いや、データ登録の方法は今以上のものは見つかっていない。」
何度もやってきた堂々巡りだ。でも、これを避けて考えることはやっぱり出来なかった。その時頭に浮かんだことを、そのまま口にする。
「データシステムはいつ巨大な入力があるか分からないからな。それに入力処理が改善したって、その先で追加の処理が要る。たしか前に入力方法を変えた時は出力が間に合わないって言っていた・・。」
そこで私は、コオオルとナナミとの昔の会話を思い出した。
「なんだ?」
言い淀んだ私を訝しがって、イサキが尋ねる。
「前にデータシステムをIDごとに分けたことある。それなら入力時に問題は発生しなかった。ただしアウトプットの変換に時間がかかって断念したそうだ。」
「ふうん。でも、アウトプットの変換はもともと必要なんだろう?」
「ああ、データ登録の時も変換しているし、出力時もデータを一つに合わせる必要があるから。」
「でも出力時を変更したら、登録段階で自由度が上がるだろ。」
「・・・まあ、確かにそうだな。そこの例外処理がずっとネックなんだから。」
「例外処理しないようにデータ登録方法を変える。いいアイデアじゃないか。問題が発生しなくなる。もう試し済みのようだが、どこまで追い込んでやったんだ?」
「・・そういうアプローチも試したとは聞いている。セキュリティIDごとにデータシステムを分離すれば登録は早くなったそうだ。あまり詳しくは知らないけど。」
「本当にダメという判断でいいのかは、その時、出力時の処理改善をどこまでやったかによる。」
「・・まあ、そこまで時間はかけていないのかもしない。」
「そうだろうな。IDの種類によって処理を分岐させる。また一手間だ。やりたくはないよな。」
イサキはそう言って笑った。気まぐれな発言だったのか、何か考えがあったのか。どこまで本気なのか私には全く分からない。
「だいたいがさ、入力データを内部の都合で無理やり変換するシステムなんて不細工でしかない。」
さらにイサキが皮肉を言ったので、私は前向きに答える。
「そうだけど、極端な話、今はデータ登録の並行処理ができるよう例外をなくせればそれでいい。」
「データシステムを分離して試したのはいつだ? 本当に全部試したのか?」
「私が合流する前の話だから、詳しくは知らない。」
「その時とは、システムの中身がずいぶんが変わっているだろう?」
「確かにそうだな。」
「今やったらどうなる? 前に試した時より良い結果になればラッキーだ。」
「うーん、よくはなっているだろう。ID変更はずいぶんとシンプルになっている。ID変更が原因で出力時の処理が複雑化してたからな。」
「その効果が出力時にも出るかもしれない。以前のネックが解消している、かもしれない。」
「・・・。」
「そのセキュリティIDっていうのは無限に増えたりはしないのか?」
「いや、それはない。定義済みだ。暗号解読に使われているから増えることは許されていない。」
「そりゃあ、いい。それなら試してみたらどうだ?」
「うーん・・・」
そのアイデアを私は頭の中でこねくり回し始めていた。
「登録されるデータは並列のままでぶつからずに別々のデータシステムに入る。そうなるとアウトプットの結合、待ち合わせが必要になるだろうな。入力時の効率化作業、出力時には別の工夫がいるだろうな。」
私のそのつぶやきにもイサキの反応は早い。
「今の最大の問題は出力でなく入力時だ。さっきまでのお前の説明だと、今のデータシステムは出力時に最適化されているようだ。必要でない情報は保存しないし、取り出す時の速度が上がるように十分に整えている。でも、その整え方によっては入力時にまた大きな問題が発生するかもしれない。だから出力側に負担を持っていく。それが最適なんじゃないか。」
「まあ結果として今のシステムは、登録の時と出力の時に同じような処理が入ってはいる。それなら出力時によせた方がいいか。」
「ああ、いいじゃないか。」
「どうかな、いけるかな・・。」
ふいにイサキは、からかうような口調になった。
「まあ、本来であればおかしな設計だ。データ登録の並列化は出来てもデータの整理が中途半端で保存されるんだからな。」
「・・ああ、そうかもしれない。」
「でも、他にあてはないんだろう?」
「ああ、ウィルダイスさんと約束した日付がある。このアプローチでダメならもう諦めるしかないかな・・。」
「まあ、やってみたらどうだ?」
その時、子供がイタズラに誘うによう、イサキの目が輝いた。
「ああ、やってみるさ。」
その時、私も同じような目で頷いていたかもしれない。締め切りが決まると、幸運なアイデアとの出会いがちょうど転がり込んでくる、なぜかあることだ。
その日の進捗会は静かに始まった。先週から始まったモンキーテストに目立った成果はない。たぶん、これからプロジェクトがどう進むか皆が気にしているのだ。
会議の最初に、まず私はウィルダイスと話したことをメンバーに伝えた。
「ウィルダイスさんに延長は一か月までと念を押されました。いや、確認や納品の最終準備を考えると、実質あと七週間でなんとかしないといけません。」
「よくウィルダイスさんがオーケーしたな。」
まずコオオルが感心したように声をあげ、それに続けてナナミが言う。
「なんにしても本当に締め切りが決まったことになりますね。」
「はい、そうなります。」
「あと七週間ですと、やっぱり今のを出すしかないんでしょうね。これで十分性能は出ているわけですから。」
ユキのその言葉にメンバーの多くが頷いていた。
「そういう保険の案があるから私は気楽です。」
そう言ってから、私が一番話したかったこと、考えていることをメンバーに伝えた。
「今のところモンキーテストでは問題は見つかっていませんが、一つアイデアを捻り出してみました。皆さんの意見を聞きたい。」
そう言って資料をスクリーンに出す。そうは言っても準備をする時間は三十分もなく、たった一枚の模式図だけだ。
「以前にやったというアイデア、こんな感じですよね?」
私の問いには、すぐにナナミが答えた。
「はい、セキュリティIDごとにデータシステムを別々に用意するやつですね。ユキさんにも作業をいろいろしてもらいました。ただ残念ながら出力時の処理が大きすぎて、そっちの処理時間が仕様を全然満たせなかった。」
「ああ、ダメだったな。」
「ええ、そうでした。」
コオオルとユキが頷く。
「今のバージョンでもう一度同じことをしたら、どうでしょう? 結果は違ってくると思いませんか?」
「また、同じことをするのか?」
「同じにはならないと思います。極端に出現頻度の低いセキュリティIDがあるので、その大別を行う必要はありますが。」
それはここまでシステムを改修してきたから分かった知見だ。
「セキュリティIDごとにフォーマット整理をまず行う。いくつかのデータ要素も上書きしておく。それにアウトプット出力も変更は必要になる。だけど、それなら入力時は振り分けのみで待ち合わせは要らない。」
「いや、アウトプット時の処理が格段に増えるだろ。セキュリティIDが混ざった状態での問い合わせが来たら、結局、待ち合わせて返さなくちゃいけないだろう。前と同じことにならないかな。」
コオオルの問いは私も思ったことだ。そして私が頭の中で何度も自問したことでもある。
「まあ、アウトプット時の処理が増えるのは確かでしょうね。でも今回の修正で、出力時の暗号処理もだいぶ早くなっているでしょう。」
「それはそうだな。」
リモート参加していたインフラチーム、シオヤの声だ。シオヤは続けて意見を言う。
「今思うに懸念は二つかな。IDごとに分けたデータベースはどこに負荷がかかるか分からない。それをどう振り分けるか、そしてもう一つは重複データだ。」
「重複データ?」
思わず私は笑みを浮かべた。すぐに指摘できるシオヤはやっぱり優秀だ。
「入力段階では別データでも、フォーマットを整えてデータベースに入れると、全く同じデータがあるんだ。今は完全に上書きするからいいが、今回は別々に登録されてしまう。」
シオヤの指摘に素早く反応したのはユキだった。
「データベースの負荷については、その設計なら問題はありません。」
そう言ってユキは立ち上がり、具体の説明を続けた。
「データベース側の格納でも、まだID割合を変える処理は一部残しています。それを全部外していいことになるので、多少の負荷を増やすことは大丈夫です。データベースごとの負荷の見積もりは、問題が発覚した当初にそこが問題かと思って散々やりました。」
「なるほど。」
「処理の終わったデータをIDごとにまとめて登録させる。その辺はすぐに処理は追加できます。複数のデータベースでやるのは面倒ですが、出来ない話ではありません。」
「ずいぶんと自信があるんだな。なによりだ。」
賞賛とも嫌味とも区別がつかない口調でシオヤが言った。そのシオヤに向かって、ユキはさらに言葉を投げる。
「重複データ用に処理を追加するのも可能だと思います。今の直列処理用の仕掛けは処理が重いので、なくなれば余裕がだいぶ生まれます。多少の処理の追加は性能には影響しないかと。」
「重複データを対応させるのに、そんなに重たい処理は要らないな。」
シオヤが視線を逸らしてそう言うと、ユキは満足そうに腰をおろした。
「頼もしいですね。よろしくお願いします。」
心の底からそう思ったので、私はそうユキに言った。
「いえ、昔の自分たちに助けられているだけです。」
「重複データの処理については、どなたか他にアイデアありますか?」
私の発言に対して、シオヤは独り言のように返答する。
「新しい設計ならアウトプットを作る時に重複を抜くか、定期的に重複データ削除のプログラムを入れるしかないだろうな。入力時に仮登録と本登録と段階を分ける、いや、スマートにはいかないかもしれないが、出力時の方が性能は出そうだ。追加は問題ないとユキさんも言っていることだし、ちょっとやってみるかな。」
その言葉に私は可能性を感じた。メンバーの何人かもそうだったのだろう。いけるかもしれない、メンバーの意識が上向きになるのを感じた。この空気感はどういう要素で測定できるんだろう。
「あの・・」
「どうぞ、ナナミさん。」
「今から手を入れるには規模が大きすぎはしないですか?」
一瞬の静寂、冷静さを取り戻したような気配が現れる。でも、皆の意志はそれで変わりはしなかった。
「どうします。やるだけやってみますか?」
「試すだけでも。」
遠慮がちなつぶやき、私はそれを後押しする。
「今のメンバーなら不可能ではないかと思ってますが。」
私がそう答えると真剣な顔をしていたメンバー達の表情がわずかにゆるんだ。
「そうね。油断はないみたいね。」
ナナミは満足げにそう言った。彼女はなにかを確認したようだった。
「とにかく、ミヤマさんの案を各チームで揉んでみましょうか。」
「そうだな。それがいい。諦めがつくかもしれないし、あるいは、ひょっとするかもしれない。それなら儲けものさ。」
コオオルの軽口でその日の進捗会は終了した。今日はあまり反対意見は出ず、雰囲気は悪くなかったなと私は思った。会議の空気、支配するのは皆が成功するかの直感に関係があるんじゃないか、そんな考えが頭をよぎる。
具体的に向かう方向が決まってからの毎日は、時間の進み方が驚くほど早くなった。
翌日の進捗会、シオヤが新たな設計プランを持ってきた。驚いたことに、すでに新しいプログラムの試作品もだ。
「こんなヘンテコな処理は、他に聞かないがな。今までのIDを揃える待ち合わせに比べたら数段簡単だった。」
「よかった。」
「でも、まだ完成しているわけじゃないですよね。」
ユキが言った。
「なあに。こっちのチーム総出でやれば、あと一日で直せるな。それから重複データの処理を入れてアウトプットの時に辻褄を合わせる。それにしたって来週中には全部終わるだろう。」
ユキが口を挟むとシオヤが張り合うのは、いつものことだ。
「データシステム側の分離はまだ終わっていません。それにプログラム変更も途中なので、こっちはあと一週間はほしいです。」
ユキが言った。
「なんだ。じゃあ、こっちの作業の方が早いな。」
「いえ、たぶん結局は同じくらいのタイミングですよ。」
シオヤとユキが口論を始めそうだったので、私は慌てて別の話題を出す。
「ちょっと心配なのはテストです。今まで私はデータ登録の計測しか見てないので。問い合わせ結果のアウトプットを計測する仕掛けは、どういうものがありますか?」
「そこは大丈夫です。」
部屋の奥からナダイケの声が響く。ふだん口数の少ない彼の声は不思議とよく通る。
「アウトプット側の評価方法も十分に作りこんであります。同じ評価方法なら二日もあれば可能ですよ。」
「いや、テストは慎重にやらなきゃダメだ。時間はかけた方がいい。なにせ、ほんの数日で作ったものなんだからな。」
コオオルがそう言うと、ナダイケは落ち着いた声で反論した。
「試験に受かれば全く問題ありません。今までの試験方法のノウハウが詰まった試験ですから。二日で試験結果は出ます。」
「いい試験がすぐに出来るわけね。良かったわ。」
ナダイケの力強い言葉に関心したようにナナミがつぶやく。コオオルはバツが悪そうに慌てて言った。
「まあ、きみのことは信用しているよ。ただいくら納期が近くても、試験に必要な時間をケチることはないって言いたかっただけさ。」
決着がついたところで、私はしゃべり出す。
「来週中には作り込みが終わります。評価に二、三日。念のため一週間見たとしても、まだ余裕がありますね。」
「そんなにうまく物事が進むでしょうか。」
ナナミからの問いかけだ。
「まあ、どうでしょうね。とにかくやってみましょう。」
そうは言ったが、私は確信があった。先ほどのナダイケに近い感覚だ。今まで時間をかけて足踏みした分、これからの作業はかなり早く進む。プログラムを作り直すも検証するのも。そのための苦労だった。作り直し、その時は良い成果が出なくても、最後はスピードを飛躍的に上げる。今まで苦労したこと、それはとても大きな効果をもたらすのだ。




