にぽたん研修所 兼 にぽたん休憩所

旧にぽたん休憩所をマージしたからわけがわからない

WWW::Mechanize 事件について思う…「声の大きさ」が欲しかった

WWW::Mechanize の 1.17_01 がリリースされていたので、見てみたら、1.16 で (というか 1.06 以降で) リダイレクトされた後に uri() を呼ぶと、リダイレクトされる元の URL が返るというバグに対して、送った patch が取り込まれてない。
完全無視されている。
てか、基本的にはテストだけ直された模様。

どういうバグなのか、簡単に言えば、
http://www.example.com/http://a.example.com/http://b.example.com/http://c.example.com/
たらいまわしにリダイレクトされるサイトがあったとして、上記の場合

use strict;
use WWW::Mechanize;

my $mech = WWW::Mechanize->new;
$mech->get('http://www.example.com/');
print $mech->uri, "\n";

こんなのを実行した場合に、http://c.example.com/ が出力されることを想定するはずでしょう。
1.06 より前の WWW::Mechanize は http://c.example.com/ が出力されたのに、1.06 以降では、何段階リダイレクトされても、http://www.example.com/ が出力されます。

極端な例だったので「それはお前が思ってるだけじゃないか?」とか思われるかも知れないですが、一般的な Web のフォーム等で、http://www.example.com/input に対して POST したら、その先で入力パラメータの validation をして、確認画面である http://www.example.com/confirm にリダイレクトされるケースなんてのはよくある、ごく一般的な遷移だけど、

use strict;
use WWW::Mechanize;

my $mech = WWW::Mechanize->new;
$mech->get('http://www.example.com/input');
$mech->submit_form(
form_name => 'register',
fields => {
user_id => 'nipotan',
password => 'foobarbaz',
},
);
print $mech->uri, "\n";

これで、実際は submit_form() 後に http://www.example.com/confirm に遷移しているのに、これを実行したら http://www.example.com/input が出力されるのはバグと呼ばずに何と呼ぶ?というぐらい、おかしな挙動に感じるはず。

90 個以上の distribution で、PREREQ_PM に WWW::Mechanize が入っているのを考えると、それらへの影響はかなり大きいだろうし、そのバグありきで実装されているモジュールもあるかも知れないから、あの patch を容易には取り込むべきではない…とは思うんだけど、ちゃんとアナウンスして、いつか取り込んでくれないと、かなり不便だし、今後利用していく人にとっても不幸な材料でしかない。

このバグが誕生してから、早 1 年。
何故、自分以外の誰もそれを指摘し patch を送ったり、騒ぎ立てたりしていないのだろう…。
マイナーな distribution ならまだしも、ここまでメジャーなモジュールに対して、誰かが騒いで、ちゃんと軌道修正されないと、この有用なモジュールはずっと間違った動きのまま発展していってしまうという危惧がある。

「自分の声がもっと大きかったら。」

id:miyagawa 級の人間が騒いだら、もっと大騒動になっていたでしょう。
ここで声の大きさという面ではあまりに非力な id:nipotan が騒いでも、何の騒ぎにもならないという現実は厳しい。

実際にはてなブックマークで、以前騒いだあのページのブックマーク状況を見てみると、公開されてるのはセルクマだし、全然騒ぎにすらなってない。

声が大きい人一人でも、声が小さい人何百人でもいいから、皆で騒いで欲しいです。
MFPM でも大人気な WWW::Mechanize の将来を皆で考えようじゃないか。

まずは日本の Perl Monger 達よ、立ち上がるのだ。