1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2024-01-12

はじめに

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

Progate +α メモず 【Ruby】に続き、Rails編第一弾です(複数になる予定)。
範囲:ProgateのRube on Rails 5 l

メモず

MVCモデルのざっくりとした理解 ※学習前

M: モデル:俗に言うバックエンド。舞台でいう裏方。ユーザーからは見えない部分。
V: ビュー:俗に言うフロントエンド。舞台でいう役者。ユーザーに見せる部分。
C: コントローラー:モデルとビューの橋渡し・選定をする舞台監督。役者と裏方の調整、選定。

最初の呪文:$ rails generate controller home topとは?

homeという名前のcontrollergenerateする。
topという名前のアクション(メソッド)と、そのアクションのレスポンスとして表示されるtop.html.erbというビューファイルを生成する。

最初の1回しか使えない!

これは、同じ名前のコントローラを作れないため。
当然、別のコントローラを定義するとバグりやすい(コードの重複・構造の混乱・メンテナンスのコスト増・テスト複雑化)。
よって、手動で「ルーティング」「コントローラ (アクション)」「ビュー」を用意する。
※ルーティングとアクションはファイルの編集をしてコードの追加。ビューは適切なディレクトリに新規ファイル作成

他のジェネレータ

モデルのジェネレータ

  • コマンド: $ rails generate model ModelName property_name:property_type ...
  • 機能: このコマンドはモデルと対応するマイグレーションファイルを生成します。
  • : $ rails generate model User name:string email:string は、User モデルを作成し、nameemail という属性を持つマイグレーションファイルを生成します。
マイグレーションファイルとは

"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つ

リクエストの処理、データの操作、ビューへのデータの渡し、ビューの選択、レスポンスの生成

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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?