Progate +α メモず【Ruby on Rails ①】

# はじめに
Progateに記事見つかっちゃったマンです。ありがとうございます！

[Progate +α メモず 【Ruby】](https://qiita.com/kohki_takatama/items/383ea364bbf41fdae95e)に続き、Rails編第一弾です（複数になる予定）。
範囲：ProgateのRube on Rails 5 l
# メモず
## `MVCモデル`のざっくりとした理解 ※学習前
`M: モデル`：俗に言うバックエンド。**舞台でいう裏方**。ユーザーからは見えない部分。
`V: ビュー`：俗に言うフロントエンド。**舞台でいう役者**。ユーザーに見せる部分。
`C: コントローラー`：モデルとビューの橋渡し・選定をする**舞台監督**。役者と裏方の調整、選定。
## 最初の呪文：`$ rails generate controller home top`とは？
`home`という名前の`controller`を`generate`する。
`top`という名前のアクション（メソッド）と、そのアクションのレスポンスとして表示される`top.html.erb`というビューファイルを生成する。
### 最初の1回しか使えない！
これは、同じ名前のコントローラを作れないため。
当然、別のコントローラを定義するとバグりやすい（コードの重複・構造の混乱・メンテナンスのコスト増・テスト複雑化）。
よって、**手動**で「ルーティング」「コントローラ (アクション)」「ビュー」を用意する。
※ルーティングとアクションはファイルの編集をしてコードの追加。ビューは適切なディレクトリに新規ファイル作成
### 他のジェネレータ
#### モデルのジェネレータ
- **コマンド**: `$ rails generate model ModelName property_name:property_type ...`
- **機能**: このコマンドはモデルと対応するマイグレーションファイルを生成します。
- **例**: `$ rails generate model User name:string email:string` は、`User` モデルを作成し、`name` と `email` という属性を持つマイグレーションファイルを生成します。
##### マイグレーションファイルとは
"Migration"：移行・遷移という意味。**データベースの設計図**のこと。
データベースという建物の構造を遷移させるファイル、というイメージ。
#### ビューのジェネレータ
- **コマンド**: Railsにはビュー専用のジェネレータはありません。ビューファイルは通常、コントローラーのジェネレータを使用して作成されるか、直接手動で作成されます。
- **ビューの生成**: コントローラーのジェネレータを使って、例えば `$ rails generate controller home index` を実行すると、`home` コントローラーとそれに対応する `index` ビューが生成されます。
## `.erb`って？：埋め込みRuby
> `.erb` は「Embedded Ruby」の略で、Rubyコードを埋め込むことができるテンプレートファイルの拡張子です。
> ### `.erb`ファイルの機能
> **Rubyコードの埋め込み**: `.erb` ファイルでは、HTMLなどのマークアップ言語の中に特定のタグを使用してRubyコードを埋め込むことができます。この機能により、動的なコンテンツをページに組み込むことが可能になります。
> ### `.erb`ファイルの構文
> **ERBタグ**: Rubyコードは `<% %>` というタグで囲みます。この中にRubyコードを記述します。
    - 実行のみ（出力なし）: `<% ruby_code %>` - このタグでは、Rubyコードを実行しますが、何も出力しません。
    - 実行と出力: `<%= ruby_code %>` - このタグでは、Rubyコードを実行し、その結果を出力します。
    例
```html
<!DOCTYPE html>
<html>
<head>
  <title>Example</title>
</head>
<body>
  <% @users.each do |user| %>
    <p><%= user.name %></p>
  <% end %>
</body>
</html> 
```
`Embedded`は「埋め込み」という意味。なので、`Embedded Ruby`=`.erb`は「埋め込みRuby」という意味。
HTMLファイル以外のテキストベースファイルにも使える。
## アクションの主要な役割5つ
リクエストの処理、データの操作、ビューへのデータの渡し、ビューの選択、レスポンスの生成

1. **リクエストの処理**: コントローラーのアクションは、ブラウザやその他のクライアントからのHTTPリクエストを受け取ります。これにはリクエストメソッド（GET、POSTなど）やパラメータの処理が含まれます。
    
2. **データの取得・操作**: アクションは、必要に応じてモデル（データベース）からデータを取得、更新、削除するなどの操作を行います。これはビジネスロジックの実行やデータの処理を担います。
    
3. **ビューへのデータの渡し**: アクションは処理したデータをビューに渡します。これにより、ビューは必要な情報を表示できるようになります。
    
4. **ビューの選択**: アクションは通常、コントローラーと同じ名前のビューフォルダからアクションと同じ名前のビューファイルを探してレンダリングします。
    
5. **レスポンスの生成**: 最終的に、アクションはレスポンス（通常はHTMLページ、JSON、XMLなど）を生成し、クライアントに返します。
## すべての継承元（親）`ActionController::Base`って？
> `ActionController::Base` はRailsフレームワークの一部で、コントローラーの基本的な機能を提供するクラスです。これにはHTTPリクエストの処理、ビューへのデータの渡し、レスポンスの生成などが含まれます。

> `::` はネストされたクラスやモジュールを参照する際に使用されます。これにより、Rubyプログラム内で名前空間を明確に区分することができます。
> : `ActionController::Base` では、`ActionController` モジュール内にある `Base` クラスにアクセスしています。
## ルーティング→コントローラ→ビュー：ページが表示されるまで
1. **ルーティング**：対応表を見て、リクエストされたURLに対応するコントローラ・アクションを呼び出す
2. **コントローラ**：URLに対応した**ビュー**（HTMLファイル）を送信
3. ブラウザで表示

対応表＝ルーティングに記述されてないと、みんな嫌いな**404エラー**が返される。
### ディレクトリ
ルーティングは`config`ディレクトリの中にあり、
コントローラとビューは`app`ディレクトリの中にある。
### 雑記：エラー番号には意味がある。
正確には、`HTTPステータスコード`という。

| コード | 内容 |
| ---- | ---- |
| 100番台 | 処理の継続 |
| 200番台 | 処理が成功 |
| 300番台 | リダイレクト |
| 400番台 | クライアントエラー（送信側の問題） |
| 500番台 | サーバーエラー（受信側の問題） |
それぞれの番台のなかで、さらに種類があって面白い。
特に**404**は面白くて、たいていは「サーバー側でファイルが削除されてる・URLが変更されてる」ため起こるエラーなのに、「クライアントエラー（送信側のエラー）」になる。
「存在しないページにアクセスしようとしたクライアントのミス！」
### 雑記：業界用語としての「ルート」は2種類ある
ここでの「**ルーティング（Routing）**」は、「ルート（Route）を決める」：**経路という意味**。
転じて、対応表・割り当てみたいなイメージも正しい。
IT業界には**ルート（Root）**：**根源** という言葉もあるので混同に注意。
Routeの例：ルーター（Wi-Fi ルーター）・ルーティング
Rootの例：ルートディレクトリ（プロジェクトの最上位にあるディレクトリ・フォルダ）・ルートユーザー（システム管理者）
## `.scss`って？：CSSの拡張`Sass`のファイル形式
> - **拡張機能**: `.scss` は「Sassy CSS」の略で、CSSの拡張機能を持つプリプロセッサ言語であるSass（サス）のファイル形式です。
> - **高度な機能**: Sassは変数、ネスト、ミックスイン、関数、継承などの機能を提供します。これにより、より効率的で再利用可能なコードを書くことができます。
> - **コンパイルが必要**: `.scss` ファイルは直接ブラウザで読み込むことはできません。代わりに、通常の `.css` ファイルにコンパイル（変換）する必要があります。

つまりは高度なCSS。ただここで重要なのは、
- **現在のRuby on Railsではscssがデフォルト**であり
- **app/assets/stylesheets**ディレクトリにscssファイルがデフォルトで作成されること。

（2011年のRails 3.1以前は普通のcssだったらしいよ）
## `public`ディレクトリ：サーバーが直接アクセスできる
### 「直接アクセスできる」って何？？？
#### ふつうは・・・
`http://example.com/users/1` というURLにアクセスしたとして、そこにあるファイルがすぐ表示されるわけではない。
なぜなら、そのアクセス（リクエスト）はRailsのルーターに送られ、コントローラーからアクションを通して、帰ってくるから。
#### 「直接アクセスできる」と・・・
アクセス（リクエスト）が、ルーターやコントローラー、アプリケーションのロジックを通さず（実行せず）、アクセスできる（リクエストに応答できる）。
「ロジックを実行しない」＝「負荷が軽い」「早い」。

### 実際何に使うの？
機密性を必要としない「アイコン画像」「バックグラウンド画像」「404エラーの時の表示ページ」などは「直接アクセスできる」場所に置いておくと良い。

## `get "/" => "home#top"`：トップページへのアクセス
ふつうのルーティングは、`get "about" => "home#about"`と、`/`を使わずに書く。
しかし、特定のキーワードを持たないアクセス（例：`https://www.google.com/`）に対応したいときは、`get "/" => "home#top"`と書く。この`"/"`はトップページになるのが普通。

# 終わりに
ProgateのRuby on Rails lll くらいで一つの記事になるかな～と思ったんですが。
思ったより長くなった。新しいことを学ぶのはいいですね。引き続き頑張ります。