jQuery のバグを見つけてから修正されるまで ― 2013年01月28日 02時17分
1 月 24 日に開催された Kyoto.js meetup 4 で「jQuery のバグを見つけてから修正されるまで」と題した発表を行いました。
jQuery へのコミットに関して 2 行でまとめるとすれば次のようになるでしょうか。
- jQuery のソースコードはショートコーディングの嵐なので心してかかる
- Contributing to jQuery と jQuery Core Style Guidelines は必読
発表の筋書きは以下の通りです。
jQuery のバグを見つけてから修正されるまで
フォロー・ミー
- nanto_vi (TOYAMA Nao)
- 株式会社はてな アプリケーションエンジニア
- クライアントサイド (JavaScript)
- サーバーサイド (Perl)
- jQuery をバリバリ使っている
- Deferred
- イベント
- DOM 操作
ある日どこかで
街中にクリスマスの装飾が灯り始めるころ
うんうん、変わったよね
…
……
そういえば Deferred
を使ったとき this
の値はどうなるんだったっけ?
$.Deferred().done(function () {
this // ← ココとか
}).then().done(function () {
this // ← ココの値は?
});
jQuery 1.8.3 と jQuery 1.9 Beta 1 で結果が違う!
汚れなき悪戯
- #11405 (deferred.notify() invokes progressCallbacks with deferred as context) -- jQuery Core - Bug Tracker
- Deferred: .resolve(), .reject() and .notify() now set the callback conte... · 23d7cf0 · jquery/jquery
ふむふむ…… (コードを読む)
ふむふむ…… (コードを読む)
ふむふむ…… あれ?
これ、自分の書いたコードが動かなくなる?
$.Deferred().then(function () {
// ここでの this が
return $.Deferred().resolveWith(this, arguments);
}).done(function () {
// ここにも引き継がれてほしい
this
});
……
まずい!
バック・トゥ・ザ・フューチャー
- https://github.com/jquery/jquery/blob/1.8.3/src/callbacks.js
- https://github.com/jquery/jquery/blob/1.8.3/src/deferred.js
- https://github.com/jquery/jquery/blob/1.9.0b1/src/callbacks.js
- https://github.com/jquery/jquery/blob/1.9.0b1/src/deferred.js
どこを直せば自分のコードが動くのか
コードとにらめっこ
にらめっこ
にらめっこ
……
問題なのはここ、でもここを変えると先の変更の意味が失われるから……
こことここか!
羊たちの沈黙
直すならテストを書かないと
テストを書くならテストを走らせないと
テストを走らせるなら jQuery のビルド環境を作らないと
grunt
? Node.js なら入ってるし楽勝でしょ
……
うわあ、この Node.js バージョンが古い!
うわあ、この OS バージョンが古い!
うわあ、この Python (ry
……
沈黙
そしてクリスマスが過ぎ、正月が過ぎた
風と共に去りぬ
やっぱり正月松の内は休まないとね
ってなになに……
げげー、1.9-stable
ブランチ!
もはや一刻の猶予も許されない
禁じられた遊び
俺にはこの SpiderMonkey JavaScript Shell がある!
秘技、テストのコピペ改変!
荒野の用心棒
「これ直さへんとあかんちゃう?」
J 「プルリクエストにしてーな」
「プルレクったでー」
D 「ここ冗長やろ。もっと削れるやろ」
(そない言われても…… これ以上どう切り詰めろいうんや……)
(しゃあないな、この条件分岐をもっと前に持ってきて……)
(あれ、この変数、フラグに流用できるちゃうか……)
「どや!」
D 「まあええんちゃうか」
素晴らしき哉、人生!
D 「修正取り込んだで。おーきに」
J 「僕と契約して貢献者になってよ!」
めでたしめでたし
※ この物語は実話を基にしたフィクションです。
最近のコメント