[Rails] DB設定と操作(mysql)、VSCodeでのRubocop、便利な拡張機能

## 背景
Railsアプリで使用するDB設定(mysql)をまとめました。
また、VSCodeでのRubocop設定、その他便利な拡張機能をまとめました。

私の環境ではWindows上でVSCodeを使用し、WLS(Ubuntu)を操作しています。
WLSを使っている理由は、環境構築方法が Mac とかなり近いからです。

また、本記事はRailsのインストールができていることを前提とします。
下記に前提となるところの環境構築をまとめたので、参考にしていただければと思います。
[[Rails] WindowsのWSL2(Ubuntu、VSCode)にRailsをローカルインストールしてgitコマンドでgithub(master)にpushする](https://qiita.com/Taka5689/items/7f209ffb46906cc86be6)

## DB設定(mysql)
① 下記コマンドを実施し、mysqlをインストールします。

```
sudo apt install mysql-server mysql-client
```
② 次に下記コマンドでmysqlのライブラリをインストールします。

```
sudo apt install libmysqlclient-dev
```
このライブラリをインストールしないと、後述するmysqlのgemをインストールするタイミングでエラーが出ます。

※ちなみにmysqlのgemをインストールする際は高頻度でエラーが発生するみたいです。
エラーが発生する原因は Mac、CentOS、Ubuntuなどで異なっていて、それぞれの解決方法があるみたいです。（Macではbundle configを設定するなどの解決方法）

③ インストールできたら下記コマンドで状態を確かめます。

```
sudo service mysql status
```
起動してなかったら起動します。

```
sudo service mysql start
```

④ mysqlにログインします。

```
sudo mysql -u root
```

⑤ mysqlの作業用ユーザーを作成し、権限設定します。
下記の`ユーザー名` `ホスト名` `パスワード`は変更してください。
ローカルにmysqlをインストールした場合`ホスト名`はlocalhostで大丈夫です。

```
mysql> create user 'ユーザー名'@'ホスト名' identifid by 'パスワード';
mysql> grant all on *.* to 'ユーザー名'@'ホスト名';
```
⑥ /config/database.ymlを編集します。
下記は例です。`username` `password`を⑤で設定したものにしてください。
`database` は作成したいデータベース名を任意で設定できます。
YAMLの注意点として、インデントにTabを使用しないこと、インデントを付けること、インデントはSpace2個単位でつけることです。
また、`username`は@以降のホスト部分は付けません。

```YAML
development:
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: developer
  password: 1234abcd
  host: localhost
  database: example_development

test:
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: developer
  password: 1234abcd
  host: localhost
  database: example_test

production:
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: developer
  password: 1234abcd
  host: localhost
  database: example_production
```

⑦ gemをインストールします。
下記をGemfieに追記します。

```
gem 'mysql2'
```
続いてインストール(もしくはアップデートのどちらでも)

```
bundle install
```
※mysql2のgemインストールはエラーが高頻度で発生するので、自分のOS、エラー内容に合わせた解決方法を探しましょう。
私の場合、②のライブラリインストールでエラーが解決できました。

⑦ 最後に、下記コマンドでデータベースを作成します。

```
bundle exec rails db:create
```
mysqlでDBが作成できていることを確認しましょう。

## DB操作
下記の記事を参考に上記で作成したDBにテーブルを作成しました。
▼マイグレーションファイル作成まで (テーブル作成の準備)
・[RailsでデータをDBに投入するActive Record [初心者向けチュートリアル]](https://morizyun.github.io/blog/active-record-rails-beginner-tutorial/index.html)
・[Rails テーブルのデータ型について](https://qiita.com/s_tatsuki/items/900d662a905c7e36b3d4)

▼マイグレーション実行 (テーブル作成実行)
・[RailsのMigrationに関する基本まとめ](https://qiita.com/pon-san/items/c54aee04e56e6bb26eff)

▼テーブルの削除
[Ruby on Rails 削除関連まとめ](https://qiita.com/ruemura3/items/63eb805aa2b4e250df81)

また、RailsのORマッパーはデフォルトでActiveRecordが入っているので、ControllerからActiveRecordを使用してDB操作します。

## Rubocopの導入
Rubocopとは、Rubyのリンター、フォマッターのことです。
▼下記手順でインストールして、format on saveが使えるようにします。
(本当はローカルインストールしてformat on saveしたかったのですが、私の場合はグローバルインストールでしかformat on saveできなかったため、グローバルインストールしています。)

① VSCode上で拡張機能 [Ruby](https://marketplace.visualstudio.com/items?itemName=rebornix.Ruby)をインストールする。

② コマンドラインで下記を実施し、Rubocopをインストールします。

```
$ gem install rubocop
```
③ コマンドパレットから`settings.json`を開き、下記を追記します。

```json:
    "ruby.lint": {
        "rubocop": true
    },
    "[ruby]": {
        "editor.formatOnSave": true
    },
    "ruby.format": "rubocop"
```
以上で、Rubyファイルのformat on saveが動きました。
上記で動かない場合もあるらしいのですが、その場合は`settings.json`に下記を追記し、VSCodeを再起動することで解決する可能性があります。

```
"editor.formatOnSaveTimeout": 5000,
```

## その他便利な拡張機能
次の記事を参考にさせていただきました。
[VSCodeの拡張機能でRailsと仲良くなる](https://qiita.com/hakshu/items/98ed12c32da97474b68d)

私が入れたのは下記の拡張機能です。
・Rails
・Ruby On Rails
・endwise
・Rainbow End
・indent-rainbow
・Material Icon Theme
・Rails DB Schema

indent-rainbowはインデントの色が崩れる事がありますが、拡張機能を無効→再度有効化して直りました。


## 蛇足
今後はAWSサービスを使った環境構築についても書いていきたいです。

最後に、参考にさせていただいた記事の投稿者の皆様、ありがとうございます。
私の記事に不備などありましたらご指摘いただけると幸いです。