OSSにコントリビュートをしたよ

Rubyにコントリビュートをしたよ。

Fix IO#set_encoding ignoring conversion options for Encoding objects by hanjyou0811 · Pull Request #19215 · ruby/ruby
Fixes https://bugs.ruby-lang.org/issues/22209 IO#set_encoding ignores conversion options such as newline: :universal whe...

動機

割と前からOSSにコントリビュートしたいと思いつつ、ハードルが高いイメージを持っていたので手を出せずにいました。
Rubyについて学ぶ機会があり、プログラミング言語Rubyなどを読んでいたらエコシステムを含めOSSコントリビュートが盛んに行われていることを知り、Rubyへのコントリビュートに興味を持ちました。

やったこと

Redmine(問題追跡システム)を見てissueを探しました。

  • 手元の環境で容易に再現が出来そう
  • 修正を加える箇所を想像しやすい

の2点を気にしながら探していました。

他にも色々見ましたが、https://bugs.ruby-lang.org/issues/22209 とかが特に取り組みやすそうだったのでこれに取り組むことにしました。
概要としては、

1
2
3
4
5
# 文字列で指定
io.set_encoding("UTF-8", newline: :universal)

# Encodingオブジェクトで指定
io.set_encoding(Encoding::UTF_8, newline: :universal)

みたいなのを書いたときに、文字コードの渡し方によって変換の設定が無視され、後者だと改行変換が行われないという感じです。
io.cのset_encoding関数の実装が

1
2
3
4
5
6
7
if (is_encoding_name(value)) {
set_encoding_from_name(value);
prepare_conversion_options(options);
}
else {
set_encoding_from_object(value);
}

になっていることが原因だったので、prepare_conversion_options(options);を分岐の外で呼び出すように修正しました。
正しい変換オプションがちゃんと実行されることと、間違った変換オプションを渡したときにArgumentErrorが出ることを確認するテストを追加してPRを出しました。

OSSにコントリビュートをしたよ

https://hanjyou0811.github.io/ossコントリビュート.html

Author

kiku

Posted on

2026-10-12

Updated on

2026-10-12

Licensed under