Skip to content

Instantly share code, notes, and snippets.

@JunichiIto
Last active July 23, 2021 01:50
Show Gist options
  • Save JunichiIto/fbce2d0927412ea15e687d7b44a02a86 to your computer and use it in GitHub Desktop.
Save JunichiIto/fbce2d0927412ea15e687d7b44a02a86 to your computer and use it in GitHub Desktop.

まず最初にお礼を述べさせてください。オープンソース活動として日々irbを開発してくださり、どうもありがとうございます。新しいirbは大変便利になりました。これからの進化にも大きく期待しています。

この点を明確にした上で、返信を書きます。

I think it's good to receive many reports, but they all say that "the problem is that the IRB itself and the code entered into the IRB are executed in the same interpreter".

この点についてはごもっともです。実装の都合上、IRBとrubyコマンドで実行したときの挙動が多少異なるものにならざるを得ないことも理解しているつもりです。

ではなぜ私がこのようなissueを何度も投稿しているのか、その背景を説明させてください。

私は「プロを目指す人のためのRuby入門」というRubyの入門書を出版しています。その中で「サンプルコードはirb上で実行してみましょう」という説明を入れています。

Screen Shot 2021-07-23 at 10 36 57

書籍上のサンプルコードはIRB上でもrubyコマンド上でも基本的に同じように動く、という前提でそのような説明をしています。実際、この本の最初の版を執筆した当時、つまりRuby 2.4の時代はIRBはほぼrubyコマンドで実行したときと同じ挙動になっていました。

そして現在、この書籍の改訂版を執筆しています。改訂版ではRuby 3.0.1を対象にしています。当然、IRBもRuby 3.0.1でインストールされるものを使っています。既存の書籍の改訂なので、多くのサンプルコードは第1版と同じものが載っています。しかし、IRBで実行するとRuby 2.4の頃とは異なり、rubyコマンドで実行した結果と異なるものがいくつか見つかりました。

「プロを目指す人のためのRuby入門」はRuby言語にまだ精通していない初心者を対象読者としています。私自身は「IRBとrubyコマンドの結果が異なる点があっても当然」と考えることができますが、初心者にそうした考えを期待するのは難しいです。実際、 ruby/irb#256 で報告したissueは第1版のサンプルコードをRuby 3.0のIRB上で実行した読者から「:12345のようにIRBに入力しても、書籍通りのエラーが出ない。IRBも反応しなくなってしまった」という報告を受けて私がissueに登録したものです。

Screen Shot 2021-07-23 at 10 11 38

もちろん、サンプルコードをファイルに保存してrubyコマンドで実行すれば書籍の説明と同じ結果が得られますが、IRB上で実行することに比べれば手間がかかります。私は改訂版でもIRBをRubyにおけるベストな学習環境として推奨したいと考えています。

「issueを報告する前にパッチを書くべきだ」という指摘もそのとおりだと思います。ただ、私のスキルではすぐにパッチを書くことはできません。そのため、「まずは報告だけでも」という思いからissueを登録させてもらいました。ただ、今後はなるべく控えようと思います。

また、IRBとrubyコマンドの実行結果が異なる点については適宜書籍上で「IRB上では実行結果が異なるため、サンプルコードをファイルに保存してrubyコマンドで実行してください」というような注釈を入れることにします。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment