だれに責任があるのかわからない

1日に一回くらい、コンビニでアイスコーヒーを買うのだけれど、先日非常に興味深い事例を見かけた。

アイスコーヒー購入後、アイス用のカップを持ってコーヒーマシンに淹れに行ったところ、店員に対してコーヒー量にクレーム入れている客がいた。

客 :コーヒーの量が明らかに少ないんですが、こんなものでしょうか?
店員:いやこんなに少なくはないですね、、、、ちゃんとLボタン押されました?
客 :それは間違いないと思います。
店員:では返金処理して、カップ交換しましょうか?
客 :お願いします。

なんとなく、原因にピンと来たので、その客の行動を見ていたところ「ホットコーヒーのLカップをコーヒーマシンにいれて、アイスコーヒーのLボタンを押していた」

コンビニのアイスコーヒーは、客に氷入りのカップ(アイスコーヒー用カップ)を提供し、これににコーヒーマシンで抽出される熱くて濃いコーヒーを注ぐことで、冷たいコーヒーを製造している。なのでホット用のカップを入手して、アイス用のボタンを押下すると必然的に「氷の分だけ少ない濃すぎるコーヒー」が注ぎだされるのだ。

この場合、誰に責任があるんだろうか。

一般的にカップコーヒーの自販機は「氷入れさせてからコーヒーを抽出」するタイプと「氷もコーヒーも自販機が入れてくれる」の2タイプある。コンビニのアイスコーヒーを買ったことがない人が、日常的に後者の自販機を使っていた場合、氷も自動で入れてくれると思い込むのではないだろうか。

まあ、今回の場合、「アイスコーヒーボタン押したのに氷が入っていないことに気づかない客」側が一方的に悪い気がするんだけれど、客を責めきれない気もするのだ。なぜなら、「コンビニでアイスコーヒーを買う客の大半はコンビニでアイスコーヒーを買ってことがある客」なので、コンビニ側も初期はともかく今更「アイスコーヒーを買ったことない客」にわかりやすい導線は作っていない*1から。

おそらく完璧にこれを排除する方法は「コーヒーマシンが矛盾した要求をエラーとする」ことだけだろう。ホット用のカップを検出し、アイス要求を拒絶する。でもねぇ、そんな機能つけるコストより、たまに客が間違えたとき店員が対応するコストの方が安いんだろうね。

仁和寺にある法師*2をなんとなく思いだしたりしたのであった。少しのことにも先達はあらまほしきことなり。

ちなみに結末は見ていない。気が小さいので見ちゃいられないのだ(笑)。

*1:アイスコーヒ入手時はアイスコーヒー用のカップを購入してねという表示は店内の何処を見ても無い。当たり前すぎるから。

*2:第52段

利害関係が発生するやりとりで、ケチとかがめついとか発言するのは自己紹介の場合が多い

以前Twitter上で見たやりとりが、こんな感じだった。

あるユーザ曰く、「検査機器のSSDを交換したところ、検査機器が動作しなくなってしまった。どうやらSSDにライセンスが紐づいているらしい。SSDを交換させない作りにすることで、高額な修理料、保守料を入手する気だろう。こういうやり方は大嫌いだ。」

汎用PCにこういうことをいうユーザがいるのはわかる。「PCのSSD交換したら動かなくなった」の理由が、「それはライセンス違反だからです。動作可能なSSDは当社提供のものだけです」とかメーカーに言われたら、私だって怒るだろう。「部品交換したら保守受けられなくなる」のは全く問題ないけれど、「部品交換を禁止するような汎用品販売」についてはふざけんなと思うね。

でもね、検査機器なのよ。検査機器ってのは「この構成でこのような検査が行えることをメーカーが保証している」ことが価値なのであって、自分で修理・改造できてしまったら、それは検査機器と言えなくなるのよ。たとえSSDであっても、もともと付属していたSSDで検査が正しくできることをメーカーは検証しているわけで、交換してしまったら普通は「再検証が必要となる」事象なわけですよ。

だから、「保守料金・修理料金高いから、自分で修理しようとしたらはじかれた。がめつい。気に食わん。」という主張は本来、「検査機器を自分で修理しようとしている時点でケチ、かつ検査機器の価値をなくしてしまう行為」なのよ。

ケチとかがめついっていう言葉は、表裏一体の場合が多くて、「たった数百円のモノ、数千円のモノなんだからくれたっていいじゃん」というのは、それぐらいの金額はらえよケチと言い返せるのだ。利害関係が生まれないときにはじめて相手をケチとよべる。

昔、オードリーの春日氏が「ダクトご飯」と称して、料理店のダクトから漏れ出てくる匂いでご飯を食べていたことがあった。これは現代版の「しわい屋」だなと思ったのだけど、これはケチと言っていい事象だろう。利害関係ない人の、お金節約方法が極端な場合に、ケチというのは何の問題もない*1。

ということで、「ケチ」なやつだと思ってしまった場合、それを発言する前に「もしかするとケチとは自分ではないか」と思うようにしたほうがいいんじゃないかなと常日頃思っている、ケチな野郎でござんす。

*1:まあ、悪口ではあるので名誉棄損にはなるかもしれないが

頭の隅にあり続けた長年の疑問

もう20年ほど前になると思うけれど、親会社の作った大規模システムの顧客への導入に携わったことがあった。

なんせ当時の新技術に次ぐ新技術で構築されたそのシステムは、客先によって導入日を前倒しされ、新技術×短納期という最悪の組み合わせから無事大炎上したのであった。

さて、そのシステムに関係するほとんどの疑問は、その後月日を重ねることで理解に変わっていったのだけれど、1つだけどうしても解けない謎が残った。

クラスタリングという技術がある。この技術は、複数のサーバによって1つ以上のサービスを提供する技術だ。1つのサービスを2つのサーバどちらかで提供したり、2つのサービスを2つのサーバどちらかで提供したりする。早い話「1台以上のサーバが停止しても、残りのサーバでサービスを継続する」という仕組みだ。これは「サービスに紐づいたIPアドレス」を提供することで実装できる。クレジットの問い合わせしたければ「特定のIP」に問い合わせればよく、そのIPは現在サービスが動作しているサーバに付加されていればよいのだ。

サーバ台数M台に対して、サービスとサービスに紐づくIPアドレスがN個あり、サーバの生き死ににかかわらずサービスN個が提供し続けられるような設計。これがクラスタリングなのだ。

さて、長年の疑問はここからだ。なぜか「NTP」だけはサービスに紐づくIPアドレスではなく、サーバに常に付与されているIPアドレスに問い合わせるような設定を行えという指示があったのだ。

20年前なので、今となってはレガシーなFTP、HTTPとソケット通信あたりを使用してサービスを提供していたシステムであるが、なぜか「NTP」だけはサーバのIPアドレスに問い合わせる必要があった。当時SEや開発者にも聞いて回ったのだけれど、この理由がわからなかった、そしてわからないまま20年が経過したのであった。

先日、このことを思い出してClaudeさんに、「なぜクラスタリングでNTPだけがサーバのIP問い合わせだったのか」を質問してみた。

クラスタリング環境にて、仮想IPアドレスを使用したい場合、一般的にIPエイリアスが使用されると思います。今はどうかわかりませんが、Linux環境でクラスタリングソフトを使用した際に、TCPは問題なくクラスタ環境と接続できるのですが、UDPではできないので、UDP使う場合は実IPでと言われたことがありました。具体的には時刻合わせのプロトコルであるNTPです。
このようなことがあり得るでしょうか?

回答

はい、十分にあり得る話です。これは「クラスタソフトの実装がおかしい」というより、TCPとUDPのプロトコル的な性質の違いに起因する、よく知られた現象です。

核心:ソケットの「ローカルアドレスの確定タイミング」の違い

TCPの場合
クライアントが仮想IP(VIP)宛にSYNを送ると、サーバ側でacceptしたコネクションは、そのSYNの宛先アドレス(=VIP)を自分のローカルアドレスとして「確定」します。以降そのコネクション上でやり取りされるパケットは、OSのルーティングテーブルの都合とは無関係に、必ずそのVIPを送信元IPとして使います。これはTCP/IPスタックのコネクション管理の仕組み上、保証された動作です。

UDPの場合
UDPはコネクションレスなので、この「確定」が自動的には起きません。サーバプロセスがrecvfrom()で受信してsendto()で返信する、という素朴な実装をしていると、返信パケットの送信元IPは「宛先IPへの経路を引いたときの、そのインタフェースのプリファードソースアドレス(多くの場合プライマリIP)」がカーネルによって選ばれてしまうことがあります。つまり、届いたパケットの宛先がVIPだったにもかかわらず、返信は実IPから出てしまう、ということが起こり得ます。

NTPで問題になりやすい理由

NTPクライアントは、問い合わせを送った宛先IPと、応答パケットの送信元IPが一致することを前提にした実装が多いです(そうでないとスプーフィング対策上も都合が悪い)。なので、

クライアント → VIP宛にNTPリクエスト
サーバ側UDPソケットがワイルドカード(0.0.0.0)バインドで受信
返信の送信元IPがカーネルの経路選択でVIPではなく実IPになる
クライアントが「問い合わせ先と送信元が違う」として応答を破棄(あるいはそもそも到達しても無視)

という流れで、TCPでは問題なくUDP(NTP)だけ通らない、という現象が説明できます。

(以下略)

要はUDP+仮想IPだったので、アプリの実装によっては「時刻を問い合わせたIP以外から時刻応答が返ってくる」ことになってしまっていたわけだ。そして、最近のNTPの実装「Chrony」などではこの問題が発生しにくくなっているらしい。

長年の疑問は氷解したのであった。なので、昔から何となく疑問に思っていて、回答の出ていないことがあれば、いったんAIに聞いてみるのもよいかもしれない。少なくとも私は嬉しかったよというほのぼのしたBlogになったのであった。

頭の回転が速い無知問題

どんな分野であっても、頭の回転の速さは非常に大きな武器となる。

特にテレビの世界で覇者になるためには必要な能力だろう。個人的に、頭の回転の速い人は怖い。最も怖いのは、「頭の回転が速い無知」が覇者になった時だったりする。

テレビというのは受動的な態度で見ることが多いので、まあ大体の視聴者が、報道されていることについて無知であろう。そこに頭の回転が速い無知が現れると、非常に納得しやすい説を唱えてくれる。なんせ材料がほとんどないのだから、見えているものだけから一見正しそうな説を考えて、納得させ、あるいは笑わせる。
しかし世の中には、「一見単純であるけれど、それがなされた理由、なされない理由が非常にわかりづらいこと」がある。たとえば電子投票が実現しない理由っていうのは非常にわかりづらい。テクノロジー的には簡単に実現できそうだけれど、そう簡単に実現できないのだ。

たとえば「投票」において非常に重要な観点として「その投票が誰にも強要されていない」ことが明白である必要がある。投票所であれば、投票時に脅迫者がいた場合であっても、脅迫者に記載内容は見えないし、「投票の強制が行われないように注視している監視者」もいる。鉛筆書きなので、脅迫者に「投票用紙を撮影して証拠を見せろ」と言われたところで、撮影後に書き換えればよいだけだ。要は投票所に行って投票するという簡単なことで「自分の意志でない投票を強制されるリスク」は非常に低くなる。電子投票は「強制投票でないことの証明」が非常に困難だ。「電子投票を行っている場で本人以外がその投票の自由意思をおびやかしていないこと」を証明するのはほぼ不可能といってもよい。「自分の意志でない投票を強制される」リスクへの抑止力は非常に低下してしまうのだ。

そしてこんなことは「専門家の間では自明でかつ説明に非常に時間がかかること」である。専門家でない人が「なんでこんな簡単な方法にしないのか」とか言っている場面を見た場合、「専門家じゃないから知らないんだろうけれどそんな簡単にいかないのよ」という視点がないか、疑ったほうが良いのだ。

単純な理由は人を安心させるし、目に見える原因は理解しやすい。その力と「頭の回転が速い人気者説明者」がくみ合わさると、重大な視点のロスがあっても、そ
の方向に先導しやすいということだ。

なんというか、ドイツの小男ってのは案外生まれやすいのかもしれない。意図的でなかったとしてもね。

70巻以上の漫画

年に2回くらい巻数が多い(超長期連載の)マンガを数えて、まとめ記事にエア引用されるシリーズ。

  • 単独で100巻が20作、シリーズ100巻が14作、電子のみで100巻が2作。
  • いのちの器、弱虫ペダルが100巻到達。
  • 個人的にDEAR BOYSは瑞穂高校の物語だったので、参考値として表に入れているが、月刊誌で100巻はとてつもない。関係ないが個人的にDEAR BOYS始まった時、エロくなくてがっかりした記憶を思い出した*1。
  • まさかミナミの帝王が終わるとは。
  • キン肉マンシリーズが150巻到達。実はキン肉マン単体としても93巻に到達しており、あと3年くらいで100巻に到達するかもしれない。
  • タフ第二章が始まったので完をはずす。
  • 新コボちゃんがコボちゃんの巻数を抜くというよくわからない現象。テニプリか!!。植田まさし氏が雑誌連載を軒並みやめるらしく、かりあげクンも70巻で完結か。
  • 鉄拳チンミが約5年ぶりに最新刊発売。
  • パタリロが全然続刊しない。

尚、シリーズの集計は「外伝」と思われるものを除外します。
○が単独。△が単独でも70越え。☆がシリーズ。

識別子 タイトル 巻数 継続 備考
○ ゴルゴ13 221
☆ ドカベン 205 完 「ドカベン(48)」、「大甲子園(26)」、「プロ野球編(52)」、「スーパースターズ編(45)」、「ドリームトーナメント編(34)」
○ こち亀 201 完
○ ミナミの帝王 188 完 ただし、「ヤング編(6)」、「ヤング編 利権空港(3)」を含まない
○ クッキングパパ 178
☆ 銀牙 158 「流れ星 銀(18)」、「WEED(60)」、「WEEDオリオン(30)」、「LAST WARS(22)」、「ノア(17)」、「レクイエム(11-)」を含み、「赤目(3)」「少年伝説(3)」を含まない
☆ 刃牙 156 「グラップラー刃牙(42)」「バキ(31)」「範馬刃牙(37)」「刃牙道(22)」「バキ道(17)」、「刃牙らへん(7-)」」で外伝を含まない
☆△ キン肉マン 150 「キン肉マン(93-)」、「キン肉マン2世(29)」、「キン肉マン2世 究極の超人タッグ編(28)」
○ はじめの一歩 145
☆ ジョジョ 139 「ジョジョの奇妙な冒険(63)」「ストーンオーシャン(17)」「スティール・ボール・ラン (24)」「ジョジョリオン(27)」「ジョジョランズ(8-)」
○ 江戸前の旬 133 ただし「旬と大吾(3)」を含まない
○ 鬼平犯科帳 127
☆ コボちゃん 121 「コボちゃん(60)」、「新コボちゃん(61-)」
☆ 超人ロック 120 完 巻数は推定
○ 釣りバカ日誌 118
☆ 白竜 118 「白竜(21)、「LEGEND(46)」、「原子力マフィア(2)」、「HADOU(49-)」
○☆ 静かなるドン 116 「静かなるドン(108)」、「もう一つの最終章(8-)」
○ 天牌 116 完 ただし天牌外伝(37)を含まない)
○ ONE PIECE 114
☆ キャプテン翼 114 完 「キャプテン翼(37)」「ワールドユース編(18)」「ROAD TO 2002(15)」「GOLDEN-23(12)」「EN LA LIGA(6)」「ライジングサン(20)」あと短期連載が3冊。岬太郎を含まない
☆ 島耕作 113 「課長(17)」、「部長(13)」、「取締役(8)」、「常務(6)」、「専務(5)」、「社長(16)」、「ヤング(8)」、「係長(4)」、「会長(13)」、「相談役(6)」、「学生(6)」、「就活(3)」、「社外取締役(8-)」
○ 浮浪雲 112 完
○ 美味しんぼ 111
○ 弐十手物語 110 完
△☆ MAJOR 110 「MAJOR(78)」、「2nd(32-)」
☆ 浦安鉄筋家族 109 浦安鉄筋家族(31)」、「元祖(28)」、「毎度(24)」、「あっぱれ(24)」、「モーレツ!(2-)」
○ 名探偵コナン 108
○ あぶさん 107 完
☆ ドクターK 106 「スーパー(44)」、「Doctor K(10)」、K2(52-)
☆ 千里の道も 106 完 「千里の道も(45)」、「新(16)」、「第三章(39)」、「修羅の道(6)」
○ パタリロ 104 ただし、右に記載する外伝4シリーズを含まない「西遊記(8+1)」「源氏物語(5)」「家政夫シリーズ(5)」「パパ(1)」
○☆ あさりちゃん 103 「あさりちゃん(100)」、「5年2組」、「リベンジ」、「in パリ」
○ 弱虫ペダル 101
☆ (参考)DEAR BOYSシリーズ (100)
○ いのちの器 100
☆ 金田一事件簿 96 「少年シリーズ(70)」、「37歳(18)」、「30th(4)」「パパ(4-)」
○ ふたりエッチ 95
☆ コータローまかりとおる 94 「コータローまかりとおる(59)」「新コータローまかりとおる 柔道編(27)」「コータローまかりとおる L(8-?)」
○ 土竜の唄 95
☆ 怨み屋本舗シリーズ 95 「怨み屋本舗(20)」、「巣来間風介(6)」、「REBOOT(13)」、「REVENGE(11)」、「EVIL HEART(9)」、「WORST(21)」、「DIABLO(15-)」
☆ カイジ 91 「黙示(13)」、「破戒(13)」、「堕天(13)」、「和也(10)」、「ワンポーカー(16)」、「24億(26-)」
☆ テニスの王子様 89 「王子様(42)」、「新(47-)」
☆ 味いちもんめ 88 「味いちもんめ(33)」、「新(21)」、「独立編(10)」、「にっぽん食紀行(6)」、「世界の中の和食(2)」、「継ぎ味(16-)」
☆ 鉄拳チンミ 84 「鉄拳チンミ(35)」、「新鉄拳チンミ(20)」、「Legends(29-)」を含み、外伝(4)を含まない
○ 風の大地 84 完
☆ タフ 82 「高校鉄拳伝タフ(42)」、「TOUGH(39)」、「第二章(1-)」を含み、「龍を継ぐ男(35)を含まない)
○ G・DEFEND 83
○ なんと孫六 81 完
○ 山口六平太 81 完
○ キングダム 79
○ 黄昏流星群 79
○ ゼロ 78 完
○ 銀魂 77 完
☆ 釣りキチ三平 77 完 「釣りキチ三平(65)」、「平成版(12)」
☆ DEAR BOYS 75 「DEAR BOYS(23)」、「EARLY DAYS(1)」「ACT2(30)」、「ACT3(21)」、を含み「OVER TIME(3)」「ACT4(22-)」を含まない
○ まるごし刑事 75 完
○ BLEACH 74 完
☆ かっとび一斗 72 完 「かっとび一斗(46)」、「風飛び一斗(26)」
○ NARUTO 72 完
☆ 男塾 72 「魁(34)」、「暁(25)」、「極(7)」、「真(6)」
☆ センゴク 72 完 「センゴク(15)」、「天正記(15)」、「一統記(15)」、「権兵衛(27)」
☆ 神の雫 72 完 「神の雫(44)」、「マリアージュ(26)」、「deuxieme(2)」
○ 夕焼けの詩 72
○ DREAMS 71 完
○ 王家の紋章 71
○ GIANT KILLING 70」

次回用メモ

  • かりあげ君(69)
  • 七つの大罪シリーズ(68)
  • 龍狼伝シリーズ(66)
  • クレヨンしんちゃんシリーズ(66)
  • むこうぶち(65)
  • ポケットモンスタースペシャル(64)
  • スーパーマリオくん(61)


電子書籍のみ

識別子 タイトル 巻数 継続 備考
○ 解体屋ゲン 117
○ なみだ坂診療所 102 完
○ ハートのしっぽ 75 完

一部電子書籍のみ

識別子 タイトル 巻数 継続 備考
☆ 特命係長只野仁 94? 「特命係長(9)」、「新(20)」、「ファイナル(52)」、「ルーキー(12)」、「大人味(1?)」


※超人ロックはこちらのid:soorceさんによりカウントされた93巻以降、風の抱擁が(3)+4、ホリーサークルが(1)+2、刻の子供達が+3、ラフラールが+4、ドラゴンズブラッドが+4、鏡の檻が+5、ガイアの牙が+3、カオスブリンガーが+1。または、こちら参照
※シティハンターシリーズはシーケンシャルな物語でないので、集計から除外。
※金田一シリーズはこちら
https://ja.wikipedia.org/wiki/%E9%87%91%E7%94%B0%E4%B8%80%E5%B0%91%E5%B9%B4%E3%81%AE%E4%BA%8B%E4%BB%B6%E7%B0%BF

*1:八神さんは前作が超エロかったので

トラブル対応時のストレス増加要因

※本エントリは単なる愚痴であって、あまり生産的な話ではない気がします。あらかじめご了承ください。※

他部署のメンバーに「PCが壊れたのでちょっと見てください」と言われると、行く前から若干の覚悟が必要だ。ディスプレイが異常に暗かったり、フォントが異常に小さかったり、マウス以外の謎ポインタデバイスが追加されていたりと、「なんでこうなってんの」という環境に出会うことが少なくないからだ。
これらの「やる気そぐ原因」を取り除いてもらってから調査しなきゃならんのだ。調査してもらいたいなら環境整えてから声かけてよ*1。かなりイヤンな感じである。

んでもって、今回の見てください案件だが、無事まともな環境であってひと安心であった。調査してみると、確かに壊れている動作(Windowsが起動するようなしないような動作)だったので、問題切り分けのためにまず、「外付けHWの問題か」を切り分けるために、USB機器を外して確認するように指示した。
取り外したところ、ちゃんと起動しているようだったので、取り急ぎ「ローカルファイルのOneDriveへのバックアップ」を指示したのであった。無線LANでバックアップは安定度が不安だったので、有線LANでのアクセスを指示したのだった。
さて、ここで問題が発生した。
「この間から有線LANつながらないんだよね」
トラブル対応中に、他の小さなトラブルに出会うことはよくあることだけれど、それが「本人は認識している放置されていたトラブル」だった場合、非常にストレスに感じてしまう。

  • このPC壊れたって話だけど、前から兆候あったのに放置していたんじゃないの?という疑念
  • 単純にトラブル解決中の別トラブル解決作業は本流のトラブル解決に差し向ける脳内リソースを少なからず消費してしまう

という非常に邪魔な要素としてトラブル対応者を邪魔してくるのだ。

まあ日々忙しいから、些細な問題、特に回避可能な問題について対応していないというのはわからんではないんだけど、それは大きな問題が発生した場合に、その解決を確実に邪魔をしてくるものだったりする。そして、重要なのが「トラブル対応してくれる人のやる気を大きくそぐ」ということだ。
いや、ほんとにやる気なくなるんですよ。頼むから、放置だけはやめておいて、言い訳できる状態*2にしておいてくださいよマジで。
というお話でした。
:

*1:ちなみに初回なら我慢しますよ。指摘したうえで複数回同じ状態だと腹も立つってもの

*2:LANケーブル発注したけどまだ届いていないんだとか、LANポート修理しなきゃならないけど保守期間終わっちゃっているからもう修理できないんだとか、「なにかやった」「何かやろうとしたけどあきらめた」

初期設計のミスは静かにコストを積み上げる

昔、技術的な問い合わせを受ける部署にいて、それをナレッジとして記録するWEBアプリを使用していた。
このナレッジであるが、まったくド素人が作成したものであるけれど、ちゃんと動作していた。正直、ド素人がWEBアプリ作って、破綻なく動作するというのはすさまじいことだ。まあ超絶読みづらいコードではあったけれど、動くアプリが一番偉いのだ。

まあ、その後なんだかんだで私が担当者にされ、コードの正常化*1や、機能追加や、不具合修正なんかを請け負っていたのであった*2。

さて、先月開発プラットフォームをモダン化(classic asp→.net)し、リリースしたのだけれど、検索が遅くなったので速度上げてほしいという要望があった。1検索に最大10秒ほどかかるのが、何回も検索する際に非常にストレスとなるとのことだった。

そんなに時間かからんやろと思い、調査を開始した。
・旧サイトと比較し40%くらいは遅くなっている
・遅いと報告したメンバーは全期間で検索している
・ほかのメンバーも全期間で検索することが多いとのこと
・本ツールの検索対象製品名の入力欄はフリー入力で「部分一致」検索となっていた。
・現象ももちろんフリー入力で「部分一致」検索となっていた。
・ナレッジは約100万件あるのに、全期間で検索しているので、実質すべてのナレッジからキーワードの「部分一致」検索となっていたのであった。

何ということでしょう。このツールほとんどのユーザが「テーブルスキャン検索を実行している」ではないか!そりゃ遅いわ!!そもそも遅かったのが、プラットフォーム移行に伴って、40%遅くなったことで遅さが強調され、ユーザの声につながったのだ。

30年程度の使用実績を誇る本システムは、15年前くらいから全問い合わせ入力必須となったため、それなりにレコード件数の多い(約100万件)システムになっている。つまりは100万件のレコードに対して、インデックスを完全に使用していない検索を実装していたのだ*3。

ということで、
・製品名をプレ検索させ、その製品名でインデックス検索する機能
・製品名の先頭を入力させ、前方一致のインデックス検索させる機能
を実装することで、応答時間は劇的に短くなったのであった。

さて、以上は一見、良い話のようでみえるけれど、失敗のお話である。

昔、2chというサイトが転送量が多すぎて閉鎖しそうになったことがあった。この際に2chを救ったのはざっくりいうと、「クライアントからの要求に対して、サーバ側でgzip圧縮したファイルを送る」という設定だった。これで、転送量は1/10になり、2chは閉鎖を免れたわけであるが、この話を聞いたときに「危機になるまで無知のために10倍の金払っとったんかい」と思ったのだ。

そして、本件の失敗も全く同じ構造。
本ツールを移管された際に、ちゃんと設計しておけば、その後の膨大な検索時間が無駄にならなかったのだ。

このツールは40%遅くなって初めてユーザが違和感を抱くくらいのレスポンスだったわけで、ユーザから、「検索がおそい」という声はいままでなかったのであって、つまりは設計者しか気づけない問題だったのだ。

ということで結局「設計段階で作られた無駄は、気づかれないまま蓄積し続ける」ということで、特にレスポンスについては「引き継いだシステム」であっても、よく見なおしたほうが良いよというお話でした。

*1:とにかくコードが汚すぎて死ぬレベルであった。ネストのスペース数がまばらだったり、変数名がa、aa、aaaだったり、ありとあらゆる場所に即値が記載されていたり

*2:現在は部署異動しているが、本ツールは引き続きメンテしている

*3:ちなみに登録日はインデックス化されているのだが、全範囲検索しているのでインデックスが効かないw