Rails Tutorial（2週目）-3-

#静的なページの作成
動的なページとはデータベースと連携しているページ
静的なページとはHTMLファイルだけで構成されているページ

#コントローラの生成
`$rails generate controller コントローラ名（キャメルケース）　アクション名１　アクション名２`
アクションと同時にそれに対応するビューも生成される。

>キャメルケース（英: camel case）は、複合語をひと綴りとして、要素語の最初を大文字で書き表すことをいう。キャメルケースとは、大文字が「らくだのこぶ」のように見えることからの命名である。

>スネークケースとはコンピューターで、スペース（空白）を入れずに複合語を表記する際、下線記号（アンダースコア）を用いる方式。プログラミング言語やファイル名、ハッシュタグなどに用いられる。名称は、文字列がヘビ（スネーク）のように見えることから。

`$ git add -A`
`$ git commit -m "Add a Static Pages controller"`
`$ git push -u origin static-pages`
以降は、`$git push`のみで同じ事ができる

#失敗した場合にもとに戻す
controllerの場合
`$rails generate controller StaticPages home help
  $rails destroy  controller StaticPages home help`

マイグレーションの場合
`$ rails db:migrate`
一つ前に戻るのは
`rails db:rollback`
最初の状態に戻したいときは
`$ rails db:migrate VERSION=0`
マイグレーションにはバージョン番号が付与されるため、バージョンを指定すればその状態まで復元できる。

#HTTPメソッドについて
>GETは最も頻繁に使われるHTTPリクエストで、主にWeb上のデータを読み取る (get) ときに使われます。「ページを取得する (get a page)」という意味のとおり、ブラウザはhttp://www.google.com/やhttp://www.wikipedia.org/などのWebサイトを開くたびにGETリクエストをサイトに送信します。

>POSTは、GETの次によく使用されるリクエストで、ページ上のフォームに入力した値を、ブラウザから送信する時に使われます。例えばRailsアプリケーションでは、POSTリクエストは何かを作成するときによく使われます (なお本来のHTTPでは、POSTを更新に使ってもよいとしています)。例えばユーザー登録フォームで新しいユーザーを作成するときは、POSTリクエストを送信します。

>他にも、PATCHと DELETEという2つの操作があり、それぞれサーバー上の何かを更新したり削除したりするときに使われます。これら2つの操作は、GETやPOSTほどは使われていません。これは、ブラウザがPATCHとDELETEをネイティブでは送信しないからです。しかし、Ruby on Railsなどの多くのWebフレームワークは、ブラウザがこれらの操作のリクエストを送信しているかのように見せかける技術 (偽装) を駆使して、PATCHとDELETEという操作を実現しています。結果として、Railsはこの4つのHTTPリクエスト (GET・POST・PATCH・DELETE) を全てサポートできるようになりました。

#テスト駆動開発について
テスト駆動開発 (TDD) とは、テストの手法の１つで最初に「正しいコードがないと失敗するテスト」を書き、次に本編のコードを書いてそのテストがパスするようにする方法。

###TDDのメリット
・テストが揃っていれば、機能停止に陥るような回帰バグ (Regression Bug: 以前のバグが再発したり機能の追加/変更に副作用が生じたりすること) を防止できる

・テストが揃っていれば、コードを安全にリファクタリング (機能を変更せずにコードを改善すること) ができる

・テストコードは、アプリケーションコードから見ればクライアントとして動作するので、アプリケーションの設計やシステムの他の部分とのインターフェイスを決めるときにも役に立つ。

###TDDか一括テストかの目安
>・アプリケーションのコードよりも明らかにテストコードの方が短くシンプルになる (=簡単に書ける) のであれば、「先に」書く
・動作の仕様がまだ固まりきっていない場合、アプリケーションのコードを先に書き、期待する動作を「後で」書く
・セキュリティが重要な課題またはセキュリティ周りのエラーが発生した場合、テストを「先に」書く
・バグを見つけたら、そのバグを再現するテストを「先に」書き、回帰バグを防ぐ体制を整えてから修正に取りかかる
・すぐにまた変更しそうなコード (HTML構造の細部など) に対するテストは「後で」書く
・リファクタリングするときは「先に」テストを書く。特に、エラーを起こしそうなコードや止まってしまいそうなコードを集中的にテストする

#埋め込みRuby
```app/views/static_pages/home.html.erb
<% provide(:title, "Home") %>
<!DOCTYPE html>
<html>
  <head>
    <title><%= yield(:title) %> | Ruby on Rails Tutorial Sample App</title>
  </head>
  <body>
    <h1>Sample App</h1>
    <p>
      This is the home page for the
      <a href="https://railstutorial.jp/">Ruby on Rails Tutorial</a>
      sample application.
    </p>
  </body>
</html>
```

<% ... %>と書くと、中に書かれたコードを単に実行するだけで何も出力しない。<%= ... %>のように等号を追加すると、中のコードの実行結果がテンプレートのその部分に挿入される

###ブロックとyieldについて
ブロックとはメソッドの引数として渡すことができる処理のかたまり
例えば…

```
numbers = [1, 2, 3]
sum = 0
numbers.each do |n|
  sum += n
end
```

というコードでは、eachメソッドが配列numbersから要素を一つずつ取り出し、その値をdo以降のブロックに渡している。

yieldはブロックに引数を渡したり、ブロックの戻り値を受け取ったりできる。

```
def greeting 
  puts 'aa'
  text = yield 'bb' 
  puts text
  puts 'cc'
end

greeting do |nn|
  nn * 2
end

=> aa
   bbbb
   cc
```
上の処理では,

①puts 'aa'
②bbはブロック引数として、ブロックに渡され、yieldにより、ブロックの処理を行う
③bbがブロック引数nnに代入されブロック内の処理が行われる
④ブロックの戻り値をyieldが受け取り、それが変数textに代入
⑤puts text
⑥puts 'cc'
の流れ

個人的な理解としては**yieldはブロックを呼び出し、その戻り値を返す処理。**

###provideとyieldの関係
以上を整理した上で、先程のprovideとyieldが出てくるコードを見ると
provideヘルパは、:title というラベルと "Home"という文字列を関連付けており、yieldによってそれを呼び出している形。
あまり、ブロック処理のときのyiledとは関係ないのかな？