Ruby on Rails チュートリアル 第3章 学んだこと

Rails5.1.4（第4版）でのRailsチュートリアルで自分が学んだことはまとめました。
自分以外の初心者の方にも参考になればと思います。
第３章は静的なWebページを作成して、テストの作成を行います。


#1. セットアップ

1. Rails new <br>
 `$ rails _5.1.4_ new sample_app`
2. gemパッゲージのインストール<br>
 `$ bundle install --without production`<br>
 `$ bundle update`
3. Gitリポジトリ作成<br>
 `$ git init`<br>
 `$ git add -A`<br>
 `$ git commit -m "Initialize repository"`
4. READMEファィルを編集してコミット<br>
   `$ git commit -am "Improve the README"`
5. リモートリポジトリにコミット<br>
 `$ git remote add origin git@bitbucket.org:ユーザー名/sample_app.git`<br>
 `$ git push -u origin --all`
6. hello world を表示 するように変更して、変更をリモートに反映<br>
 `$ git commit -am "Add hello"`<br>
 `$ git push `
7. herokuにデプロイ<br>
 `$ heroku create`<br>
 `$ git push heroku master`

#2. 静的なページの作成

- **gitを使う場合は、masterブランチでずっと作業するのではなく、その都度トピックブランチを作成して作業するのがよい習慣**

1.  トピックブランチを作成して移動<br>
 `$ git checkout -b static-pages`
2. StaticPagesコントローラ生成<br>`$ rails generate controller StaticPages home help`
 - **Rubyでは、ファイル名をスネークケースで記述する慣習がある。static_pages_controller.rb**
 - **Rubyでは、クラス名をキャメルケースで記述する慣習がある。StaticPages**
 - **generateで自動生成に失敗したりもとに戻したくなったらdestroyを実行するともとに戻すことがで きる**<br>` $ rails generate controller StaticPages home help`<br> `$ rails destroy  controller StaticPages home help`<br>
 上のコマンドはコントローラーの自動生成と、それに対応する取り消し処理の例です<br>
 - **ルーティングファイルはURLとWebページの対応関係を定義**
![スクリーンショット 2018-05-06 0.07.43.png](https://qiita-image-store.s3.amazonaws.com/0/162347/451e0b56-d469-a94e-255a-241a9b3f52e5.png)
 rails で使える短縮形の例<br>
 - **HTTPメソッドはGET、POST、PATCH、DELETEの４つ。クライアント (例えばFirefoxやSafariなどのWebブラウザ) とサーバー (ApacheやNginxなどのWebサーバー) は、4つの基本操作を互いに認識できるようになっている。**
 - Getはページを取得するときに使うメソッド、Postはページ上のフォームに入力した値を、ブラウザから送信する時に使われるメソッド
 - **PATCH（更新）**と DELETEは、それぞれサーバー上の何かを更新したり削除したりするときに使われる。GETやPOSTほどは使われない。
 - 今回のStaticPagesコントローラにあるメソッドは、下のようにどちらも最初は空になっている。純粋なRuby言語であれば、これらのメソッドは何も実行しない。しかし、Railsでは動作が異なる。**StaticPagesControllerはApplicationControllerクラスを継承している**ため、StaticPagesControllerのメソッドは (たとえ何も書かれていなくても) Rails特有の振る舞いをする。
具体的には、**/static_pages/homeというURLにアクセスすると、RailsはStaticPagesコントローラを参照し、homeアクションに記述されているコードを実行する。その後、そのアクションに対応するビュー  を出力する。**今回の場合、homeアクションが空になっているので、/static_pages/homeにアクセスしても、単に対応するビューが出力されるだけ。

 
```ruby:static_pages_controller.rb
  class StaticPagesController < ApplicationController
   def home
   end

   def help
   end
 end
 ```

 ３. gitリポジトリに追加<br>

```bash:bash
$ git add -A
$ git commit -m "Add a Static Pages controller"
$ git push -u origin static-pages

```
　初めに`git push -u origin static-pages` をすれば次からは`git push`でできる。

これはらはコミット〜プッシュの流れは書かないので各自で行うようにして下さい。

 

#3. テスト
」サイクルを繰り返す
テスト駆動開発では「 <font color="red";>red</font>・ <font color="green">green</font> ・ REFACTOR 」サイクルを繰り返す

touchコマンドは本来、ファイルやディレクトリのタイムスタンプだけを更新するためのコマンドなのですが、ファイルが存在しない場合には空ファイルを作成するという一種の副作用があるため、新規ファイル作成の時に使う

```bash:bash
$ touch app/views/static_pages/about.html.erb
```

#4. リファクタリング

<%= ... %>のように等号を追加すると、中のコードの実行結果がテンプレートのその部分に挿入される。

/static_pages/homeにアクセスするとhome.html.erbの内容がHTMLに変換され、<%= yield %>の位置に挿入される

-- 一連の作業 ---

コミット

````bash:bash
$ git add -A
$ git commit -m "Finish static pages"
```

マージ

```bash:bash
$ git checkout master
$ git merge static-pages
```
プッシュ

````bash:bash
$ git push
```

デプロイ

````bash:bash
$ rails test
$ git push heroku
```

#5 テスト（応用編）

やったこと

- テストの時のRedやGreenの表示の色を変えるminitest-reporters(gem)の導入

- Guard(gem)によるテストの自動化
  - 統合テストとビューが更新されたら自動的に適切なテストが実行されるように、生成されたGuardfileを編集