WSL SLESにruby on railsを入れた話

　Windows 10のWSL(Windows System Linux)における、SUSE環境の片割れのSLES(SUSE Linux Enterprises Server)にてRubyとRails入れたお話。

# 概要
　Windows10において、コンソール環境であればほぼ完全なLinux環境を得ることが可能になっている。その昔Cygwinとかmingwとか使ってエミュレーションしていたころに比べれば、その明確な再現度は火を見るよりも明らかなほど。
　もちろん仮想OS環境と違いGUIを入れるにはXサーバーのエミュレータが必要になるが、今回のテーマはRubyとRailsをSLES側に入れることなのでそのあたりは他の記事で面倒を見てもらう。

## Qiitaに記事を書く理由
　WSLでLinuxする場合すでに先人としてUbuntuさんがいらっしゃって、そちらの情報はいくつも提供されているが、openSUSEやSLESはまだあまり記事がない状況である。
　今回、いろいろな情報を探し求めながら作った環境と成果をここに発表して、Qiitaの記事の継ぎ足しとする。

## SLESを組み立てる
　前提としてWSLが入れられるようにwindows10を設定しなおすことが大事。
　やり方は下記を参照のこと。
　→[Bash on Ubuntu on Windows, Ruby, Python, Jupyterなどのインストール](http://qiita.com/Aruneko/items/c79810b0b015bebf30bb)

　上記の"Bashをインストール"の前までやった後、もしInsider(デスクトップの右下にInsider Previewとか書いてある状態)であればSLESをストアから入手できるので、Windows10のストアでSLESをポチる。
　(逆に現状Insiderだと、コマンドプロンプトでlxssとかbashとか打つと、ストアから入手してくれと警告がくるようになったので注意)

　入手したら、起動するまえにSUSEのページに行ってユーザー登録をする。
　[SUSEのdeveloper Subscription](https://www.suse.com/ja-jp/subscriptions/sles/developer/)で、1年分のsubscriptionを無料で得られる。
　ここで得られるSubscriptionキーをSLES起動時に要求されるので、入力してやるとzypperのリポジトリなどにSLES公式のものが登録されるなどしてくれる。

　起動後の基本的な処理をしたら次へ。

### 日本語環境を整える
　`sudo yast`でパッケージ管理ツールを立ち上げ、softwareのlanguagesからJapaneseを選択し、各種パッケージをインストールする。たぶんdesktop-transferが入ってれば大丈夫だと思う。font類はx11使いたいなら。
　その後に以下の通りにコマンドラインへ打ち込む。

```
$ echo 'LANG=ja_JP.utf8' >> ~/.bashrc
$ echo 'export LANG' >> ~/.bashrc
$ source ~/.bashrc
```

　確認で`locale`を打ち込んでみて、設定したja_JP.utf8で染まっていて、`zypper`だけ入力でヘルプが日本語で表示されたらOK。

### リポジトリ追加
　再び`sudo yast`する。yastの画面が日本語になっていろいろ具合がよくなっているはず。ここでソフトウェア=>ソフトウェアリポジトリと進むと、現在登録されているリポジトリの一覧が表示される。ここでTABキーを押して選択している個所を動かし、"追加"まで持ってきてエンターすると、リポジトリ先を検索できるようになるので、"登録サーバーからの拡張機能とモジュール"にチェックを入れてから右下の次へ。
　すると公式で準備したリポジトリサーバーの一覧が表示される。
　この中で製品サブスクリプションのみで使用できる、以下の3つを導入する。

　"SUSE Linux Enterprise Software Development Kit 12 SP2"
　"SUSE Package Hub 12 SP2"
　"Web and Scripting Module 12"

　この3つにチェックを入れて次へをすると、規約等の画面が出るので同意して次へ送っていけば、これらのリポジトリが登録されて、yastはもちろんzypperでも使用可能になる。

### nodejsのためにnvmを導入する
　railsを稼働するにはnode.jsが必要になるが、せっかくなのでnvmでnodejsのバージョン管理をしてしまう。

　とりあえず以下のように打ち込んでいけばnvmは導入可能。

```
$ git clone git://github.com/creationix/nvm.git ~/.nvm

$ echo 'if [[ -s /[ホームディレクトリ]/.nvm/nvm.sh ]] ; then source /[ホームディレクトリ]/.nvm/nvm.sh ; fi' >> ~./bashrc

$ source ~/.bashrc
```

　nvmはrootに入れなくても動く。
　このあと`nvm install [nodejsのバージョン]`でnvm管理によるnodejsのインストールが可能となる。
　とりあえず最新版でも問題はないので、`nvm ls-remote`の一番下にあるバージョンで構わない。

## rails導入

### デフォならReils 4止まり。
　SLESにはデフォでrubyが入っているのでこのまま`gem install rails`することもできるが、ただ実行するとrubyのバージョンが古いと怒られる。SLESのrubyは2.1.9で、最新のrailsが欲しがる2.2.2に届かないため。このままだとrailsは4止まりなので、rails4でよければこのまま`gem install rails --version="~>4.0"`と打ち込めばバージョンを選べる。だが、素の状態だといくつか必要なファイルがないと怒られる可能性があるので、いくつかzypperに頼んで入れてもらう。

```
$ sudo zypper install ruby-devel libxml2-devel libxslt-devel
```

　ruby-develでヘッダファイルがないことを、libxml2-develとlibxslt-develでnokogiriにエラーを吐かれるのでそれぞれ入れておく。
　これで`sudo gem install rails --version="~>4.0"`すれば問題なくRails4の範囲での最新版をインストールできる。

### rbenvで新しいrubyを入れる
　ただ、Railsを入れられるには入れられたが、うまくrailsコマンドが発動しない。
　どうせRails5が必要という話になりそうなので、rbenvでユーザーローカルにrubyを導入してそれ越しにRailsを導入する。
　SLESではrbenv越しにRubyをbuildするので、Buildに必要なライブラリをやはりzypperから持ってくる。これらがないとビルドエラーの原因になる。
　また、Railsはsqliteが必要になるので、こちらも導入しておく。

```
$ sudo zypper install readline-devel zlib-devel openssl-devel sqlite3-devel
```

　これらを導入したら、rbenvを入れていく。
　これらも、単純にgitで一通りのファイルをそろえられるというよい時代に

```
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
 
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc
 
$ source ~/.bashrc
```

　rbenvの導入に成功していれば、`rbenv --version`と打ち込んだらversion表記が出るはずなので、このまま`rbenv install`してしまう。最新版は現時点では2.4.1だが、この記事を参照されている時期によって最新版のバージョンは異なるはずなので、`rbenv install --list`でrubyの有効なバージョンが表示されるので、適切なバージョンを指定して`rbenv install`をする。
　必要なファイルを自動的に入手してrubyを構築してくれるので、エラーが出なければrubyをユーザーローカルで入れられるので、`rbenv global`で入手したバージョンを設定して終了。

### いよいよRails
そしてRailsの導入である。
必要なファイルはそろっているので、ひたすらgemに頼るだけ。

```
$ gem install bundler
$ gem install sqlite3
$ gem install rails
```

これで、手元のruby環境にrailsが入るはずなので、それを使ってRailsプロジェクトをスキャフォールドして開発していけばいい。

## まとめ
　WSLを弄ってきた中で、Windows管理のフォルダとWSL管理のフォルダ間にどうしても距離が発生することや、ストアアプリ化したことによってVscodeのターミナルで使用する方法をまた別で見つけなければならないことから、そのあたりをうまく埋めていく必要がありそうである。
　そのあたりは別の機会に解説する。

参考:
[https://www.server-world.info/query?os=SUSE_Linux_Enterprise_12&p=download](https://www.server-world.info/query?os=SUSE_Linux_Enterprise_12&p=download)