Windows10でのRailsの導入がうまくいかず、WSLを用いた話

#はじめに
Windows10でRailsの環境構築をしたところ、`rails server`コマンドを実行したときにページをうまく表示できなかったので、WSLを用いることにしたときの備忘録です。

#環境

- Windows10(64bit)
- Surface Pro 4
- Ruby 2.6.5

#Windows10での環境構築（失敗）
結局解決せずに諦めたので、興味がない方は読み飛ばしてください。

まず gem 経由で Rails をインストールします。

```
$ gem install rails -v 5.0.7.2
```
Rails プロジェクト用のディレクトリを作成し、そのディレクトリに移動してプロジェクト`new-app`を作成します。

```
$ mkdir workspace
$ cd workspace
$ rails new new-app 
```
`new-app`ディレクトリに移動して`rails server`を実行したところ、次のエラーが発生しました。

```
cannot load such file -- sqlite3/sqlite3_native (LoadError)
```

そこで、色々調べた結果、以下の方法を実行しました。

##1. sqlite3.dllとsqlite3.exeをPathがとおったディレクトリに配置

[SQLite Download Page](https://www.sqlite.org/download.html)
の「Precompiled Binaries for Windows」欄にある「sqlite-dll-win64-x64-3310100.zip」をダウンロード・解凍し、入っている「sqlite3.dll」を`C:\Ruby26-x64\bin`に配置します。

また、同じ欄にある「sqlite-tools-win32-x86-3310100.zip」をダウンロード・解凍し、入っている「sqlite3.exe」を`C:\Ruby26-x64\bin`に配置します（圧縮ファイル名の数字が変わっているときもあるので、適時読み替えてください）。

##2. sqlite3_native.soファイルを生成して配置
同様に[SQLite Download Page](https://www.sqlite.org/download.html)の「Source Code」欄にある「sqlite-amalgamation-3310100.zip」をダウンロード・解凍して`C:`下に配置し、以下のコマンドを実行して`sqlite3_native.so`ファイルを生成します（ファイル名の数字やRubyのバージョンは適宜読み替えてください）。

```
gem install sqlite3 --platform=ruby -- --with-sqlite3-include=C:/sqlite-amalgamation-3310100 --with-sqlite3-lib=C:\Ruby26-x64\bin
```

これで`C:\Ruby26-x64\lib\ruby\gems\2.6.0\gems\sqlite3-1.3.14\lib\sqlite3\sqlite3_native.so`にファイルが生成されます。

次に、`C:\Ruby26-x64\lib\ruby\gems\2.6.0\gems\sqlite3-1.3.13-x64-mingw32\lib\sqlite3`に新しくディレクトリ`2.6`を作成します。このディレクトリの名前はRubyのバージョンに対応させてください。そしてこの中に先ほど生成した`sqlite3_native.so`をコピーします。

上記の作業の後にもう一度`rails server`コマンドを実行します。すると今度は以下のように表示され、ローカルサーバーが立ち上がりました。

```
=> Booting Puma
=> Rails 5.0.7.2 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
*** SIGUSR2 not implemented, signal based restart unavailable!
*** SIGUSR1 not implemented, signal based restart unavailable!
*** SIGHUP not implemented, signal based logs reopening unavailable!
Puma starting in single mode...
* Version 3.12.4 (ruby 2.6.5-p114), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:3000
Use Ctrl-C to stop
```

ところが、http://localhost:3000/ をブラウザで開くと、以下のエラーページが表示されました。
![sqlite3-error.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610292/bf28b2f7-31c1-b226-6086-66d00b1de0c9.png)

そこで、Gemfile中の

```
gem 'sqlite3'
```
の部分を

```
gem 'sqlite3', '1.3.13'
```
に書き換え、`bundle install`を実行した後に再度試したところ、以下のエラーページに変わりました。
![wrong-number.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610292/61d08622-0637-420f-d309-0d6312cab83b.png)

これを解決しようとしたのですが、 Windows10 で結局 Rails の環境構築に失敗したという記事が多数あり、解決できない可能性が高いと思ったのでWSL( Windows Subsystem for Linux ) を用いてみることにしました。

#WSLを用いたRailsの環境構築
##WSLの導入
まずWSLをインストールします。
Windowsの検索ボックスから「Windowsの機能の有効化または無効化」のウィンドウを出し、「Windows Subsystem for Linux」のチェックボックスにチェックを入れます。インストールが始まるので、それが終わったら再起動します。再起動後、Microsoft StoreでUbuntuを検索し、「入手」ボタンを押してインストールします。その後「起動」ボタンを押すと、そこそこ時間がかかったあとにユーザー名とパスワードの設定を求められます。これでWSLの導入が終わりました。次にいよいよ Rails の環境構築を行います。
##Railsの環境構築
###1. Rubyのインストール
Rubyのインストールに必要な各種ライブラリを入れておきます。

```
$ sudo apt-get update
$ sudo apt-get install make
$ sudo apt-get install gcc
$ sudo apt-get install -y libssl-dev libreadline-dev zlib1g-dev
```
Rubyのバージョン管理を楽にしてくれる rbenv を導入してPATHをとおし、初期設定を行います。

```
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
$ ~/.rbenv/bin/rbenv init
# Load rbenv automatically by appending
# the following to ~/.bashrc:

eval "$(rbenv init -)"
$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc   
```
Node.jsも導入しておきます。ここでもバージョン管理用ツールである n を導入します。

```
$ sudo apt-get install npm
$ sudo npm install -g n
$ sudo n stable
```

Ruby を導入します。

```
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ rbenv install 2.6.5
$ rbenv rehash
$ rbenv global 2.6.5
```

Rails を導入します。

```
$ gem install rails -v 5.0.3
```
Railsを用いるのに必要なSQlite3とbundlerを導入します。

```
$ sudo apt-get install libsqlite3-dev
$ gem install sqlite3 -v 1.3.13
$ gem install bundler
```

以上で準備が整いました。ここからは、失敗したときと同じようにプロジェクトを作成し、サーバーを立てることを試みます。

```
$ mkdir workspace  
$ cd workspace
$ rails new new-app 
$ cd new-app
$ bundle install
$ rails server
```
すると先ほどと同じエラーページ
![sqlite3-error.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610292/bf28b2f7-31c1-b226-6086-66d00b1de0c9.png)
が表示されるので、同様にGemfile中の

```
gem 'sqlite3'
```
の部分を

```
gem 'sqlite3', '1.3.13'
```
に書き換え、`bundle install`を実行した後に再度試したところ、無事に以下のページが表示されました！
![rails-server.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610292/f166d870-33f7-dae7-19b0-01c6a73708cf.png)