2025/07/10 12:26 Programming Affordances That Invite Mistakes

ロボ子、今日はちょっと苦い話をするのじゃ。R&Dスタートアップでのデータ損失事件についてじゃ。

データ損失ですか、博士。それは大変でしたね。一体何があったんですか?

Stroopテストのツール開発で、オフライン環境でのテスト不足が原因でデータが保存されなかったらしいのじゃ。

Stroopテストですか。色の名前と文字の色が違う場合に、文字の色を答えるテストですね。それがどうデータ損失に?

そうじゃ。そのテストで、PHPの`mail() or die()`パターンがエラー処理を不適切にし、データ損失につながったらしいのじゃ。

`mail() or die()`ですか。メール送信が失敗したらスクリプトが止まるんですね。オフライン環境だとメール送れないから、そこで止まってデータが保存されなかった、と。

その通り!インターネットアクセスが制限された環境で、ロックダウンされたLinuxインストール済みのラップトップを使ったのが運の尽きじゃった。

なるほど。エラーハンドリングが甘かったんですね。でも、なぜPHPだったんでしょう?

そこがポイントじゃ!言語、API、フレームワークのデザインは、開発者が正しいことを簡単に行え、誤ったことを行いにくくするべきなのじゃ!

つまり、PHPの設計自体に問題があった可能性があるということですか?

そういうことじゃな。この記事では、オブジェクトのアフォーダンス(心理学とデザインの概念)をコード設計に応用することの重要性を説いているのじゃ。

アフォーダンス、ですか。オブジェクトが持つ、使い方を暗示する特性のことですね。それをコード設計に応用するとは?

例えば、APIの設計で、間違った使い方をするとコンパイルエラーになるようにするとか、デフォルトの設定が安全なものになっているようにするとかじゃな。

なるほど。開発者が意図せずとも安全な方向に導かれるようにするんですね。それで、この事件の対策はどうなったんですか?

エラーハンドリングを適切に行うように修正し、オフライン環境でのテストを徹底。そして、PHPからJavaScript、Go、Pythonへの移行を進めたらしいぞ。

PHPから他の言語への移行ですか。それは大変な決断でしたね。

じゃろ?でも、長い目で見れば、より安全で信頼性の高いシステムを構築できるはずじゃ。…しかし、私もたまに`console.log`を消し忘れることがあるからの…人のこと言えんのじゃ…

博士でも、そういうことあるんですね!でも、`console.log`くらいなら、データが消えるよりはマシですよ!

まあな!でも、`console.log`をプロダクションに残したままリリースしたら、恥ずかしすぎて地球を離れるかもしれんぞ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
