【完全版】MacでRails環境構築する手順の全て

## この記事は
**初心者でも迷わず環境構築ができるよう、1つ1つの手順を丁寧に解説した記事**です。
なるべく「どうしてこのコマンドを実行するのか」も解説するようにしています。

**「環境構築が苦手、よくわからない」**という方は、ぜひ参考にしていただければと思います。
また「railsのバージョン指定がうまくいかない...」と悩んでいる方にも参考になると思います。

※もしこれを読んでもうまくいかなければ、ぜひ積極的にコメントいただけますと幸いです！

## マシンスペック
参考までに、私のマシンスペックは以下の通りです。

- macOS Catalina 10.15.3
- MacBook Air (Retina, 13-inch, 2018)
- Intel Core i5
- メモリ 8GB

## Ruby, Railsのバージョン
それぞれ下記バージョンで構築することを目指します。

- Ruby 2.5.7
- Rails 5.2.3

## 全体の流れ
この順番でインストールしていきます。

1. rbenv（Rubyのバージョン管理ツール）
2. Ruby
3. PostgreSQL（データベース）
4. Rails

## 構築手順
### 1. rbenvのインストール
**rbenv**とは、Rubyのバージョンを簡単に切り替えてくれるツールです。

1台のPCで複数のRailsアプリを作ろうとしたとき、「こっちのアプリではRuby2.5.0を使いたいけど、こっちはRuby2.6.0を使いたい...」という欲求が出てきたりします。
そんなときに活躍するのが**rbenv**です。
詳しい使い方は後で見ていくとして、まずはインストールしてしまいましょう。

rbenvをインストールするためにはHomebrewが必要で、HomebrewをインストールするためにはCommand Line Toolsが必要です。
順番に進めていきます。

#### 1-1. Command Line Toolsのインストール
ターミナルを開き、次のコマンドを実行します。

```rb
# Command Line Toolsのインストール
$ xcode-select --install
```

Xcodeというツールをインストールしていない場合は「インストールしますか？」という画面が表示されるため、「インストール」を選択します。
Xcodeは重いので、少し時間がかかるかもしれません。

インストール完了後、次のコマンドでバージョンが表示されたら成功です。

```rb
# バージョン確認
$ xcodebuild -version
```

#### 1-2. Homebrewのインストール
続いてHomebrewをインストールします。
[Homebrewの公式サイト](https://brew.sh/index_ja)に飛ぶとインストール用のコマンドが用意されてるので、それをターミナルに貼り付けて実行するだけです。
コマンドは随時アップデートされたりするので、直接サイトから持ってくるのが賢明です。
<img width="600" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/465401/bac6426c-f756-6f18-de33-288c0b28007b.jpeg">

ちなみにHomebrewとは、**Macにデフォルトで入っていないソフトをインストールする**ためのツールです。
上の画像を見ると、「Appleが用意していない**あなたの必要なもの**をインストールします」と書いてありますが、噛み砕くとそういうことです。
Homebrewを入れておくといろいろインストールできて便利なんだな、と理解しておけば大丈夫です。

#### 1-3. rbenvのインストール
いよいよrbenvのインストールを行います。
ターミナルで次の4つのコマンドを順番に実行してください。

```php
# (1) rbenvへのPATHを通す
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc

# (2) rbenvを使うために必要な「rbenv init -」コマンドを設定
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

# (3) 設定の反映
$ source ~/.bash_profile

# (4) rbenvのインストール
$ brew install rbenv ruby-build
```

(4)では、rbenvと一緒に、rbenvのプラグインであるruby-buildもインストールしています。
rbenvについて詳しく知りたい方は、[こちらのブログ](https://takatoshiono.hatenablog.com/entry/2015/01/09/012040)で詳しく紹介されていますので読んでみてください（ただ、初学者には難易度高めです）。

このrbenvを使って、Rubyをインストールしていきます！

### 2. Rubyのインストールとバージョン適用
#### 2-1. Rubyのインストール
rbenvでインストールできるバージョンは下記コマンドで確認できます。

```rb
# rbenvでインストールできるバージョンを確認
$ rbenv install --list
#=> Available versions:
#   1.8.5-p52
#   1.8.5-p113
#   ...
#   truffleruby-19.2.0
#   truffleruby-19.2.0.1
```

今回は`2.5.7`をインストールします。

```rb
# Ruby2.5.7をインストール
$ rbenv install 2.5.7
```

これで`Ruby2.5.7`がインストールされたはずです。
次のコマンドを打ってみましょう。

```rb
# インストール済みのRubyのバージョン一覧を表示する
$ rbenv versions
#=> * system (set by /Users/<ユーザ名>/.rbenv/version)
#     2.5.7
```

これは、`system`（Macのデフォルト）と`2.5.7`の2種類のRubyバージョンがPCにインストール済みであることを示しています。
`2.5.7`もインストールできたことがわかりますね。
ちなみに**「*」**がついている方が、現在の環境に適用されているバージョンです。

#### 2-2. 作業ディレクトリの作成＆移動
続けて作業ディレクトリ（フォルダ）を作成します。
作業ディレクトリの名前は「sample_app」や「workspace」などがよくありますが、作成するアプリ名にするとわかりやすいでしょう。
ここでは私が作成したアプリ名「cooklog」とします。

作業ディレクトを作成します。

```rb
# 作業ディレクトリを作成
$ mkdir ~/cooklog
```

ここまでは「ターミナルにおいてどのフォルダでコマンドを打つか」は気にしなくてよかったですが、ここからは作業フォルダに入ってコマンドを打っていくことになります。
そこで、ディレクトリへの移動を行います。

```rb
# 作業ディレクトリへ移動（適宜パスを指定）
$ cd cooklog
```


#### 2-3. Rubyのバージョンを適用
それでは作業ディレクトリに対して`Ruby2.5.7`を適用します。
先ほど作ったディレクトリにいることを確認して、次のコマンドを実行します。

```rb
# 現在のディレクトリにRuby2.5.7を適用
$ rbenv local 2.5.7

# 適用を反映
$ rbenv rehash
```

これで作業ディレクトリに適用するRubyのバージョンが変わったはずです。確認してみましょう。

```rb
$ ruby -v
#=> ruby 2.5.7p206 (2019-10-01 revision 67816) [x86_64-darwin19]

$ rbenv versions
#=>   system (set by /Users/<ユーザ名>/.rbenv/version)
#   * 2.5.7
```

Rubyのバージョンは、p206..以降が違っても問題ありません。
**「*」**が`2.5.7`の方に移り、適用バージョンが変わったことを確認できました。

※ちなみに`rbenv local x.x.x`が現在のディレクトリのRubyバージョンを変更するのに対し、`rbenv global x.x.x`は使っているPCでデフォルトで使うRubyバージョンを指定します。
したがって、`global`の方を使ってもOKです（今回は他のディレクトリへ影響することを避けるため、localにしています）。

#### 2-4. bundlerのインストール
2章の最後に、`gem`のインストールには欠かせない`bundler`をインストールしておきます。

まずはターミナルで`bundler -v`を実行して、`bundler`がインストールされているか確認してみてください。

```rb
$ bundler -v
#=> Bundler version 1.17.2
```

上のようにbundlerのバージョンが表示されれば問題ありません。
「not found」と出るのであれば、次のコマンドでインストールしてください。

```rb
$ gem install bundler -v 1.17.3
```

※bundler 2.0.1以降をインストールしていると`You must use Bundler 2 or greater with this lockfile.`という厄介なエラーに遭遇することが多々あるため、無難な`1.17.3`を推奨します（2020/3/8現在）。

### 3. PostgreSQLのインストール
続いてデータベースのインストールを行います。
今回はPostgreSQLを使うことにします。

次のコマンドを打ち込んで、インストールと起動を一気にやってしまいましょう。

```rb
# PostgreSQLのインストール
$ brew install postgresql

# PostgreSQLの起動
$ brew services start postgresql
==> Successfully started `postgresql` (label: homebrew.mxcl.postgresql)
```

### 4. Railsのインストール
ここからいよいよRailsをインストールしていきます。

次のコマンドでRailsをPC内にインストールします。

```rb
$ gem install rails -v 5.2.3
```

続けて、次のコマンドを打ち込んでRailsアプリの骨格を作成します。

```rb
# Railsアプリ作成（gemのインストールはスキップ）
$ rails _5.2.3_ new . -d postgresql --skip-bundle
```

途中、何か聞かれたら全て`y`(yesの意味)を打ってEnterを押せばOKです。
`.`はカレント（現在の）ディレクトリという意味です。
`-d postgresql`はデフォルトのデータベースとしてPostgreSQLを使うという意味です。

`--skip-bundle`の部分がポイントで、これをつけると`gem`のインストールは後回しにしてRailsアプリに必要なファイルだけを先に作ってくれます。

次に作られたファイルの中の`Gemfile`を開き、次のように書き換えます。

```rb:Gemfile
# 変更前
gem 'rails', '~> 5.2.3'
# 変更後
gem 'rails', '5.2.3'
```

`'~> 5.2.3'`は「バージョン`5.2.3`以上のものをインストールします」という意味なので、確実に`5.2.3`をインストールするためにこの変更を行います。

そして、次のコマンドを実行して各種`gem`をインストールします。

```rb
# 各種gemをインストール
$ bundle install --path vendor/bundle
```

※エラーが出たら[こちら](https://qiita.com/kodai_0122/items/56168eaec28eb7b1b93b#bundle-install---path-vendorbundle%E3%81%A7an-error-occurred-while-installing-pg-122%E3%81%A8%E3%81%84%E3%81%86%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E5%87%BA%E3%81%9F%E5%A0%B4%E5%90%88)を参照

Railsのバージョンを確認し、きちんとインストールできていることを確認しましょう。

```rb
$ rails -v
#=> 5.2.3
```

最後に、Railsアプリを立ち上げるためにRailsサーバーを起動します。
※エラーが出たら[こちら](https://qiita.com/kodai_0122/items/56168eaec28eb7b1b93b#rails-s%E3%81%A7activerecordnodatabaseerror%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%97%E3%81%9F%E5%A0%B4%E5%90%88)を参照

```rb
$ rails s
=> Booting Puma
=> Rails 5.2.3 application starting in development 
...（省略）...
* Listening on tcp://localhost:3000
Use Ctrl-C to stop
```

上の感じになったらOKです。
[http://localhost:3000/](http://localhost:3000/)にアクセスしてみましょう。

![スクリーンショット 2020-03-05 22.32.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/465401/3ad97264-4fdb-1a50-f16c-8959f428b622.png)

この画面が表示されれば、きちんとRailsアプリが立ち上がっています！
`Rails 5.2.3`、`Ruby 2.5.7`が適用されていることがわかりますね。

これにて環境構築はおしまいです。

お疲れ様でした！

## 2020/3/7 追記
### `rails s`で`ActiveRecord::NoDatabaseError`が発生した場合
「データベースが作られていません」というエラーなので、次のコマンドを打ってから再度`rails s`を実行してみてください。

```rb
$ rails db:create
```

## 2020/3/8 追記
### `bundle install --path vendor/bundle`で`An error occurred while installing pg (1.2.2)...`というエラーが出た場合
こんなエラーが出たときの対処法です。

```rb
An error occurred while installing pg (1.2.2), and Bundler cannot
continue.
Make sure that `gem install pg -v '1.2.2' --source 'https://rubygems.org/'`
succeeds before bundling.
```

エラーメッセージを遡っていくと、次の箇所でエラーになっていることがわかりました。

```rb
./siteconf20200308-17435-1nm6sy1.rb extconf.rb
--with-pg-config=/path/to/pg_config
Using config values from /path/to/pg_config
sh: /path/to/pg_config: No such file or directory  # ここがエラー発生箇所
sh: /path/to/pg_config: No such file or directory
checking for libpq-fe.h... yes
（省略）
creating Makefile
```

つまり、`pg_config`が無いと言われています。
ググった結果、[この記事](https://qiita.com/youcune/items/5b783f7fde45d0fd4b35)をヒントに解決することができました。

`ls /usr/local/bin`または`ls /usr/local/var`を実行してみると、どちらかに`pg_config`がいると思います。
私の場合は前者で発見しました。

そこで、以下のコマンドを実行して`pg_config`の参照先を変更しました。

```rb
bundle config build.pg --with-pg-config=/usr/local/bin/pg_config
```

これで再度`bundle install --path vendor/bundle`を実行すると、エラーを解決することができました。