ღゝ◡╹)ノ♡ hanach.in

home diary

Rubyにコントリビュートした

09 Jan 2015

生まれて初めてRuby書いた。ChangeLogに僕の名前が載った。うれしい。

経緯

Refinement周りでSEGVして落ちる現象を見つけた。

お正月で下調べしたところvm_method.c周りで落ちるコード例を複数みつけたので雑に直してみた。 雑に直した結果、複数のバグを直すコードが1つに混ざってしまった。 正月明けてからはパッチを送るのを目標に、一旦整理しなしていた。 個別にテストを書いてバグを直し、コントリビュートできるように準備。 水曜日のOkinawa.rbの日にRuby Issue Tracking Systemにアカウントを登録し、報告した。

次の日、nobuさんにパッチを取り込んでもらえた :tada:

報告方法、パッチの作り方

具体的な報告方法や、パッチの作り方は、しばたさんのRubyKaigiの話と公式のHowToReportJaを参考にした。具体的なパッチの作り方とか、報告する際に気をつけるポイントが書かれていてとても参考になった。

投げたパッチそのまま取り込まれたわけではなくより適切な場所で直されていた。 どこで直せばいいか悩んでいる場合もとりあえず投げてみるものだと思った。 あとChangeLogの文章も追加してもらえて大変ありがたい。

テストを書いた

Ruby Issue Tracking Systemに報告されたバグは、ruby-coreあるいはruby-devにメールが流れる。 bugsに報告があった場合、以下のような感じでassertのメッセージにruby-coreの番号と、bugsのチケット番号を書くのが慣例のように見えた。

bug10707 = '[ruby-core:67389] [Bug #10707]'
module RefinementBug
  refine BasicObject do
    def foo
    end
  end
end

assert(methods, bug10707)
assert_raise(NameError, bug10707) {method(:foo)}

よかったこと

他いろいろ知見あったきがするけどgdbのマクロがruby/rubyに添付されててデバッグ便利そうだからgdbでデバッグしておけばよかった、みたいなしょうもないのもある。

感謝

ちょっとだけRuby直すのチャレンジしてみたけど大変だった。

Rubyのコアコミッターの人たち、こういうバグ報告をうけて毎日直すのなかなかすごい。 報告受けて調べて、パッチあったらパッチ見てレビューして当てて...(自分で直すより大変なのでは)

Ruby開発者の方々への感謝の気持ち深まった。ありがとうございます。

RubyのしくみRHGのおかげでRubyのしくみちょっと分かるようになった。 この本なかったら貢献出来なかったと思う。 ありがとうございます。