Windows10のWSLにRubyとRuby on Railsをインストールするメモ

WindowsのWSL（Windows Subsystem for Linux）にRuby on Rails環境を構築する手順のメモです。

[こちら](https://www.runrails.com/windows/ruby-on-rails-on-windows-10-in-2019/)のブログを見ながら自分で環境を構築したときの手順をメモとして残すものです。
このブログのとおりにやって「Yay!You're on Rails!」まで行けました。
ありがとうございます。
しかしながら、このブログの著者は冒頭で以下のように述べていますので、可能ならMacやLinux上に環境を構築すると良いでしょう(^o^)
ですが、WSL上に環境を構築したい場合はこれが全てです。

>If you want to install Ruby on Rails on Windows, look no further! I recommend that you use either Linux or macOS to develop in Rails if you have the option.


#環境

- Windows 10 Home （ver.1803）
- Ubuntu 18.04


#事前準備
まずはこれからのRubyやRuby on Railsのインストールに必要になるライブラリやアプリケーションをインストールします。

```shell-session
sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev software-properties-common libffi-dev libreadline-dev zlib1g-dev
```

#rbenvのインストール
`rbenv`は複数のRubyのバージョンを管理、切り替える仕組みを提供します。

以下のコマンドでインストールできます。

```
curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer | bash
```

この`rbenv`を使うための準備をします。
この時点では`rbenv`にパスが通っていないのでコマンドラインで`rbenv`と打っても「見つからない」と言われます。
これから`rbenv`をコマンドラインから使えるように以下の3つのコマンドを順に実行します。
最初の2つで`.bashrc`に`rbenv`にパスを通し、初期化するコマンドを追加します。
これで、以後、shellを起動したときに`rbenv`を使えるようになります。
3つ目は今回、今すぐに設定を有効にするためにshellを再起動しています。

```shell-session
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec $SHELL
```

#Rubyのインストール
`rbenv`を使ってRubyをインストールします。
まずは`rbenv`で選択できるRubyのバージョンを確認します。
`rbenv install --list`と実行すると、インストール可能なRubyのバージョンが列挙されます。

```shell-session
shuhey@HelloWorld:~$ rbenv install --list
Available versions:
  1.8.5-p52
  1.8.5-p113
（中略）
  2.6.0-rc2
  2.6.0
  2.6.1
  2.7.0-dev
  jruby-1.5.6
（略）
```
公式サイトによると現時点（2019年2月7日）での最新の安定版は2.6.1なので、`rbenv install 2.6.1`と入力して2.6.1をインストールします。
ダウンロードとインストールにはしばらく時間がかかるのでのんびり待ちます。

```shell-session
shuhey@HelloWorld:~$ rbenv install 2.6.1
Downloading ruby-2.6.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.1.tar.bz2
Installing ruby-2.6.1...
Installed ruby-2.6.1 to /home/shuhey/.rbenv/versions/2.6.1
```

次に使用するRubyのバージョンを指定します。
複数のバージョンのRubyをインストールしている場合、このようにして使用するRubyを切り替えます。

```shell-session
rbenv local 2.6.1
```

Rubyのバージョンを確認します。

```shell-session
shuhey@HelloWorld:~$ ruby -v
ruby 2.6.1p33 (2019-01-30 revision 66950) [x86_64-linux]
```

#Ruby on Railsのインストール
`gem`コマンドでインストールします。

```shell-session
gem install rails
```

#bundlerのインストール
`bundler`はRailsプロジェクト内で使用するgemを管理する仕組みです。
プロジェクト内に置いた`Gemfile`というファイルに記載された内容に基づいてgemをインストールしたりできます。
プロジェクトごとに必要なバージョンのgemをインストールできるのでとても便利です。

これも`gem`コマンドでインストールします。

```shell-session
gem install bundler
```

#Ruby on Railsプロジェクトの生成
プロジェクトの生成には以下の`rails new`コマンドを使います。
以下の`HelloRails`の部分はプロジェクト名なので任意の名前を指定します。

```shell-session
rails new HelloRails
```

プロジェクトの生成が完了すると、上のコマンドを実行したディレクトリに`HelloRails`というディレクトリができます。

#Ruby on Railsアプリの実行
作成されたRailsプロジェクトのディレクトリに移動します。

```shell-session
cd HelloRails
```

プロジェクトのディレクトリ直下で`rails server`コマンドを実行します。

```shell-session
shuhey@HelloWorld:~/HelloRails$ rails s
/home/shuhey/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/railties-5.2.2/lib/rails/app_loader.rb:53: warning: Insecure world writable dir /home/shuhey/.rbenv/versions in PATH, mode 040777
=> Booting Puma
=> Rails 5.2.2 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.0 (ruby 2.6.1-p33), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop
```

上記のように表示されたらブラウザを開いて`localhost:3000`にアクセスします。
以下のように表示されたらOKです。

<img src="https://qiita-image-store.s3.amazonaws.com/0/245438/c6adc36a-fb37-7bfa-9b41-1a94cd8ab88c.png" title="" alt="image.png" width="60%" height="" >


#「can't activate sqlite3」エラーが出た場合の対処
`localhost:3000`にアクセスしたときに以下のようにエラーが表示されるかもしれません。


```shell-session
#<LoadError: Error loading the 'sqlite3' Active Record adapter. Missing a gem it depends on? can't activate sqlite3 (~> 1.3.6), already activated sqlite3-1.4.0. Make sure all dependencies are added to Gemfile.>
...（略）
```

<img src="https://qiita-image-store.s3.amazonaws.com/0/245438/4829f2ef-a707-5719-40af-2f454865433e.png" title="" alt="image.png" width="60%" height="" >


これを解決するためには`Gemfile`ファイルを編集します。
viで`Gemfile`を開きます。

```shell-session
vi Gemfile
```

sqlite3のgemの記述がおそらく`gem 'sqlite3'`となっていると思うので、これを`gem 'sqlite3', '~> 1.3.6'`に変更します。
Gemfileを保存して閉じます。

`bundle install`コマンドで`Gemfile`に加えた変更を適用します。

```shell-session
bundle install
```
すると、出力の中に以下のような`sqlite3`に関する部分があります。

```shell-session
Using sqlite3 1.3.13 (was 1.4.0)
```

以前はバージョンが1.4.0だったのが1.3.13になったことがわかります。

これで改めて`rails server`コマンドを実行すると、「You're on Rails!」と表示されると思います。