【2019年度版】Railsの環境構築から動作確認までの手順を理解しながらやった（Mac, MySQL）

# はじめに

Rails環境の既存プロジェクトの開発をしていると、なかなかRailsプロジェクトを1から開発することはありません。そうなると、プロジェクトの作り方が身につかないので、勉強がてらやってみました。


# 前提

- Homebrewをインストールして
- Homebrewからrbenvや、mysqlをインストールして
- rbenvからRubyをインストールします

Rubyがインストールできれば、gem（Rubyのパッケージ管理ツール）が使えるので、gemからbundler（gemのver.管理ツール）やRailsをインストールします。

ここらへんの設定は、省略します。

その辺の設定は以下を参考にしてください。

- https://fukatsu.tech/environment-ruby-on-rails
- https://gabekore.org/mac-ruby-rails-overview
- https://techacademy.jp/magazine/4630

# 環境

- macOS HighSierra　10.13.6
- Rails 5.2.0
- Ruby 2.5.1
- mysql 5.7.22
  - mysqlはdockerに作成
- Docker version 18.03.1-ce

# グローバルにあるRubyをなるべく汚さずに環境構築

Railsチュートリアルや入門書には、以下のように、GemパッケージとしてのRailsや、Railsプロジェクトをインストールするのを見ます。

```bash
$ gem install rails
$ rails new project
```

これだと、グローバルにgemがインストールされてしまいます。自分の場合だとrbenvを使っているので、

```bash
/Users/ユーザ名/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems
```

にインストールされるでしょう。

一生、1つのプロジェクトのみで開発する場合や、複数プロジェクト開発でも使用するパッケージのバージョンを1つ1つ合わせるなら別ですが、自分はその予定ではないので、グローバルなRubyにはBundlerだけインストールされてる状態にします。

以下、参考図←ちなみに、図は[draw.io](https://www.draw.io/)で、赤い注釈は[Skitch](https://evernote.com/intl/jp/products/skitch)で作成。それぞれ便利でした。

<img width="708" alt="スクリーンショット 2019-03-16 15.17.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/14191/ce19ab10-ac07-7607-c59e-065241628c01.png">

図を見てもらうとわかりやすいですが、Rubyのバージョンは、プロジェクト毎にrbenvで管理します。そして、それぞれのgemのバージョンは、プロジェクト毎にBundlerで管理したいので、プロジェクト内にインストールします。ちなみに、RailsもGemのパッケージで、これもプロジェクト内インストールすることで、プロジェクト毎に任意のバージョンにできます。

ちなみに、この後の説明で出て来ますが、Railsプロジェクトを立ち上げるために、開発用サーバを起動するコマンドを実行しますが、

以下の２つのコマンドには違いがあります。

```bash
$ bundle exec rails s
```

こちらは、（おそらく同階層にある）RailsプロジェクトのGemfileで指定された環境でのサーバ起動

```bash
$ rails s
```

こちらは、グローバル環境でのサーバ起動です。今ままで区別わからず起動してました。

ここら辺の話は、[この記事](https://woshidan.hatenablog.com/entry/2017/01/30/231044)が参考になりました。

では、作業ディレクトリを作ります。

## Railsプロジェクトをインストールするための作業するディレクトリを作成

```bash:作業ディレクトリの作成
$ mkdir my_blog
$ cd my_blog
```

この作業ディレクトリ名が、プロジェクト名になります。

次に、プロジェクト内のBundlerでGemを管理するために、Gemfileを作ります。

## Gemfileの作成

```bash:Gemfileの作成
$ bundle init

Writing new Gemfile to /Users/ユーザー名/~/Gemfile
```

Gemfile内にある`gem "rails"`のコメントアウトだけ消します。

<img width="951" alt="スクリーンショット 2019-03-16 16.58.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/14191/e5570e62-55f5-9295-1e9e-cfa918380b62.png">

インストールが完了したら、Railsプロジェクトの作成をします。

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

```bash:Railsプロジェクトの作成
$ bundle exec rails new . -d mysql
```

- -d で使用するDBを指定
- `.`でカレントディレクトリにRailsプロジェクトを作成する。という指定

```bash:Railsプロジェクトの作成
$ bundle exec rails new . -d mysql
       exist
      create  README.md
      create  Rakefile
      create  .ruby-version
      create  config.ru
      create  .gitignore
    conflict  Gemfile
Overwrite /Users/ユーザー名/~/Gemfile? (enter "h" for help) [Ynaqdhm]
```

実行すると、Gemfileを上書きしていいかと問われるので、`Yes`する。あとは、プロジェクトに必要なgemのインストールですね。

### 補足

自分の環境に限ったことかもしれませんが、`rails new`して、Gemfileを上書きしようとしたら、以下のようなエラーが出ました。

```bash:
...
Permission denied @ rb_sysopen - /Users/ユーザ名/my_blog/Gemfile
```

書き込みの権限がなかったので、変更したら、Gemfileの上書きができました。

```bash
~/my_blog ❯❯❯ ll
-r--r--r--  1 ryosuke  staff   144B  3 16 16:57 Gemfile

$ chmod 644 Gemfile

~/my_blog ❯❯❯ ll

-rw-r--r--  1 ryosuke  staff   144B  3 16 16:57 Gemfile
```

## Railsなど、必要なgemのインストール

```bash:Railsインストール
$ bundle install --path=vendor/bundle -j4
```

これで、グローバルのRuby配下じゃなく、プロジェクト（`my_blog`）ディレクトリ配下にあるvendor/bundleディレクトリ内にgemがインストールされます。

<img width="872" alt="スクリーンショット 2019-03-16 17.25.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/14191/ed6982db-3b26-4ad0-894f-cfb68c9871f9.png">

また、オプションの`-j4`をつけることで、並列処理してくれる（らしい）ので、インストールが早くなります。

参考: https://qiita.com/camelmasa/items/5ca27ab398f105f86c76

# DB作成

まず、`config/database.yml`にある`host`,`username`,`password`,`database`を、ご自身のMySQLや、今回のプロジェクトに合わせて変更してください。
セキュリティ上、詳しく書けません。←なので自分以上に初心者の方は、ここでつまづきそうな予感。。

```bash
$ bundle exec rails db:create

Created database 'my_blog_development'
Created database 'my_blog_test'
```

MySQLにログインして、DBが作成された事を確認します。

```sql
mysql> show databases;
+-----------------------------------+
| Database                          |
+-----------------------------------+
| my_blog_development               |
| my_blog_test                      |
+-----------------------------------+
```

DBが出来た事を確認できました（他のDBなどは省略してます）。

# ローカルサーバの立ち上げ

```bash
$ bundle exec rails s
```

ブラウザで http://localhost:3000/ にアクセスして

![スクリーンショット 2019-03-16 17.53.17.png](https://qiita-image-store.s3.amazonaws.com/0/14191/66d8b0c2-ba1c-25f9-b47b-f1b016846a68.png)

こんなん出ればOKです。

以上です！

# 作成手順（説明なし版）

実行するコマンドだけ取り上げると

```
# 作業ディレクトリの作成
$ mkdir my_blog
$ cd my_blog

# Gemfileの作成
$ bundle init

# Railsプロジェクトの作成
$ bundle exec rails new . -d mysql

# Railsなど、必要なgemのインストール
$ bundle install --path=vendor/bundle -j4

# DB作成
$ bundle exec rails db:create

# ローカルサーバの立ち上げ
$ bundle exec rails s
```

エンジニア名乗るなら、これくらいは15分でサクッと作れるようになりたいですね。

# 参考

- https://qiita.com/yuitnnn/items/b45bba658d86eabdbb26
- https://qiita.com/youcune/items/222777415f00d19cccb4
- http://niwatako.tips/20150517/article211.html
- https://blog.tokoyax.com/entry/ruby/bundler
- https://utano.jp/entry/2016/07/rails-bundle-install-gem-inner-project/
- https://qiita.com/ryosuketter/items/445b1ffef8eac5b63415