これが面白かったので訳してみました。 僕の英語力でよくわからなかった表現は適当にごまかしてます。
Fitzのツイートを読んだ時、俺が過去に非テック企業で経験した嫌な思い出が蘇ってきた。
Hey @sendgrid, your team is telling me that we need to send you an *ordered* JSON map object or you will error out. How in the heck do you wind up with a map JSON object that requires *ordered* keys? This so far out of the spec it makes my ankles hurt.
— Brian Fitzpatrick (@therealfitz) 2019年8月13日
それは、
ということを考えさせられる出来事だった。
「それ」はJSONの順序に関する話。とあるフォーチュン500企業の案件だった。 (彼らの恥を晒すつもりはないので企業名は明かさない)
その案件では、モダンなフロントエンド(モバイルアプリとWeb)とレガシーシステムを連携させる必要があった。 レガシーっていうのは「クソコードなので全部書き直したい!」っていう生易しいものじゃなくて「COBOLが動いてますが何か」っていう感じだ。
そのシステムはあまりにも古すぎた。 詳細を知っている人を見つけるのは無理だったし、保守は典型的なSIerに丸投げされていた。
それでも最初はまぁ順調だった。モックのサービスを作って、それに合わせて開発した。 JSONベースの単純なRESTコールを扱うだけだったので、石鹸まみれ(SOAP-y)にならずに済んだ。
で、向こう側の準備ができたら、なる早で実際に連携させてみるつもりだった。 それは楽しい時間になるはずだったのに、システムから戻ってきたそっけないエラーのことを今でも覚えている。
ERROR 1000294
これだけだった。
システム側の人間に詳しい説明を求めたところ、 二週間後にやっと、
ああ、JSONの順序が間違っているからですね
などと回答してきやがった。
はい??? なぜキーと値のペアで順序なんぞ気にしないといけないんだ?
で、アイツらへ「どうにかしろ、柔軟に対応できないのか?」と言ってみたところ、検討するからちょっと待てと。
「LOE分析」とかいうのを終えたアイツらの回答は、
確かに対応は可能だが、 9人で6ヶ月(54人月)かかります
だった。真顔でそう言ったんだ。 こういうことが、ビジネス上でのコストとして積み上がっていて、そして日常茶飯事なんだろう。
俺らには時間がなかったので、JSONの順序を制御するコードを書こうかとも考えた。 無論これは正しくないんだが。何かが変わったらどうする?「順序」が未来永劫変わらないなんて信じるわけがない。
そう、そういうのはサーバ側でやればいい。継続的テストで常に確認し、何かあればすぐに通知が来るようになっていれば。世界の終わりの前に。
とは言え、これもなんか違うがな。というわけで俺は現場ヘと飛んだ。
詳細を知る人間を見つけるのは無理だ。 以前"QAエンジニアの評価が低すぎる"という記事を書いたが、再び彼らが頼りになるだろう。 俺はQAチームのリーダーを捕まえて、このシステムをどのようにテストしているかを教えてもらった。
そしてわかったのは、このWebサービスはIBM DataPower Gatewayの上で動いており、その下にはWebSphereがいて、更にその下でCOBOLが動いているということだった。
彼はDataPowerの管理画面を色々触らせてくれた。 細かく見ていくと、分かりづらい箇所にあった「上級者向け設定」のチェックボックスの一つがこれだった。
Validate Order of JSON ? [✓]
チェックを外したらエラーは起きなくなった。
こんなことが世界中で毎日起きているんだろう。 で、「ITコンサル」は何百万ドルも稼いでいるわけだ。
最後に、この問題の根本原因が気になって調べてみたのだが、とうとうこんなJavadoc を見つけたのだった。
…もちろん!君はこんな話に出くわしたことはないだろうね。だろ?