システムに割り込んで処理

 ある企業さんから「既存システムが動かなくなったので、対応して欲しい」という連絡を頂きました。

 ある種の処理システム(Web上から情報を持ってきて、必要部分を抜き出して、集計する)があって、中身は3ツールの集合体でした。
 フォルダの中に3つのツールがあって、順繰りに処理するのを「システム」と言っているのです。

 「動かなくなった」についてですが、

・ツールAとツールBの連携は、ほぼ問題ない(時々、失敗する)
・ツールBの処理結果をツールCに入れると、処理失敗が多発する様になった
(ツールBの出力がファイル10個だとして、ツールCで3個が失敗する)
・この症状がいつから出ていたのか、分からない
という状況でした。

○聞き取り
 システムの内部について聞き取りを行うと、
・各ツールの作成者(Aさん)は、退職している
・システム運用を担当していた人(Bさん)は、少し前に退職した
・運用マニュアルは、A4で1枚(ツールを順繰りに動かすという内容のみ)
と。

 各ツールはエクセルのマクロ(VBA)ですが、プロテクトされていて中身が見えません。
 パラメータはシートに直接書いてあるので、どのサイトを見に行っているのかは分かるのですが、そこからの情報をどの様に処理しているのかは不明です。

○不具合の解析
 ツールBの出力全てがエラーになるわけではないので、何かが根本的に違っているのではないでしょう。しかし、どこかに問題があるはずです。
 エラーになるファイルとならないファイルを見比べても、特に目立つ違いはありませんでした。
(例:地名と平均気温と降水量が並んでいる)
 異常値も入っていません。

 何度も「自分が作ったツールではないし、中身が見えないので手の施しようがありません」と言いかけましたが、数日後に突破口が見えました。
 ファイルの中身ではなく、ファイルの名前に原因があったのです。
・成功する ファイル名はSJIS準拠(旧来の文字コード)
・失敗する ファイル名はUTF8準拠(世界的な文字コード)
である事を発見しました。
 古いWindowsではUTF8を使ったファイル名は文字化けするので、すぐに見分ける事ができるのですが、現在のWindowsはどちらの文字コードも「同じ様に」表示してしまいます。

 ツールCの内部構造は不明ですが、どうやらUTF8ファイル名を受け付けない様です。実際、ファイル名をSJISで書き換えたら正しく処理が行われました。

○対応
 原因が判明すれば、対応策は比較的簡単でした。
 要はファイル名の文字コードの話ですので、中間ツールとして「ファイル名のSJIS正規化ツール」を作成しました。BからCに直接流すのではなく、間に一手間を差し込んだのです。

 これで、順調に処理が流れる様になりました。
 今回は中間ツールを入れる事で急場をしのげましたが、もしツールBとCが一体化していた場合(中間ファイルを介さない)、手出しができなかったでしょう。

○将来展望
 企業さんには「ツールCの再作成」を提案しました。処理内容そのものは一般的なものですので、ファイルの受け入れ部分で文字コードに留意すれば良いだけだと思います。
 ただし、システムの世界では「動いているものに、手を出すな」という規則もあります。うかつに手を出す事により、思わぬ落とし穴を作ってしまうと。これはこれで間違っていません。