validator :-)

以前、こんなことがあった。

大規模アプリ開発で、3層どころか、5層ぐらいのシステム(端末層、GUI層、フレームワーク層、ビジネスロジック層、バックエンド層など)のシステム開発をしていたことがある。自分はフレームワーク層担当。そこで、入力値チェック(Validate)するかどうかの議論が起きたのだ。

  • 担当:「われわれも入力値をValidateする必要があります。」
  • 私:「相手は、リッチクライアントの端末層とその次にGUI層まであるので、わざわざフレームワーク層で入力チェックをする必要は無いのではないでしょうか。」
  • 担当:「いや、相手は信用できない。もし、想定外のデータを受け、DBに登録してしまうと、いつ、どこでその想定外のデータが保存されたかわからなくなります。障害トレースの意味でも問題が大きくなります。登録する前に、防ぐべきでしょう。」
  • 私:「いや、だからそういうデータは来ないですよね。他の層でチェックされているはずですから。不正なデータが来るとしたらそれはバグとしか考えられないのではないでしょうか。この程度のバグはテストでつぶしきれると思いますけど。」
  • 他の担当:「どうしたの?」
  • 私:「フレームワークそうでValidateする必要はあると思いますか?GUI層でチェックしているはずなので、二重チェックですよね。」
  • 他の担当:「Validateするのは当たり前なので、そのやり方を検討したほうがいいですね。」

こんな感じだった。はじめから、二重、三重にチェックすることが当たり前と考えているのだ。

もちろん、業務にもよるのだろう。Validateのミスが人命にかかわるようなきわめて重要なシステムの場合、二重、三重のチェックが必要だろう。確かに、担当しているシステムは人命にかかわるほどではないが、重要なシステムではあった。しかし、チェックもれていたことで、どの程度問題になるかというと、問題に気づかず、後日、端末に表示すると、文字化けしていた、とかそのような類の問題にしかならない部分だ。

開発に余力があれば、対応も検討してもよいだろう。しかし、非常に厳しい状況だった。必須項目が対応でききれる予測も立たないような状況で、このような瑣末なチェックの実装を考えることがそれほど重要だろうか。結局は、そのときのプロジェクトの状況、問題が発生したときの重大度などで決めるべきなので、なんともいえないのだが、ほとんどのシステムではそこまでの慎重さは必要ない気がする。

  • 私:「わかりました。では、必須チェック、レングスチェック、タイプ、妥当性、リミット、複合チェックなどが必要ですね。フレームワーク層なので、定義情報をビジネスロジック担当に提出してもらい、それらを解析してチェックするフレームを作りましょう。」
  • 担当:「いや、そこまではしなくてよいです。長さとタイプ(文字列として数字を送ってくるのだ。)だけでよいです。」
  • 私:「えっ、それだけですか?それだけなら確実に端末層やGUI層で防げるのではないでしょうか。業務ごとの整合性も見ないのですか?」
  • 担当:「必要ないです。以前から、そういう文化で、どこでもValidateチェックするのがわれわれの文化です。」

これだけなら、本当に不正データが渡されるケースは結合テストで出尽くすはずだ。まあ、致し方ない。逆にそれだけなら、実装を担当するこちらも楽なものだ。実際、そこでエラーが出ることは無いだろうし。結局は実装することにした。その後、談笑モードになっていたとき、その担当者からは、このように言われた。

  • 担当:「以前、あなたの前任者(私と同じ会社の人)も同じことを言っていましたよ。」
  • 私:「えっ、入力チェックは1度限りでよいと言うことをですか?」
  • 担当:「そうです。逆に少しうらやましいとも感じているのです。あなた方はそのような考えで今までシステムを構築されてきたのですよね。」
  • 私:「前任者とは面識があまり無いので、弊社がそういう方針かどうかはわかりません。しかし、まったく同じことを前任者が言っていたというのは、ちょっと驚きました。私も、実は、『チェックしたい。』という意見が出た場合、大抵はチェックする方向に流れるものと思っていました。普通、確実性が高いほうが良いに決まっている、と思いますからね。」
  • 担当:「そうですよね。なので、御社の文化かと思っていました。われわれも本当はムダはしたくないのですが、今まで何度もそれで失敗していますから。」

ちょっとうれしかった。自分と同じ考えで、システムを作ろうとしている人がいたのだ。たとえば、Validateでもどのように対応すべきかは、状況に合わせて考え結論を出さなければいけない。たぶん正解は無いのだと思うが、物事を批判的に考え、どうするかを検討する姿勢をもっている人が身近にいたのだ。そのときは、ちょとだけ幸せな気分を味わうことができたように思う。