だいだひろ

 コンピュータ経験ゼロで巨大SIerに入社。それなのに,なんの因果かダンプファイルの解析など,トラブルシューティングを生業とするはめに。子供の頃からの持病で夏はNG。記事の執筆が遅れてご迷惑をかけたと反省しきりなこのごろです。

 皆さん,夏はいかがお過ごしですか? 夏と言えば楽しい季節。みんなで出かけたり,遊んだりと様々な娯楽で楽しんでることでしょう。え? トラブル・プロジェクトに放り込まれて何も楽しくない? いやいや,何を言ってるの。トラブルの現場でも心がけ次第では楽しめるんですよ。

 そこで今回は,混乱しているプロジェクトの現場でどう満喫するか,その方法を説明します。

見事な“釣り”を見て楽しむ

 まずはレジャー。これが無いと娯楽は始まらない。トラブルのさなかに,楽しめる娯楽はなんと言っても「フィッシング」。でも間違わないでください。自分が釣りをするのではなく,釣りをしている人を見て楽しむところがポイントなんです。

 どこに釣りをしてる人がいるかって? よく見てください。中レベル程度の技術力しか持たないエンジニアですよ。トラブル・シューティングの方法で,あさってのことを言ってもベンダー社員は釣られているじゃないですか。

 私が見たプロジェクト・フィッシャーマンはデータベース屋さん。起こっていたトラブルはレスポンスの遅延。お客様に納入したシステムで,利用者が増加してきたら,とたんに遅くなった。冗談ではなく,データを入力してから処理終了画面が出るまでの間,一服しに行くという運用対処をしていたそうだ。早速打合せに行くとになり,開発を請け負ったベンダーさんと話し合うことになった。

 そこに登場したのがベンダーさんの技術者。社内ではイケてる方だそうで,ベンダーさんが自信を持って連れてきた。お手並み拝見,と思うまもなく資料を配布。「やる気まんまんだなぁ」と思いつつ,ぺらぺら見てみると,いきなりそのシステムで利用しているデータベースのインデックス・アーキテクチャの説明が。そして,ろくにボトルネックの解析もしていないのに「今回はインデックスが原因です。インデックスを適切に設定すれば直ります」の一点張り。

 ところが,遅延しているクエリがアクセスしているテーブルとは全く異なるところにインデックスを設定しましょうと主張している。その辺は勘違いかなぁ,と思いコメントすると「いや,全体的に見てインデックスが適切に設定されていないことは確認できているので,そこから直しましょう」と主張を続ける。もちろん,インデックスの不適切な設定が遅延を起こす原因の一つであることは否定しないが,それだけでもないだろう。ロックかもしれないし,統計情報が古いなんてオチもある。

 この辺の細かい話を始めると,打合せに参加したメンバーは,データベースの構造を理解してないのですべてポカン顔。わかりやすい,というか,自分が知っている題目として「インデックスを設定すれば早くなる」があるので,そっちにすぐに飛びつくわけだ。

 まさに釣り師。当然だが,あてずっぽうな推論なので彼が主張するインデックスを設定しても問題は解決しなかった。さすがにこれで終わりでしょう,さぁ生産的な議論をと思っていたら,次は既存インデックスが歯抜けになっているからデフラグしよう,と言い始めた。ベンダー社員はまた楽に釣られる。よほどエサがいいらしい。

 これはプロジェクト現場での釣りだが,実は釣り師はどこにでも存在する。例えば企画。単なる思い付きをキャッチーなコピーにしてお客様に見せる。これでお客様が気に入ってもらえれば立派な釣り師だ。作るほうは大変だけど。上司への報告がうまい人も釣り師の可能性が高い。

 こんな感じで心がけ次第で会社で釣りが楽しめる。実体は,釣堀り見学だけどね。

次から次のわんこバグを満喫

 レジャーの後は食事。これぞ娯楽の醍醐味,と感じている人は多いはず。修羅場のプロジェクトのどこに食事があるかって?あるじゃないですか,ご当地メニューの「わんこバグ」が。

 これは,とあるツールの開発現場。私はそこの社員でも何でもなかったのだが,休日街を歩いているとどこからともなく私の名前を呼ぶ声が。周りを見ると,以前とある勉強会で出会った人だった。「いまサービスを提供しているサーバーがクラッシュして困っている。助けてくれ!」と言われたのでとりあえず開発現場へ。

 しばらく様子を見ていると,時間が経つにつれて,メモリー利用量が増加していることが判明。よくあるメモリーリーク,と察しをつけてサクッとダンプをとって解析を始めた。

 どのクラスのメモリー利用量が多いかも判明したので,早速ソースを見たところ,何じゃコリャ状態。オブジェクトを参照カウンタで管理しているのだが,エラー処理が甘く,リリース漏れが頻発することは明白なコード。

 これはひどいと報告すると,「直せるところまででいいから直して」との要望。頼まれるとサディストになる私としては,きっぱり断りたかったのだが,地獄の沙汰も金次第。金ならあると言われ,あっさり承諾。修正作業に入った。一回でも見本を示せば,ここの開発者でも直せるだろうと考え,修正方法を見せながらデバッグを始めたのは言うまでもない。

 ところがこのコード。参照関係が複雑で,適切なリリースをするとアクセス・エラーが発生することが判明。シーケンス的にはあってはならないパターンなので,開発者に聞いてみると「いや,おかしいとは思ったんですが,書いてみたら使えたんで。そのまま書いてみました」との信じられないお言葉。あるところでは必ずリリースしなくてはならないのに,参照カウンタが増えているせいでリリースできず,参照カウンタが0になるまでリリースを続けるコードを作りこんでる人もいた。

 こんなコードなので一カ所直すと別のバグが発生するという,正にわんこバグ。食べても食べても次のバグが発生する。こちらとしては,根本対処としてバグをよそってくれるお姉さん退治にかかりたいのだが,どうしてどうして。あっという間に次のバグがよそられる。

 こうしてバグを食べ続けたが,一日でどうにかなる量ではないので最後には音をあげた。当面はクラッシュしたらリブートで対応すること,そしてコードはC++で書かれていたのだが,このメンバーではメモリー管理は無理なのでJavaでの開発を勧めて退散してきた。そのときの満腹感は今でも忘れられない夏休みの思い出だ。

 このほかにも,

  • お客様と現場をピンポン球のように飛び回る「温泉卓球営業」
  • お客様につるし上げられて冷や汗をかく「サウナ風呂会議室」
  • 樹海のようなフォルダから必要なドキュメントを探し出す「議事録オリエンテーリング」
など,トラブル現場は娯楽がいっぱいだ。

プロジェクトをレジャーにしないために

 以上,トラブルの現場を楽しむ方法を紹介してきた。このようにトラブルが発生しても,怯むことはない。渋谷で遊んでいる若者と同様,皆さんも楽しめるのだ。思う存分,夏を満喫してもらいたい。

 ここで気をつけてもらいたいのは,楽しむ側と楽しまれる側には大きな違いがあることだ。皆さんは当然,楽しむ側になりたいだろう。しかし,スキルがなければ楽しまれる側になる。どうすれば楽しむ側になれるだろうか?

 スキルを身に付けることは言うまでもないが,それよりも事実をありのままに受け入れることが大事だ。自分の殻に閉じこもると目の前の事象に対して「なぜ?」と問いかけなくなる。その結果,すべてがあいまいになり,何をやっているのかわからなくなる。これが釣り師を生み,わんこバグを食べるきっかけになるのだ。

 どうかいつまでも子供の心を忘れず,わからないことが起こったら「なぜ?」と問い掛けてもらいたい。そうすれば,トラブルの現場で見せかけの夏を楽しむのではなく,本当の夏を楽しめるようになるだろう。