はじめに
Progateに記事見つかっちゃったマンです。ありがとうございます!
Progate +α メモず 【Ruby】に続き、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コードを実行し、その結果を出力します。
例
<!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つ
リクエストの処理、データの操作、ビューへのデータの渡し、ビューの選択、レスポンスの生成
-
リクエストの処理: コントローラーのアクションは、ブラウザやその他のクライアントからのHTTPリクエストを受け取ります。これにはリクエストメソッド(GET、POSTなど)やパラメータの処理が含まれます。
-
データの取得・操作: アクションは、必要に応じてモデル(データベース)からデータを取得、更新、削除するなどの操作を行います。これはビジネスロジックの実行やデータの処理を担います。
-
ビューへのデータの渡し: アクションは処理したデータをビューに渡します。これにより、ビューは必要な情報を表示できるようになります。
-
ビューの選択: アクションは通常、コントローラーと同じ名前のビューフォルダからアクションと同じ名前のビューファイルを探してレンダリングします。
-
レスポンスの生成: 最終的に、アクションはレスポンス(通常はHTMLページ、JSON、XMLなど)を生成し、クライアントに返します。
すべての継承元(親)ActionController::Base
って?
ActionController::Base
はRailsフレームワークの一部で、コントローラーの基本的な機能を提供するクラスです。これにはHTTPリクエストの処理、ビューへのデータの渡し、レスポンスの生成などが含まれます。
::
はネストされたクラスやモジュールを参照する際に使用されます。これにより、Rubyプログラム内で名前空間を明確に区分することができます。
:ActionController::Base
では、ActionController
モジュール内にあるBase
クラスにアクセスしています。
ルーティング→コントローラ→ビュー:ページが表示されるまで
- ルーティング:対応表を見て、リクエストされたURLに対応するコントローラ・アクションを呼び出す
- コントローラ:URLに対応したビュー(HTMLファイル)を送信
- ブラウザで表示
対応表=ルーティングに記述されてないと、みんな嫌いな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 くらいで一つの記事になるかな~と思ったんですが。
思ったより長くなった。新しいことを学ぶのはいいですね。引き続き頑張ります。