【第7回】蝋人形の館
2020年11月18日(水)

【第7回】蝋人形の館

ある日の夕方から急に、1時間置きに「Cron Daemon」からメールが届くようになる。

デ、デーモン閣下からだ。
このまま放置しておくと、蝋人形にされてしまうぞ。

焦る気持ちを抑え、冷静さを取り戻す。

いや、待てよ。
閣下なら、スペルが違う。
「Demon」のはずだ。
じゃあ、この「Daemon」は誰だ?

実際は、Linuxのシステムで使う用語で、決して悪魔の一味ではございません。

某ショッピングサイトの商品リストから
最新アイテムを12個取得して、データベースに格納するプログラムを作成し、
cronによって自動化していましたが
そのプログラムが起動した時に、
何かしらの不具合が出てきたようで、それをお知らせしてくれたのです。

内容は、以下のような文章でした。

PHP Notice: Undefined offset: 〜
配列の値が空ですよ。というお知らせ。

とても親切ですよね。
毎時更新なので、早期発見できますし、最短で修正をかけることで
クライアント様のサービスに与える影響も少なくて済みますから。

実は、プログラムのお仕事で一番好きなのが、
このエラー探しの作業なのです。
エラーが好物だなんて変態ですね。

プログラムエラーが出た場合は、はじめに原因を特定する必要があります。
まずは推理から始まる訳ですが、一発で原因が分かると最高に気持ちいいです。
名探偵にでもなった気分を味わえます。

一瞬のひらめきを利用する思考回路は、
コピーやネーミングを思いつくときと似ています。

しかし、ここからプログラムファイルを開いて、
ひとたび修正の実作業に入れば、脳の全く違った部分を使います。
勘で勝負の探偵から、緻密な分析を得意とする臨床検査技師へバトンタッチです。

今回は割とすぐにエラーになっている箇所を特定できました。
それは、思いもよらぬ原因だったのです。

商品アイテムをHTMLから抜出し、
加工する際に扱いやすいように「商品写真」「販売価格」「販売ページへのリンク先」「商品タイトル」の4つの要素に分割していました。
このプログラムの肝になるのは、コードの中から、
抜出したい要素の周辺を挟むパターン化された文字列を見つけ出すことです。

今回問題となった箇所は「商品タイトル」部分にありました。
12の最新商品のうちのちょうど10番目の商品が売り切れてしまい、
システムが自動で「SOLD OUT」の表記をタイトルと同じブロックに併記していたのです。
そして表記をCSSで強調するため、新しいclassが混入していました。

たった1つのclassが原因で、パターンにマッチするかどうかという仮説が崩れてしまった訳です。
配列の11番目には想定していたデータが入らず、空になってしまったのでアラートが出たという現象です。

原因が分かったら、次は対策です。
臨床検査技師から、執刀医へバトンが引き継がれます。
ドクターは、常にいくつかの代替案を用意して手術に望みます。
「商品タイトル」を抜出すための、より良い方法がないか模索します。
この時に気をつけなくてはならないのが、再発防止です。

腕のいいドクターほど、一度の手術で病気を治すことが出来ます。
今までの抜出し方だと、一旦は成功したかのように見えてても、
他のパターンで例外が発生する可能性がありました。

今までのやり方に早々に見切りをつけ、
「商品写真」のaltタグに「商品タイトル」記述されているのを発見し、
そこに狙いを定めて条件一致するか検討しました。

手術は無事成功し、2度とデーモン閣下からのお叱りのメールは飛んでこなくなりました。

プログラムのお仕事と、一括りに言ってしまうのは間違っていると思います。
アイデアや独創性も重要ですし、緻密さや正確性も不可欠です。

プロのコピーライターがプログラムを組むとどうなるか。
皆様が実際に使っているユーザーインターフェース上ではなんら大きな違いは出ません。
しかし、アイデアと発想力を活かしたアプローチは業務の効率化につながります。

WEB関連の作業はある程度自動化して、本来の業務に特化しませんか?
蝋人形みたいな表情ってよく言われますが、とても人情に厚いのでご安心下さい。

ぴぃちゃんち