All Your Bugs Are Belong To Ass

Plack::Response::AutoEncode を作ったらすぐに死んだので原因を書き留めておく

先週の金曜日に Plack::Response::AutoEncode というものを作ってshipitした。どういうものか掻い摘んで書くと、アプリケーションのレスポンスにおいて、Content-Typeがtext/* のときにcharsetに応じてcontent-bodyをencodeするという物で、見ての通りPlack::Responseのサブクラスとして定義した。

その数十分後、僕はなかなか激しい(今思うと至極真っ当な)皮肉を目にすることになる。まとめると、「こんなものあげるな」ということらしい。 とはいえ、理由も聞かされないまま突然そんなこと言われても、こちらとしては皆目ダメな点がわからない。

ダメな理由

というわけで、ほとぼりが冷めたであろう週明け(今日ですね)に、改めてなんでダメなのかを当の本人に教えていただいた。 曰く、PSGIの仕様としてはcontent-bodyはbyte-codeを期待していて、P::Res::AutoEncodeをつかうと、その前提が覆ってしまい、結果的に相反しているのではないか?ということらしい。 まったくその通りだったので、すぐにPAUSEから削除予約を行った。 また、作った理由についても念のため説明(毎回encodeするのが微妙ではないか?と思ったため)したが、それはあくまでApplication側でやるべきことだという、これも今思うと当たり前の指摘をいただいた。

まとめ

  • インターフェース仕様を破壊するようなものはCPANに上げるべきではない
  • そういうものはAppレイヤーでやるべき
  • PrePANしとくべきだった
Created at
by
ytnobody
Last modified at
2013-11-18 16:19
by
ytnobody