Ruby on Rails 5.2.3(+PostgreSQL)開発環境を構築（macOS Mojave）

よく聞かれるので、クリーンインストールされたMacbookにRuby on Railsの開発環境を構築する方法を記載します。

## 概要

この記事では、以下のバージョンをインストールします。インストール時にバージョン指定を変えることも可能です。

* Ruby 2.6.3
* Rails 5.2.3

### この記事のゴール

クリーンインストールされたMacから、この画面を表示するところまで進めます！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37334/12de5937-da80-99eb-f07f-e3b71c919dd0.png)

私が環境構築時に使ったmacOSのバージョンはこちらです。

<img width="585" alt="Screen Shot 2019-06-23 at 17.36.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37334/4634058e-d4a5-ce2e-5690-7d87721385c8.png">


## Xcode

### Xcodeをインストールします (App Storeから)

<img width="642" alt="Screen Shot 2019-06-23 at 14.46.34.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37334/80830504-dc2d-2220-7352-c628c54ac112.png">

### Xcodeの利用規約に同意します

Xcodeを起動、利用規約に同意し、`Command + Q`で終了する

## Homebrew

### Homebrewをインストールするため、ターミナルを起動してコマンドを実行します

```shell
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

参考： https://brew.sh/

画像のように`Installation successful!`と出ればOKです

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37334/067f531b-5f49-bf56-16be-0228abb06316.png)

もしXcode CLTがインストールできないというエラーが出る場合、こちらからXcodeに合ったバージョンのXcode CLTをダウンロードします(Command Line Tools for Xcodeを探す) https://developer.apple.com/download/more/

### brewコマンドが使えることを確認します

```shell
brew --version
# => Homebrew 2.1.6
```

## rbenv

Rubyのバージョンを選んで使えるようにするため、Homebrewを使ってrbenvをインストールします。次のコマンドを実行します。

```shell
brew install rbenv
```

```shell
rbenv --version
# => rbenv 1.1.2
```

## Ruby (2.6.X)

### rbenvでRuby 2.6.Xをインストールします

```shell
# インストール可能なRubyの一覧を表示（たくさん出ますが気にせず）
rbenv install --list
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37334/f4b34fe7-d32d-5974-1cf3-9c6576d1b884.png)


```shell
# 今回はなるべく新しい安定版(stable version)の2.6.3をインストールしてみます
rbenv install 2.6.3
```

```shell
# インストールされているrubyバージョンの一覧を確認しておきます
rbenv versions
```

```shell
# ログイン時に実行されるスクリプトでrbenvの初期化を行えるようにします
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
```

```shell
# そのスクリプトをロードします
source ~/.bash_profile 
```

### rbenvで使用するrubyのバージョンを切り替えます

```shell
# バージョンの確認（デフォルトのrubyバージョンが出る）
ruby --version
# => ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18]

# 2.6.3を（グローバルで）有効にする
rbenv global 2.6.3

ruby --version
# => ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin18]
```

## Ruby on Rails

先ほど有効化したrubyのバージョンにおいて、gemを使ってRailsをインストールします。簡単です！たったこれだけ。

```shell
gem install rails -v 5.2.3

rails -v
# => Rails 5.2.3
```

## （任意）PostgreSQL

### PostgreSQLのインストール

PostgreSQLデータベースを使う場合はインストールします。（推奨。勉強目的などで特に使わない理由がなければ使いましょう！）

```shell
# まだインストールされていないことを確認します
postgres -V
# => -bash: postgres: command not found

# HomebrewでPostgreSQLをインストールします
brew install postgresql

postgres -V
# => postgres (PostgreSQL) 11.3
```

### PostgreSQLのサービスを開始

ターミナルにこのように表示されている通り、サービスを開始する必要があります。2通りあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37334/a1f72ef2-8b64-74b1-4375-5f5962798633.png)

以下のどちらか一方を実行しましょう。

```shell
# サービスを開始し、次回からログイン時に自動起動にします（推奨。一手間減らしましょう）
brew services start postgresql

# 注意：上のコマンドだけでOK！

# または、今回だけ起動したい（次回は手動で起動したい）場合はこちらのコマンドを使います
pg_ctl -D /usr/local/var/postgres start
```

## Railsを試す

### Railsプロジェクトを作成

Railsプロジェクトを作成します。ここから分岐します。データベースや、テストフレークワークを指定します。

```shell
# railsプロジェクトフォルダを作りたいフォルダへ移動
cd ~/Desktop
```

以下のコマンドからいずれかを1つを選択し、`test_rails` または `test_rails_api` プロジェクトを作成します。

```shell
# 以下いずれか

# Rails＋PostgreSQL＋Minitest（選択に困ったらまずこれ）
rails new test_rails --database=postgresql

# Rails＋SQLite＋Minitest
rails new test_rails

# Rails＋PostgreSQL＋Minitestなし（RSpecなどを使う場合）
rails new test_rails --database=postgresql --skip-test

# Rails(APIのみ)＋PostgreSQL＋Minitest
rails new test_rails_api --database=postgresql --api

# Rails(APIのみ)＋PostgreSQL＋Minitestなし（RSpecなどを使う場合）※私はこの構成
rails new test_rails_api --database=postgresql --skip-test --api
```

そのほか、細かいオプション指定をしたい場合はhelpを読むのが手っ取り早いです。

```shell
rails --help
```

### Railsサーバーを起動

作成されたフォルダへ移動して、railsサーバーを起動します。

```
cd test_rails
# または
cd test_rails_api

rails s
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37334/8290568e-65fe-4287-a92d-454e7341f557.png)

早速、アクセス http://localhost:3000/

データベースが存在しないため、 `FATAL: database "[データベース名]" does not exist` と表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37334/5c593800-ef2c-b544-652a-08065d4ca5ce.png)

真っ赤な画面でギョッとするかもしれませんが、心配ありません。

```shell
# いったんCtrl + Cでサーバーを止める（実際は止めなくてもOK）

# データベースを初期化
rails db:setup

# もう一度サーバーを起動
rails s
```

もう一度、アクセス http://localhost:3000/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37334/614578b1-62dc-7c5e-ef76-00e0415d0f4e.png)

## トラブルシューティング

キャッシュなどが邪魔してエラーが出ている思われる場合はこちらのコマンドを実行します。同じ名前のプロジェクトを構成を変えて作ったり消したりを繰り返すと問題が生じることがあります。

```shell
spring stop
```