MacにRailsの環境を構築からアプリ作成まで

サーバーサイドの開発をしてるとやはり`Ruby on Rails`でやっている人が多く　`django`だと周りに聞ける人が少ないので、とうとう`Rails`の環境を作ることにしました。

#動作環境
 - Mac OS High Sierra 10.13.3
 - postgres (PostgreSQL) 10.1

##前提条件
`Rails`のアプリを作成する過程でDBが必要そうなので今回は`PostgreSQL`を使用します。
`PostgreSQL`のインストールについては、参考にした記事の方に載っていたので今回は省略します。

##本記事で用いている用語
 - user_name：ユーザー名(自分のMacにつけている名前)
 - DB：データベース(DataBase)

#Rubyの環境構築
`Ruby`自体はMacにもともとインストールされているので、`rbenv`をとりあえずインストールして`Rails`のインストールに移ります。
`Ruby`がインストールされているか確認したい方はインストールされているバージョンを出力するコマンドを実行して見てください。

```bash:bash
$ ruby -v
ruby 2.3.3p222 (2016-11-21 revision 56859) [universal.x86_64-darwin17]
```

##rbenvをインストール
`rbenv`は`Ruby`のバージョンを管理するためのツールです。homebrewを使ってインストールを行います。
homebrewを使用しなくても`git clone`でインストールすることもできますが、私は各ツールを一括管理したいのでhomebrewを使用しています。

```bash:bash
$ brew update
$ brew install rbenv ruby-build
```

続いて`~/.bash_profile`に下記を記述して、実行します。

```vim:vim
if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi
```

```bash:bash
$ source ~/.bash_profile
```

##Rubyをインストール
今度は`Ruby`をインストールしていきます。とりあえず現在の最新バージョンを見てみます。

```bash:bash
$ rbenv install -l
Available versions:
  1.8.5-p52
  1.8.5-p113
  1.8.5-p114
  1.8.5-p115
  1.8.5-p231
  1.8.6
  1.8.6-p36

  ...省略...

  2.5.0-dev
  2.5.0-preview1
  2.5.0-rc1
  2.5.0
  2.6.0-dev
  jruby-1.5.6
  jruby-1.6.3
  jruby-1.6.4
  jruby-1.6.5
  jruby-1.6.5.1
  jruby-1.6.6

  ...省略
```

あまりにも長すぎるので一部省略しています。
インストールするバージョンはとりあえず`2.5.0`くらいでいいでしょう。

```bash:bash
$ rbenv install 2.5.0
ruby-build: use openssl from homebrew
Downloading ruby-2.5.0.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.0.tar.bz2
Installing ruby-2.5.0...
ruby-build: use readline from homebrew
Installed ruby-2.5.0 to /Users/user_name/.rbenv/versions/2.5.0

$ rbenv rehash
```

`rbenv rehash`が何者なのかよくわからなかったので、参考になった記事を下に載せてます。
- [rbenv rehashは何をやっているのか？](http://dqn.sakusakutto.jp/2014/02/rbenv_rehash_what_it_does.html)
雑に要約すると何か変更を加えた時に「更新！」ってニュアンスですかね。

次に今いるディレクトリにのみインストールしたバージョンを適応させます。
もしPC全体に適応させたい場合は `rbenv local <version>`を`rbenv global <version>`にするといいと思います。

```bash:bash
$ rbenv versions
* system (set by /Users/user_name/.rbenv/version)
  2.5.0

$ rbenv local 2.5.0

$ rbenv versions
  system
* 2.5.0 (set by /Users/user_name/workspace/rb_sample/hello/.ruby-version)
```

#PostgreSQLの設定
##ユーザの作成
`Rails`を使用するにあたり、新たにユーザを作ります。
現状況を出力するには下のようなコマンドを実行してみてください。

```bash:bash
$ psql -q -c'select * from pg_user' postgres
   usename   | usesysid | usecreatedb | usesuper | userepl | usebypassrls |  passwd  | valuntil | useconfig
-------------+----------+-------------+----------+---------+--------------+----------+----------+-----------
 user_name   |       10 | t           | t        | t       | t            | ******** |          |
```

実際に新たにユーザを作成してみます。

```bash:bash
$ createuser rails

$ psql -q -c'select * from pg_user' postgres
   usename   | usesysid | usecreatedb | usesuper | userepl | usebypassrls |  passwd  | valuntil | useconfig
-------------+----------+-------------+----------+---------+--------------+----------+----------+-----------
 user_name   |       10 | t           | t        | t       | t            | ******** |          |
 rails       |    16569 | f           | f        | f       | f            | ******** |          |
```

これでとりあえずユーザは作れましたが、パスワードも一緒に設定したい方は`-P`をつけてください。
そのほかにもスーパーユーザ権限やDB作成権限を一緒に付加したい場合はそれぞれに該当するオプションをつけてください。

|オプション|権限|
|:-----:|:--|
|-P|パスワードを付加(**注意**：Pは大文字)|
|-s|スーパーユーザ権限を付与|
|-d|データベース作成権限を付与|

オプション詳細： [https://www.postgresql.jp/document/8.1/html/app-createuser.html](https://www.postgresql.jp/document/8.1/html/app-createuser.html)

##DB作成
次にDBを作成していきます。

```bash:bash
$ createdb rails_db -O rails
```

作成できたか確認するには下記のコマンドを実行してください。

```bash:bash
$ psql -l
                                  List of databases
   Name    |   Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+-----------+----------+-------------+-------------+-----------------------
 rails_db  | rails     | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 |
 template0 | user_name  | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/user_name          +
           |           |          |             |             | user_name=CTc/user_name
 template1 | user_name  | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/user_name          +
           |           |          |             |             | user_name=CTc/user_name
```

これで一通りのDBの設定は終了です。

#Railsのインストール
##Rails本体のインストール
さてチュートリアルも終了し本番ですね。`Rails`をインストールしていきます。

```bash:bash
$ gem install rails
Fetching: concurrent-ruby-1.0.5.gem (100%)
Successfully installed concurrent-ruby-1.0.5
Fetching: i18n-0.9.5.gem (100%)
...省略...

$ rails -v
Rails 5.1.5
```

長いので省略しましたが、エラーが出ていなければ恐らく大丈夫だと思います。
これでインストール自体は終了です。

##bundlerのインストール
`bundler`はgemをプロジェクトごとに管理ができるようにするためのツールらしく便利そうなのでとりあえずインストールしておきます。

```bash:bash
$ gem install bundler
Fetching: bundler-1.16.1.gem (100%)
Successfully installed bundler-1.16.1
Parsing documentation for bundler-1.16.1
Installing ri documentation for bundler-1.16.1
Done installing documentation for bundler after 4 seconds
1 gem installed
```


#Railsでアプリを作ってみる

##Railsの設定
まずは`Ruby`のバージョンを指定し、先ほどインストールした`bundler`を使ってみます。

```bash:bash
$ echo 2.5.0 >> .ruby-version

$ bundle init
Writing new Gemfile to /Users/user_name/workspace/rb_sample/hello/Gemfile
```

一瞬`Warning`かと思って焦りましたが正常です。続けましょう。
`Gemfile`を開いて`Rails`のバージョンを指定してあげましょう。

```vim:vim
  1 # frozen_string_literal: true
  2
  3 source "https://rubygems.org"
  4
  5 git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
  6
  7 gem "rails", "~>5.1.0"
```

```bash:bash
$ bundle install --path vendor/bundle
Fetching gem metadata from https://rubygems.org/.................
Fetching gem metadata from https://rubygems.org/..
Resolving dependencies...
Fetching rake 12.3.0
Installing rake 12.3.0
Fetching concurrent-ruby 1.0.5
Installing concurrent-ruby 1.0.5
...省略...
Fetching rails 5.1.5
Installing rails 5.1.5
Bundle complete! 1 Gemfile dependency, 38 gems now installed.
Bundled gems are installed into `./vendor/bundle`
```

なかなか順調ですね！！
では最後にアプリの大枠を作ります。

```bash:bash
$ bundle exec rails new . -T -d postgresql
       exist
      create  README.md
      create  Rakefile
      create  config.ru
      create  .gitignore
    conflict  Gemfile
Overwrite /Users/user_name/workspace/rb_sample/hello/Gemfile? (enter "h" for help) [Ynaqdh]
...省略...
Bundle complete! 14 Gemfile dependencies, 63 gems now installed.
Bundled gems are installed into `./vendor/bundle`
         run  bundle exec spring binstub --all
* bin/rake: spring inserted
* bin/rails: spring inserted

$ ls
Gemfile      README.md    app          config       db           log          public       vendor
Gemfile.lock Rakefile     bin          config.ru    lib          package.json tmp
```

これで大枠も作ることができました。

##DBの設定
最後に先ほど作っておいたDBと連結させます。
変更するファイルは`config/database.yml`です。

```bash:bash
$ cd config

$ ls
application.rb cable.yml      environment.rb initializers   puma.rb        secrets.yml
boot.rb        database.yml   environments   locales        routes.rb      spring.rb
```

```vim:vim(database.yml)
 24 development:
 25   <<: *default
 26   adapter: postgresql
 27   encoding: unicode
 28   database: rails_db
 29   pool: 5
 30   username: rails
 31   password: *******(設定していない場合は空白)
 32   host: localhost
```

これで設定は一通り完了です。では早速アプリを起動してみましょう。

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

<img width="656" alt="hello_rails.png" src="https://qiita-image-store.s3.amazonaws.com/0/200209/c1370c96-6a8c-9dc3-6fa7-c52fe3e96d7f.png">

この画面が出てきたら成功です！！
お疲れ様でした。＼＼\٩( 'ω' )و //／／

#便利そうなツールをインストール
##powderのインストール
`powder`はサーバとアプリのリンクやローカル環境での開発中URLへのアクセスを簡単にしてくれるツールだそうです。

```bash:bash
$ gem install powder

Fetching: thor-0.20.0.gem (100%)
Successfully installed thor-0.20.0
Fetching: powder-0.4.0.gem (100%)
Successfully installed powder-0.4.0
Parsing documentation for thor-0.20.0
Installing ri documentation for thor-0.20.0
Parsing documentation for powder-0.4.0
Installing ri documentation for powder-0.4.0
Done installing documentation for thor, powder after 0 seconds
2 gems installed

$ rbenv rehash

$ powder install
```

#ちょっとした雑談
思ってた以上に記事が長くなってしまいましたが、なんとか完成して良かったです。
実際のインストールだけだとおそらくそこまでの時間はかからないと思うので、興味のある方はぜひ手を出してみるといいんじゃないですかね！

#参考にした記事
[Homebrewを使ってRuby on Rails開発環境をMacにインストールする](https://qiita.com/yn01/items/2ea2a498b4a1eef7e1cd)
[rbenv rehashは何をやっているのか？](http://dqn.sakusakutto.jp/2014/02/rbenv_rehash_what_it_does.html)
[スプラトゥーンでbundlerを理解しながらubuntu16.04上のRails環境を整える](https://qiita.com/pokotsun/items/9f3a37e97208c0872c51)
[インストールからRails-PostgreSQL環境を整える](https://qiita.com/torini/items/9952d91c4a7087b23481)
[開発サーバをThinからPowに切り替えて開発効率アップ！　(Mac限定)](http://morizyun.github.io/blog/pow-guard-rails/)