WSL上でRuby on Rails + MySQLの環境づくり

# <font color="red">注意</font>
この記事は古いのであまり参考にしないほうが良いです。
似たようなエラーがでたときの対処程度に使っていただければ...
(そのうち記事を削除する予定です)

# はじめに と 注意
Ruby on Rails + MySQLの環境構築をしていく記事です。  
先人様の記事の内容を主に進めていって、エラーが出たところの解決策を書いてます。  
初記事なのでやさしい目で見てください。  

# 背景
Rails + MySQL でアプリ作ってみたいけど環境構築で意味わかんないエラー出ちゃった。  
全部Windowsのせいにしよう(逃避)。  
でもmac持ってない......WSLならできるかな...？  

(ちなみに過去にWSL上で開発環境整えようとして失敗した。)

# 対象
- **WSL上**でRuby on Railsの開発をしたい！
- SQLiteじゃなくてMySQLでやりたいけど環境構築わかんね！

という方向け。  

# 環境
- Windows 10 Home 64bit
- WSL( Windows Subsystem for Linux ) Ubuntu 18.04.3 LTS

# 1. WSLにRuby on Rails環境を整える
さっそく他人様まかせで申し訳ないですが  
とても、とても素晴らしい記事があるので
**ほぼ**これを参考にやっていきます...  

- [Windows10 で WSL を使って Rails 環境を構築したときのメモ](https://qiita.com/ksh-fthr/items/64a4e86c8bad08322c94)  
  - WSL導入もあります、シンボリックリンクまでやってください！
  - Rubyのバージョンは2.6.3にしました。  

<font color="Orange">**※一部別の方法でインストールする部分があるのでリンク先とこの記事を見比べながら作業してください。**</font>
(一個一個のインストールに割と時間かかるので気長に待ちましょう。特にrubyのインストール)
##  少し変更を加える部分 (と軽いhelp)
### 「2. Node.jsを入れよう」部分
nodejsを導入する際の 
 
```
sudo apt-get install npm
```
というコマンドだとnodeおよびnpmのバージョンが最新ではないためやり方を変更。  
**間違えて入れちゃったというひとも指示に従ってすれば大丈夫**(たぶん)

さあ説明を読むぞって思ったひとにはごめんなさい。この記事が神。  
- [続・WSL(Ubuntu)でnode.jsの開発をする準備](https://qiita.com/knockout103/items/37f4598f2ac32ba7cf0c)

さっきのコマンドで入れちゃったって人は「削除する」って項目からやってください。

#### もう1つ
WSLを再起動とかすると`node -v`をしたときにnot found エラーが起きるかも。
そういうときは

```
export PATH=$HOME/.nodebrew/current/bin:$PATH
```
を vim かなんかで`~/.bashrc`に追記して試してみてください。  
vim で追記する方法は下の方。

### 「3. rbenvを入れよう」部分
たいしたことではないですが最後の方で

```
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
```
を ~/.bashrc に追記する(厳密には上の1行はすでに追記されているはず)手順があります。  
「どうやって！？」と思った方は下の方に書いてある「.bashrcに追記ってどうするの！！」を見て追記してみてください。

### 「5. Rubyを入れよう」部分
本当に時間かかります。環境にもよると思うけれど僕は2~30分かかりました(笑)

#### 解決策?
- 普通は長くて10分くらいらしいのでいったん待ってみる。
- "rbenv install ruby 遅い"でググって出てきたのを試す

#### **BUILED ERROR!! となる人へ**  
僕も一度なりました。エラー文中に

```
Try ~~~ `apt -------` 
```
といった感じであったので(詳細なエラー文コピー取るの忘れてました；；)、  
それに従ってコマンド実行すると治りました。


### .bashrcに追記ってどうするの！！
下のコマンドで、vim で .bashrc を開いて一番下とかに追記していく。

```
vim ~/.bashrc
```
vim の使い方はこちらでどうぞ   
- [知識0から始めるVim講座](https://qiita.com/JpnLavender/items/fabcc79b4ab0d52e1f6d)  

# 2. Ruby on Rails + MySQL
Ruby on Railsの環境構築お疲れさまでした。  
僕自身この記事を書きながらやっていたら3時間程度たっていました...笑  
<b>ということで次はMySQLです。</b>  

## MySQLのインストール
まずはMySQLをインストールしていきます。が、ここでもとても良い記事を見つけました。   
- [WSLのUbuntu 18.04でMySQL 5.7をセットアップ](https://qiita.com/kamina/items/35169738c57978b669c0)

これ通りに行えばエラーなく行けるはずですが、  
過去にMySQLいれたことある人や間違えちゃった人はエラーが起こるかも。(体験談)  
僕の場合はWSL上からきれいにMySQLを消してもう一回やればいけました。  
過去のMySQL関連のファイルとか消したくないって人以外は下記コマンドを実行しましょう。

```
sudo apt-get remove --purge mysql-*
sudo apt-get autoremove --purge 
sudo rm -r /etc/mysql
sudo rm -r /var/lib/mysql
```
MySQLが起動中だとうまく全ファイルを消せないので、 
 
```
sudo service mysql stop
```
としてサーバを停止してから行ってください。
またサーバが止まらない！止められない！という方は
MySQLのプロセスを確認して

```
ps ax | grep mysql
```
でてきたプロセスを片っ端から`kill`していけばサーバが停止します。

```
sudo kill プロセス番号
```

## Railsと組み合わせる
 MySQLのインストールが終わったのでRailsアプリケーションのデータベースをMySQLとして作っていきます。  
 まずはRailsで使うMySQLのアカウントを作ります！  
 rootでログインして、  

 ```
 mysql -u root -p
 ```
 現在あるアカウントをチェック

 ```
 select User,Host from mysql.user;

+------------------+-----------+
| User             | Host      |
+------------------+-----------+
| debian-sys-maint | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
 ```
Rails用のアカウントを作ってチェック

```
create user 'ユーザネーム'@'localhost' identified by 'パスワード';
select User,Host from mysql.user;

+------------------+-----------+
| User             | Host      |
+------------------+-----------+
| debian-sys-maint | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| railsuser        | localhost |
| root             | localhost |
+------------------+-----------+
```
ちゃんと追加されました！

 次はRails上でMySQLを使うためのgemをインストールしていきます。

 ```
gem install mysql2
 ```
 しかしここでエラー

 ```
 ERROR: Error installing mysql2:
        ERROR: Failed to build gem native extension.
-省略-
mysql client is missing. You may need to 'apt-get install libmysqlclient-dev'  or 'yum install mysql-devel', and try again.
 -省略-
 ```
 指示に従って、一応`sudo`をつけて...

 ```
 sudo apt-get install libmysqlclient-dev
 ```
 もう一回..!

 ```
 $ gem install mysql2
Building native extensions. This could take a while...

...

Done installing documentation for mysql2 after 0 seconds
1 gem installed
 ```
 通りました。

 次にデータベースをMySQLに指定したRailsアプリケーションを作成。名前は適当。

 ```
 rails new mysql-app -d mysql
 ```
 次にデータベース設定ファイルの書き換えをします。  
 Ruby on Railsの環境を構築したときにシンボリックリンクを設定したフォルダがあると思うのでそこに先ほど作ったRailsアプリケーションを移動。  
~~最初からそこで`rails new`すればよかったのでは?~~

 ```
 mv アプリの名前 移動先 -r
 ```
 vscodeを起動  
 `ファイル > フォルダを開く > Railsアプリ(僕の場合mysql-app)`  
 を選択してvscodeで開く。  
 `config > database.yml` を開いて自分の登録したユーザネームとパスワードを入力します。

 ```
default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: [ユーザネーム]
  password: [パスワード]
  socket: /var/run/mysqld/mysqld.sock

development:
  <<: *default
  database: mysql_app_development

test:
  <<: *default
  database: mysql_app_test

production:
  <<: *default
  database: mysql_app_production
  username: mysql_app
  password: <%= ENV['MYSQL_APP_DATABASE_PASSWORD'] %>
 ```
セーブ後データベースを作って

```
rails db:create
```
アプリケーションを起動して

```
rails s
```
ブラウザ(http://localhost:3000) で確認出来たら終了です！  
お疲れさまでした。

![a.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/470697/b31656e4-8153-fc98-b3dc-46b3b65750b0.jpeg)

参考
- [Ruby on RailsでMySQLを使用・接続する際の手順と注意点](https://arrown-blog.com/rails-mysql/#gem_mysql2)
- [RailsのDBを(初めから| |後から)MySQLに変更する](https://qiita.com/reeenapi/items/9fc38c4f2f8186c78288)