Rails フィヨルドブートキャンプ

「Railsをはじめよう」再読とふりかえり

26/08/2023

Railsガイドの復習メモです

UnsplashArtem Sapeginが撮影した写真

Railsガイド「Rails をはじめよう」の読み直しをしたときの学習ノートです。

正確に覚えたい用語、自分が忘れていたところ、また確認するように思われる部分を簡単にメモしています。

教材としてもとても優れていると感じたので、Rails初学者の方にはRailsガイド「Rails をはじめよう」はおすすめです。

Railsガイド「Rails をはじめよう」

Railsとは

プログラミング言語RubyでかかれたWebアプリケーションフレームワーク。

 

フレームワーク
システム開発が楽にできるよう作られているプログラムの雛形。

 

フレームワークとは 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

 

「ジェネレータ」というスクリプトが多数付属していて、必要なものを自動的に生成してくれる。

 

スクリプト
スクリプト言語は簡易的なプログラミング言語の一つ。
スクリプロ言語で書かれたプログラムをスクリプトという。
書くとすぐ実行できる。

 

スクリプト(スクリプト言語)とは ITをわかりやすく解説

 

新規アプリケーション作成用のジェネレータは以下。

 

% rails new <アプリ名>

ルーティング

RubyのDSL(Domain-Specific Language) で記述されたルール。

コントローラ

Rubyのクラス。

コントローラークラスのpublicメソッドがアクション。

ビュー はテンプレート。

 

オートロード

app/ディレクトリ配下で何かを読み込むためにrequireはかかない。

 

参照:『定数の自動読み込みと再読み込み

 

【requireを書く必要があるケース】

  • lib/ディレクトリの下にあるファイルを読み込む
  • Gemfilerequire: falseが指定されているgem依存を読み込む

 

lib/ 
lib/ アプリケーションで使う拡張モジュールが置かれているところ。

MVC(Model-View-Controller)

アプリの責務を分割して理解しやすくするデザインパターン。

 

「ルーティング」「コントローラ」「アクション」「ビュー」はMVCに沿ったWebアプリの典型的な構成要素。

MVC(Model-View-Controller)

 

モデル(model)

データを表現するためのRubyクラス。

モデル名は常に英語の「単数形」で表記する。

インスタンス化されたモデルは1件のデータレコードを表すから。

 

コンストラクタ
インスタンス作成時に実行されるメソッド。

 

コンストラクタ 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

 

モデルを定義するには、以下のようにモデル用のジェネレータを実行する。

 

% bin/rails generate model <モデル名 単数形> title:string body:text

Active Record

Railsの機能。

モデルは、Active Recordを介して、データベースとやりとりをおこなう。

マイグレーション(migration)

アプリケーションのデータベース構造を変更するときに使われる機能。

Rubyコードで記述するため、データベースの種類を問わずマイグレーションを実行できる。

 

以下のコマンドでマイグレーションを実行できる。

 

% bin/rails db:migrate

 

上記のコマンドでデータベース上にテーブルが作成される。

マイグレーションにより、モデルを介してテーブルとのやりとりができるようになる。

Railsコンソール

起動するコマンド。

 

$ bin/rails console

 

コンソールでの操作はsaveメソッドを呼び出さな限りデータベースに保存されることはない。

データベースからの取り出し

対象データを取り出したいときは、そのモデルでfindメソッドを呼び出し、そのObjectのidを引数として渡す。

 

コントローラ内のインスタンス変数(@で始まる変数)は、ビューからも参照可能。

 

例) app/views/articles/index.html.erb@articlesと書く
→このインスタンス変数を参照できる。

 

【2種類のERBタグ】

<% %>タグ: 「この中のRubyコードを評価する」という意味。

<%= %>タグ :「この中のRubyコードを評価し、返された値を出力する」という意味。

 

ERBタグの中には、通常のRubyプログラムで書けるコードなら何でも書ける。

パスとパラメータ ルーティングパラメータは、リクエストのパスに含まれる特定の値をキャプチャし、paramsというハッシュに保存する。

paramsはコントローラのアクションでもアクセスできる。

 

例)GET http://localhost:3000/articles/1というリクエスト

:id1がキャプチャされる

ArticlesControllershowアクションでparams[:id]と書くとアクセス可能

CRUD追加の流れ

ルーティングを追加する

コントローラにアクションを追加する

ビューを追加する

ルーティングresources

Railsのルーティングメソッド。

 

リソースのコレクション(collection: 集まり)を対応付けるのによく使われるルーティングをすべて対応付ける。

 

以下のコマンドでルーティングがどのように対応付けられているかを表示させることができる。

 

% bin/rails routes

 

resourcesメソッドには2つのタイプがある。

_urlで終わる「URL」ヘルパーメソッド
_pathで終わる「パス」ヘルパーメソッド

 

パスヘルパーを使うことでコードが特定のルーティング設定に依存することを回避できる。

カラムの値の末尾には、パスヘルパーによって_url_pathといったサフィックス(接尾辞)が追加される。

 

article_pathヘルパーが返却するパス "/articles/#{article.id}"

パスヘルパーで、app/views/articles/index.html.erbのリンクを簡潔な形に書き直せる。

 

プレフィックス 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

 

サフィックス 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

views link_to

リンク設定のヘルパー。

 

ヘルパーメソッド
ビューテンプレートの開発に役立つメソッド。

 

第1引数はリンクテキスト、第2引数はリンク先。

第2引数にモデルオブジェクトを渡すと、link_toが適切なパスヘルパーを呼び出してオブジェクトをパスに変換する。

例) link_to <テキスト> <article> → article_path new とaction

newアクション

新しい記事を1件インスタンス化する。データベースには保存しない。

 

ビューでフォームをビルドするときに使用される。

 

newアクションを実行すると、app/views/xxxxxxx/new.html.erbがレンダリングされる。

createアクション

タイトルと本文を持つ新しい記事をインスタンス化し、データベースへの保存を試行。

 

ビルド 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

 

レンダリング 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

 

リダイレクト

createアクション実行後はリダイレクトが行われる。

redirect_toメソッドを使うとブラウザで新しいリクエストが発生する。

renderメソッドは指定のビューを現在のリクエストとしてレンダリングする。

redirect_toメソッドではステートが変更される前に呼び出すと、ユーザーがブラウザをリロードしたときに同じリクエストが再送信され、変更が重複してしまうので注意。

フォームビルダー(form builder)

最小限のコードを書くだけで設定がすべてできあがったフォームを表示できる機能。

 

送信されたフォームのデータはparamsハッシュに保存され、ルーティングパラメータも同様にキャプチャされる。

 

例)createアクションの場合

 params[:article][:title]  送信された記事タイトルにアクセス

params[:article][:body]を用いると送信された記事本文にアクセス

Strong Parameters

paramsのフィルタリング。

 

モデルの重要な属性を不必要に更新することを防止するためのセキュリティ対策。

 

strong-parameters Railsガイド

バリデーション(validation: 検証)

無効なユーザー入力を処理するための機能。

 

モデルオブジェクトを保存する前に自動的にチェックするルール。

 

対象となるモデルに追加する。

 

Active Recordは、テーブルのあらゆるカラムごとにモデル属性を自動的に定義するので、モデルファイル内でこれらの属性を宣言する必要はない。

 

newアクションはインスタンス変数を保存しないので、この時点ではバリデーションは実行されず、エラーメッセージも表示されない。

 

フォームを送信すると、POSTリクエストはcreateアクションに対応付けられる。

 

createアクションはインスタンス変数を保存しようとするので、バリデーションが実行される。

 

バリデーションのいずれかが失敗すると、インスタンス変数は保存されず、レンダリングされた/new.html.erbにエラーメッセージが表示される。

editとupdate

更新のステップは、コントローラのeditアクションとupdateアクションで扱うのが慣例。

 

newアクションとcreateアクションに近い。

 

editアクション データベースから対象データを取得してインスタンス変数に保存し、フォームを作成するときに使えるようにする。 デフォルトでapp/views/articles/edit.html.erbをレンダリング。

updateアクション

データベースから対象データを(再)取得し、 article_paramsでフィルタリングされた送信済みのフォームデータで更新を試みる。

 

Railsのフォームビルダーとリソースフルルーティングのおかげで、editで使うフォームの表示は、newで使うフォームの表示とコードは同一になる

 

フォームビルダーは、機能として

モデルオブジェクトが既に保存されている場合→edit用のフォーム
モデルオブジェクトが保存されていない場合→new用のフォーム

を自動的に構成するので、状況に応じて適切なリクエストを行える。

 

同一の部分は共有できる。

パーシャル(partial: 部分テンプレート)

共有ビュー。

 

ファイル名は冒頭にアンダースコア_必ずつける。

レンダリングでパーシャルを参照するときはアンダースコアを付けない。

 

パーシャルのコードは共有されるので、特定のインスタンス変数に依存しないようにローカル変数にする。

destroyアクション

リソースの削除 必要となるのは削除用のルーティングとコントローラのアクションだけ。

 

ルーティング:

DELETE /articles/:id

リクエストをコントローラの destroyアクションに対応付ける。

 

アクション:

データベースから記事を取得してdestroyメソッドを呼び出し、ブラウザをリダイレクトさせる。

-Rails, フィヨルドブートキャンプ
-,