わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

CygwinにRuby 2.5.0devをインストール

結論から申し上げますと,rbenvを適切に導入・更新*1していれば,以下のコマンドで,ビルドとインストールができました.

CONFIGURE_OPTS="--disable-install-doc" rbenv install 2.5.0-dev


ふだん使いのCygwinおよびLinux環境では,これまで,rbenv install 2.4.0-devを実行してインストールやアップデートをしてきました.
だいぶ前より,2.5.0-devに上げたいと思っていたのですが,Cygwinでのビルドに失敗して,躊躇していました.
実行コマンドはrbenv install 2.5.0-devです.昨夜,実行したときには,ログファイルに次の内容が書かれていました.

(パス:一部省略)/ruby-trunk/lib/rdoc/parser/ripper_state_lex.rb:308: [BUG] Segmentation fault at 0x0000000000000001

ここであきらめずに,打開策を探ってみましょう.まずは「ripper_state_lex.rb」というファイル名に,単語を加えて検索すると,バグレポートが見つかりました.

今年10月の報告です.インストールはできたらしいけれど,gem実行時に不具合が生じるとのこと.コアダンプしないようにするオプションも,書かれていました.
そのオプション「--no-ri」に検索語を切り替えて,もう少し探すと,ビルド時,およびgem実行時に,rdocを不要とする方法が見つかりました.

コマンドは「./configure --disable-install-doc」です.先ほどエラーで終了したところのruby-trunkに移動して,念のためmake cleanをしてからこのコマンドを実行し,結果を待っている間,エラーが出るたびにこんなのを実行して,makeとmake installをするのは嬉しくないなと思い,再度,検索しました.良いのがありました.

そこで書かれているコマンドは「CONFIGURE_OPTS="--disable-install-rdoc" rbenv install 2.5.0-dev」です.rbenv install 2.5.0-devを実行しなさい,ただしその実行に限り,環境変数CONFIGURE_OPTSの値は--disable-install-rdocですよ,というものです.
オプションをよく見ると,「--disable-install-rdoc」となっており,先ほどの「--disable-install-doc」と比べて,rがついています.違いは,以下のページに書かれていました.

「--disable-install-rdoc」とすればrdocをインストールしない,「--disable-install-capi」とすればC APIドキュメントをインストールしない,そして「--disable-install-doc」とすると両者をインストールしない,のですね.ふだん使いには,どちらも必要ありません.
そうこうしていると,先ほどのconfigureコマンドが無事に終了していました.なのだけれど,makeすべきではないでしょう.rbenv installのやり直しです.cdでディレクトリを離れてから,再掲になりますがコマンドを実行しました.

CONFIGURE_OPTS="--disable-install-doc" rbenv install 2.5.0-dev

ほどなく,妻から声がかかりました.家の雑用をし,座席に戻ると,エラーなくインストールを終えていました.
簡単に,バージョン2.4と2.5の違いを確認してみました.Dir.children*2を使ってみます.

$ rbenv versions
  system
* 2.4.0-dev (set by /home/takehikom/.rbenv/version)
  2.5.0-dev
$ ruby -v
ruby 2.4.3p205 (2017-12-14 revision 61245) [x86_64-cygwin]
$ irb
irb(main):001:0> Dir.children("/home")
NoMethodError: undefined method `children' for Dir:Class
        from (irb):1
        from /home/takehikom/.rbenv/versions/2.4.0-dev/bin/irb:15:in `<main>'
irb(main):002:0>
$ rbenv global 2.5.0-dev
$ rbenv versions
  system
  2.4.0-dev
* 2.5.0-dev (set by /home/takehikom/.rbenv/version)
$ ruby -v
ruby 2.5.0dev (2017-12-15 trunk 61279) [x86_64-cygwin]
$ irb
irb(main):001:0> Dir.children("/home")
=> ["takehikom"]
irb(main):002:0>

2.4では「NoMethodError: undefined method `children' for Dir:Class」というエラーが出て,2.5では出ませんでした.とりあえず,思うとおりのことができました.
ドキュメント類は,ひょっとしたら使うかもしれないので,Linux環境では従来どおりのrbenv install 2.5.0-devを使用します.Cygwinでは上記コマンドにするとともに,echo "gem : --no-ri --no-rdoc" >> ~/.gemrcを実行しておき,gemでドキュメントをインストールしないようにしました.