事前準備 から Rails 6 セットアップ（MariaDBバージョン）


## 1. 事前準備

### 1.1 MySQL互換の MariaDB をインストール

#### ① インストール

  ```sh
  $ brew install mariadb
  $ brew services start mariadb
  ```

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

以下のように MariaDB が起動しない場合

```
$ sudo mysql -u root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock'
```

MariaDB 関連のデータをすべて削除して再インストール

```sh
$ brew services stop mariadb
$ brew uninstall mariadb
$ sudo rm -rf /usr/local/mysql
$ sudo rm -rf /Library/StartupItems/MYSQL
$ sudo rm -rf /Library/PreferencePanes/MySQL.prefPane
$ sudo rm -rf /Library/Receipts/mysql-.pkg
$ sudo rm -rf /usr/local/Cellar/mysql*
$ sudo rm -rf /usr/local/bin/mysql*
$ sudo rm -rf /usr/local/var/mysql*
$ sudo rm -rf /usr/local/etc/my.cnf
$ sudo rm -rf /usr/local/share/mysql*
$ sudo rm -rf /usr/local/opt/mysql*
$ brew install mariadb
$ brew services start mariadb
```


#### ② ユーザー作成・権限割当

開発用なのでフル権限を与える

- ユーザー名: `myuser`
- パスワード: `pass`

```sh
$ sudo mysql -u root
MariaDB [(none)]> use mysql;

MariaDB [mysql]>  GRANT ALL PRIVILEGES ON *.* TO myuser@localhost IDENTIFIED BY 'pass' WITH GRANT OPTION;

MariaDB [mysql]> flush privileges;

MariaDB [mysql]> select Host,User from user;

MariaDB [mysql]> quit
```

### 1.2 yarn をインストール

Rails で webpacker を使用する際に yarn が必要ためインストールする。
※ node と yarn の関係などを知らない場合はネットで調べること

また、node のバージョン管理できるように、nodenv もインストールする。

```sh
$ brew install nodenv
$ echo 'eval "$(nodenv init -)"' >> ~/.zprofile
$ exec $SHELL -l
$ nodenv install --list
$ nodenv install 12.10.0
$ nodenv global 12.10.0
$ npm install -g yarn
```



## 2. グローバルにある Ruby を汚さずに Railsインストール

`gem install rails` を行うと `~/.rbenv/versions/2.5.1/lib/ruby/gems/2.6.4/gems` の中に rails がインストールされます。 `rails new` をする時しか使用しないのにグローバルにインストールされてしまうのは無駄なので、インストールしない方法で進めます。

### rbenv インストール

  ```
  $ brew install rbenv
  $ echo 'eval "$(rbenv init -)"' >> ~/.zprofile
  $ exec $SHELL -l
  ```

###  rbenv で ruby をインストール

  ```sh
  $ rbenv install 2.6.4
  $ rbenv global 2.6.4
  ```

### bundler をインストール

  ```sh
  $ gem install bundler
  ```

### プロジェクトディレクトリを作成

  ```sh
  $ mkdir report_app
  $ cd report_app
  ```

### .ruby-version ファイルを配置

  rbenv の機能で プロジェクトディレクトリに移動した際に自動で ruby のバージョンを切り替えてくれる設定ファイルを配置する。

  ```:.ruby-version
  2.6.4
  ```

###  Gemfile 作成

  ```sh
  $ bundle init
  ```
### Gemfile を編集し、 rails のコメントアウトを外す

  ```:Gemfile
  # gem "rails" ← 削除
  gem "rails", "6.0.0" ← 追加
  ```
###  gem インストール

  ```sh
  $ bundle install --path vendor/bundle
  ```

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

  ```sh
  $ bundle exec rails new . -d mysql --skip-sprockets
  ```

  ※ `--skip-sprockets` は sprockets を使わず、webpacker を使用するため追加
  実行すると、Gemfileを上書きしていいかと表示されるので Yes にする。

#### ※ bundle install で gem mysql2 のエラーが表示された場合

  1. openssl をインストールし、パスを通す

      ```sh
      $ brew install openssl
      $ which openssl
      /usr/bin/openssl ← パスが通ってないから通す
      $ echo 'export PATH=/usr/local/opt/openssl/bin:$PATH' >> ~/.zprofile
      $ exec $SHELL -l
      $ which openssl
      /usr/local/opt/openssl/bin/openssl
      ```

  2. bundle config に設定を追加

      ```sh
      $ bundle config --local build.mysql2 --with-opt-dir="$(brew --prefix openssl)"
      ```

  3. 再度 bundle install

      ```sh
      $ bundle

    ```

## 3. Webpacker インストール

```sh
$ bin/rails webpacker:install
```

## 4. database.yml 設定

`config/database.yml` を以下の通り編集する

```yml:database.yml
  username: myuser
  password: pass
```


## 5. Rails 起動

```sh
$ bin/rails db:create
$ bin/rails s
```

## 6. 起動確認

ブラウザのアドレスバーに `localhost:3000` と入力しEnter

# その他設定

## Webpacker の設定

1. `app/assets` を削除する
2. `layout/application.html.erb` の `stylesheet_link_tag` を `stylesheet_pack_tag` に差し替える

3. 画面のちらつきを抑えるため `config/webpacker.yml` の `extract_css` を `true` にする

4. Webpacker を使うので Sprockets のディレクトリ `app/assets` を削除する

## Turbolinks の無効化

他のJSライブラリと相性が悪いため turbolinks を無効化する

  1. `Gemfile` の `tarbolinks` を削除
  1. `app/javascript/packs/application.js` の `require("turbolinks").start()`　を削除
  1. `app/views/layouts/application.html.haml` の `data-turbolinks-track` を削除
  1. `package.json` の `turbolinks` を削除

## Slim 導入

  1. `Gemfile` に `gem 'slim-rails'` を追加
  1. 既存の `erb` ファイルを `slim` に変換する
      https://qiita.com/mocchicc/items/abab4cdfac7b542742a6


## RSpec 導入

1. Gemfile に以下追加

    ```Gemfile
    group :development do
      gem 'factory_bot_rails'
    end

    group :test do
      gem 'rspec-rails', '~> 4.0.0.beta2'
      gem 'rails-controller-testing'
    end
    ```

1. rspecに必要なファイルを生成する
2.
    ```sh
    $ bin/rails generate rspec:install
    ```

1. `bin/rspec` コマンドを生成する

    ```sh
    $ bundle binstubs rspec-core
    ```

1. rspec の設定ファイルを変更する

    rails_helper.rb に設定追加

    ```rb:rails_helper.rb

    # FactoryBot.create を create で呼べるようにする
    config.include FactoryBot::Syntax::Methods

    # rspec3.3の aggregate_failures オプションをデフォルトとする
    config.define_derived_metadata do |meta|
      meta[:aggregate_failures] = true unless meta.key?(:aggregate_failures)
    end

    # focus を付与したテストのみ実行する
    config.filter_run_when_matching :focus
    ```

1. Rspec を使うので Minitest のディレクトリ `test` を削除する


## Rails Console を便利にする


- Rails Console や デバッグを便利にするための gem を導入する

    ```rb:Gemfile
    group :development, :test do
      gem 'awesome_print'
      gem 'pry-byebug'
      gem 'pry-rails'
    end
    ```

- `.pryrc` ファイルを作成する

  - Railsプロジェクトのrootディレクトリに.pryrcファイルを配置しておけばデバッグ中に利用できるエイリアスが貼れる

  ```:.pryrc
  if defined?(PryByebug)
    Pry.commands.alias_command 'c', 'continue'
    Pry.commands.alias_command 's', 'step'
    Pry.commands.alias_command 'n', 'next'
    Pry.commands.alias_command 'f', 'finish'
  end
  ```
一通りの基本設定は完了。それではアプリの実装に入りましょう。