Bash on Ubuntu on Windows に Ruby をインストールした。gemでnokogiri導入まで。

Bash on Ubuntu on Windows は導入されている前提で。
もしくは以下の手順で導入を。
addnote.hatenablog.com


Windowsで普通にRubyをインストールして使っていたのですが、
gemを使ってnokogiriなどのライブラリを入れることができずに閉口。
原因はどうも依存ライブラリにありそうだぞ…?と思ったのですがWindowsでライブラリ入れんのどうやんのやってなって諦めました(笑)

まあ実際はこんなに簡単に諦めたわけではなくて、一日費やしたのですが。


で、当初はVerturalBoxにlinux mintを入れてそこでRubyをインストールしようかなと思っていたのですが、
Windows上でナチュラルにUbuntuが動かせるようになったじゃないか!もしや快適にRuby環境を構築できるのでは!と思い立ったのでした。以上前置き。



まずはUbuntuRubyをインストールする方法を選択します。

①apt-getコマンドでパッケージ管理システムからインストールする
②最新版を自分でビルドしてインストール
③非公式リポジトリを追加してインストール

まずは①から見ていきます。
このapt-getコマンドで素直に導入する方法は、Rubyのバージョンが少し古いものしか置いてないので、
後々不便なことが発生します。後述しますが。


一応2016/09/03現在のリポジトリ情報ですが、

$ aptitude search ruby
ruby
ruby 1.9.1
ruby 1.9.3
ruby 2.0

いくつかバージョンありますが、apptitude install ruby すると1.9.1が入ります。
リポジトリからインストールすると最新で2.0ということになります。


Rubyを素直に使う文にはこれらのRubyのバージョンでなんら問題無いと思います。
ただ、gemを扱おうと思うとエラーが結構出ます。
依存ライブラリがないというエラーが出るので関連ライブラリを入れたいところですが、、
ruby-version > ruby2.0 みたいなエラーが出て八方塞がりになってしまいました。
なので別の手段で最新のバージョンをインストールしたいところです。



②の最新版を自分でビルドしてインストールは、以前わたしがLinux mintに入れた時の方法です。
この方法でいれたLinux mint上のRubyとgemは問題なく動いているので、おそらく同様にUbuntu on Windowsでも動かせるとは思います。
ただめんどくさかった。なので今回はパス。
一応その時のインストール方法はこちら↓
addnote.hatenablog.com




で、今回は③非公式リポジトリを追加してインストールで最新版Rubyをインストールします。
非公式と言うとあれですが、現在のapt^getできる公式リポジトリだけではなく、有志などで運営されているリポジトリを追加して、
apt-gtできるようにする方法です。


まずはリポジトリを追加できるようにします。
apt-add-repositoryコマンドをインストールします。

$ sudo aptitude install software-properties-commmon

software-properties-commonをインストールすることでコマンドが使えるようになるみたいです。
早速インストールしようとしたら、なんどやってもパッケージが見つかりませんと出て混乱。
でもsearchで見つかるし~…と色々やってたら、インストール済みだったというオチ。


次に、非公式リポジトリをapt-add-repositoryコマンドで追加します。
今回はRubyの最新版を入れたいので、Brightboxを追加します。
BrightboxはLessを提供している会社が公開しているリポジトリのようです。たぶん。

$ sudo apt-add-repository ppa:brithbox/ruby-ng

こいつを実行するとインストール前にリポジトリの説明が入ります。
Next generation Ubuntu packages for Ruby 2.3, 2.2, 2.1, 2.0, 1.9.3, 1.8EE
と出てくるので、このリポジトリを追加することでRuby提供用のパッケージが追加されることがわかると思います。やったね!


追加できたら普通にRubyをapt-getしてみましょう!
取り得えず更新をかけます。

$ aptitude update

Rubyでサーチしてみます。

$ sudo aptitude serach ruby

Ruby1.8から2.3までがずらーっと出るはずです!あとは好きなバージョンをインストールすればいいですね!
ちなみに、

$ sudo aptitude install ruby

rubyでインストールすると、変わらず1.9.3がインストールされるので、バージョンをしっかりと明示してください。

$ sudo aptitude install ruby2.3

これで現在最新安定版の2.3.1が入りました!





さあお次はgemを使えるようにしましょう!
目標はnokogiriというライブラリのインストールまでです。
Windowsインストーラーで入れたRubyではgemがまともに使えずnokogiriが入りませんでした(私の知識不足が間違いなく原因ですが)。
このBash on Ubuntu on Windowsで入れることができたら最高ですね!
現状、こんなに簡単にRubyを入れられただけでも「ありがとう!Microsoft!」といった感じではありますが。笑


ますはちゃんとgemそのものが扱えるかどうか。適当に更新でもかけてみましょう。
ちゃんとsudoはつけてあげないとエラーになります☆

$ sudo gem upadate

一回目だとエラーとちゃんとアップデートされたものが混在するのでわかりにくいかと思いますが、
2回gem updateしてあげるとエラーだけが表示されますよ。

で、私の場合はしっかりと(?)エラーがでました。
このBash on Ubuntu on Windows(長い)は色々と足りないものがあるので。
結構依存ライブラリでエラーが発生します。
例えば、gccというC言語コンパイラが入ってないからインストールできない!というエラーとか。
なのでコツコツとエラー文で言われている足りないものをインストールして上げる必要があります。

私の環境では、io-console と json と psych がインストールできんかった的なエラーがでました。

もっとよく見ると、

Building native extensions. This could take a while...
ERROR: Error installing io-console:
       ERROR: Failed to build gem native extension.

ビルドができていませんね。
Rubyのファイル関連でどうもみつからないヘッダーファイルとか、足りないものがありそうなので追加します。

$ sudo aptitude install ruby2.3-dev

ruby2.3の開発者ツールをインストールしてみます。
その後もう一度gem updateしたら無事アップデートができました\(^o^)/


ではnokogiriをインストールしてみます

$ sudo gem install nokogiri

コケました(´・ω・`)
またもやビルドエラー。
エラー文を見ると、

checking if the C compiler accepts ... yes
checking for gzdopen() in lz ... no
zib is missing: necessary for building libxml2

このyesとかnoとかが親切にも足りなものを教えてくれてます。
ここでは、zlibがないので、libxml2をビルドできなかったといってます。

zlibをインストールしましょう。
Ubuntuの場合、zlib1gというものを入れてあげればいいのですが、私はすでに入ってました。
すでに入ってるのにzlibがないというエラーが出ている場合は、大抵開発者ツールのほうが入ってないことが原因です。

$ sudo aptitude install zlib1g-dev

インストールできたら再度nokogiriにアタックしてみます。

$ sudo gem install nokogiri

Building native ectensions. This could take a while... のままそこそこ待ちました。
どきどき。
長い場合は5分ほど待つかもしれません。

で、 1 gem installed の言葉とともに無事インストールできました!!わーい!




以上、かなり長くなりましたが、
Bash on Ubuntu on Windows でもRubyの環境構築は可能で、むしろ簡単に入れることができました!
もうgemも普通に使えるので、他のライブラリを入れたい時もすぐに入れることができそうです。
それにBashなら足りないライブラリもすぐに入れることができるのでやっぱりいいですね!




今回参考にしたページはこちらです。
http://blog.hrendoh.com/installing-ruby-2-2-on-ubuntu-with-ppa-package/




https://twitter.com/yasukoKtytwitter.com