はじめに
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 くらいで一つの記事になるかな~と思ったんですが。
思ったより長くなった。新しいことを学ぶのはいいですね。引き続き頑張ります。