Railsチュートリアル3章学習まとめ

こんにちは本日からRailsチュートリアルで学習したことをまとめます。
慣れないMarkDown記法も記載していくので暖かい目で見守っていただければ幸いです

# 筆者について
###### ・WEBディレクター、デバッガーを未経験から5年やっていた
###### ・現在メンターをつけてプログラミングについて学んでいる（3ヶ月目）
###### ・エンジニアになるのを見越してHTML/CSSから学び現在Ruby on Railsを学習している
###### ・Railsチュートリアルを現時点で1周完走し復習の為本記事について執筆する
###### ・Railsチュートリアル完走したのは40日程度
###### ・Railsチュートリアル7.0使用

# HTTPメソッドについて
##### HTTPには基本的な4つのメソッドがあり、それぞれは特定の操作に対応しています。これらのメソッドは、クライアント（例えばウェブブラウザ）とサーバー（例えばWebサーバー）間の通信を円滑にするために使われます。Ruby on RailsのようなWebフレームワークは、これらのメソッドを活用して効率的にアプリケーションを構築します。

`GET: データを読み取るために使用され、Webページを閲覧する際などに頻繁に使われる。`
`POST: データをサーバーに送信するために使用され、フォームの送信などに使われる。新しいデータの作成にも使用されることが多い。`
`PATCH: 既存のデータを部分的に更新するときに使用される。`
`DELETE: サーバー上のデータを削除するときに使用される。`




## 3.8
```app/controllers/static_pages_controller.rb
class StaticPagesController < ApplicationController
  def home
  end

  def help
  end
end
```
static_pages_controller.rbはStaticPagesControllerというクラスを定義している。
さらにdefというキーワードを使って、homeアクションやhelpアクションを定義しています。
`※defはキーワードメソッドを定義する際に用いてendで閉じる。`

`/static_pages/homeというURLにアクセスすると、RailsはStaticPagesコントローラを参照し、homeアクションに記述されているコードを実行。その後、そのアクションに対応するビュー（MVCのVに相当）を出力する。
今回はhomeにアクセスしてビューを表示するだけになっている。`

つまり/static_pages_controller.rbで定義したhomeとhelpのviewを表示する。
`（例）app/views/static_pages/home.html.erb`動作をしている。

## テストについて
正直ここの本番とテスト環境の切り分けというのが感覚的に理解できていないと思ってます。
Railsチュートリアルでは言われるがままなすがままに手順通り構築をしていたのですが...
一旦この章に記述してあることを咀嚼しながら理解したいと思います。

### テストの目的
###### 以下長いのでインラインで記入します
```
[chatGPTによるまとめ]
#品質保証: テストは機能が正しく実装されていることを確認し、バグや不具合が本番環境に進出する前に見つけ出す役割を果たします。
#開発速度の向上: テストが充実していれば、問題が発生した際に原因を特定するために費やす時間が減少します。これにより、より迅速に開発を進めることが可能になります。
#セーフティネット: 開発中にリファクタリングや機能追加を行う際、既存のテストが問題なく動作することで、新たに導入した変更が既存の機能を損なっていないことを保証します。
#実行可能なドキュメント: テストコードは、アプリケーションの機能がどのように動作すべきかを示す「生きたドキュメント」として機能します。これにより、他の開発者がコードを理解しやすくなります。
#テスト駆動開発（TDD）の選択: テストは、テスト駆動開発のアプローチに従って先に書かれることもあります。これはテストが失敗することで期待する機能がまだ実装されていないことを示し、その後のコードの記述でテストがパスするようにします。ただし、テストに対するアプローチはプロジェクトや開発者によって異なることがあり、柔軟に対応することが推奨されています。
```
こちらテストをする上での目的です。
テストをする上でもどのタイミングで活用するのか理解していないと使いこなせません。
```
以下余談ですが
私はrailsチュートリアルで構築した時は失敗した経験から
何か複雑なコードを入れた、アクションを追加した度にひたすらrails testをかけ
どこの部分で失敗分岐があったのかとにかく一息ついたら入力していました。
```
ではチュートリアルを要約した上でどのタイミングでテストを実行するのか整理します。
```
[テストをする上でのメリット]
#回帰バグの防止：適切なテストがあれば、以前に修正されたバグが再発するのを防ぎ、新しい機能の追加が既存のシステムに悪影響を及ぼすのを避けることができます。
#安全なリファクタリング：テストが整っていれば、コードを安心して改善することができます。これにより、機能を損なうことなく、よりクリーンなコードへと進化させることが可能です。
#設計の助成：テストコードはアプリケーションの外部からのクライアントとして機能し、システム設計やインターフェースの決定に有用です。
```
```
[テストのタイミング]
#テストコードが比較的簡単に書ける場合：先にテストを書く。
#動作仕様が不確定な場合：アプリケーションコードを先に書き、テストは後から追加する。
#セキュリティが重要な場合やバグが発見された場合：先にテストを書いてから、コードの修正や機能の追加を行う。
#頻繁に変更されるコードに対しては：変更後にテストを書く。
#リファクタリング時：変更前にテストを書く。
```
等、場面に応じて適切にテストを実施する必要があるようです。

## 3.4.3レイアウトとERB（Refactor）
ここのでセクションの問題点は下記です。
`・ページのタイトルがどれもほぼ同じ（完全にではないが）。`
`・「Ruby on Rails Tutorial Sample App」という文字が3つのタイトルで繰り返し使われている。`
`・HTMLの構造全体が各ページで重複している。`

```
これは私の解釈の認識でのまとめですが、Railsは重複するコードを良しとはせず効率化、簡略化する言語だと認識しています。
その中でERBをつかったりパーシャルを使ったりして同じコードで重複しない
美しいコードを目指すのがRails本来の姿だとチュートリアルを通して認識しています。
この為リファクタリングという概念が出てきており、HTMLの従来の記述だと間違ってないんだけど
その形って美しくないよね、構造的に問題がないかrails testをしてリファクタリングをしても
問題がないようにチェックしたあとにリファクタリングをやりましょうね。と言っている気がします。(笑)
```

#### ERBとは
Rubyの埋め込みコードのこと
下記内容はERBを利用した例
```
<% provide(:title, "Home") %>
```
上の説明では、Ruby on Railsのビューテンプレートでの構文とメソッドの使用が説明されています。<% ... %> で provide メソッドを用いて "Home" という文字列をタイトルとして設定し、<%= ... %> で yield メソッドを通じてそのタイトルをテンプレートに表示。このプロセスにより、ページのタイトルを動的に生成。

```
<title><%= yield(:title) %> | Ruby on Rails Tutorial Sample App</title>
```
Ruby on RailsのERBテンプレートでは、<% ... %> はコードを実行するがブラウザには何も表示しない。一方で、<%= ... %> を使用すると、コードの実行結果がテンプレートに表示。これにより、ページのタイトルなどの可変部分が動的に生成されるが、ページの外観は以前と変わらずに保たれる。

これは個人的な解釈ですが一番最初の provide(:title, "Home"）で
Homeって何ですか？と定義した上で
```
<title><%= yield(:title) %> | Ruby on Rails Tutorial Sample App</title>
```
こちらのtitleタグにyieldメソッドを通じて(:title)と定義したHomeを表示させると解釈してます。
`※yieldメソッド...そのメソッドに与えられたブロックのコードが実行される。`

こんな感じで１つずつ定義したものに対してロジックがあって、重複しないように１つずつ積み重ねてるのが
Ruby on Railsという記述するコードの概念なのかなって感じで捉えてます。
## 演習
###### Fooというコントローラを生成し、その中にbarとbazアクションを追加してみてください

```
rails g controller Foo bar baz
```

生成される
```config/route.rb
Rails.application.routes.draw do
  get 'foo/bar'
  get 'foo/baz'
  （略）
```

```app/controllers/foo_controller.rb

class FooController < ApplicationController
  def bar
  end

  def baz
  end
end
```
###### コラム 3.1で紹介したテクニックを駆使して、Fooコントローラとそれに関連するアクションを削除してみてください。
```
$ rails d controller Foo bar baz
```

## 本章まとめ（引用）

・新しいRailsアプリケーションをゼロから作成したのはこれで3度目。必要なgemのインストール、リモートリポジトリへのプッシュ、今回はproduction環境の設定まで行った
・コントローラを新規作成するためのrailsコマンドはrails generate controller ControllerName アクション名（省略可）。
・新しいルーティングはconfig/routes.rbファイルで定義する
・Railsのビューでは、静的HTMLの他にERB（埋め込みRuby: Embedded RuBy）が使える
・常に自動化テストを使って新機能開発を進めることで、自信を持ってリファクタリングできるようになり、回帰バグも素早くキャッチできるようになる
・テスト駆動開発では「 red ・ green ・REFACTOR」サイクルを繰り返す
・Railsのレイアウトでは、アプリケーションのページの共通部分をテンプレートに置くことでコードの重複を解決することができる



以上、めろんぱんの学習まとめでした。