0
0

More than 1 year has passed since last update.

Ruby on Rails学習メモ

Posted at

MVC(Model-View-Controller)とは

ソフトウェア開発における重要なアーキテクチャパターンの一つです。特に、ウェブアプリケーションの開発において広く使用されています。MVCは、アプリケーションのコードを機能的に分割し、保守性と拡張性を向上させるための設計原則を提供します

Model(モデル)

モデルはアプリケーションのデータとビジネスロジックを扱います。データベースから情報を取得したり、データの操作(追加、削除、更新)を行ったりします。例えば、ブログの場合は、投稿やコメントのデータを管理する役割を持ちます。

View(ビュー)

ビューはユーザーに表示される部分です。HTMLやCSS、JavaScriptを使って、実際に見えるインタフェースを作ります。モデルから受け取ったデータを表示したり、ユーザーとの対話を可能にするための要素(ボタン、フォームなど)を作成します。例えば、ブログの場合は、投稿一覧や個別の投稿表示などがビューになります。

Controller(コントローラ)

コントローラはユーザーの操作やリクエストを処理します。ユーザーからの入力を受け取り、それに応じて適切な処理を実行します。具体的には、リクエストを受け取ってモデルからデータを取得し、それをビューに渡す役割を担います。また、ビューからのユーザーの操作(ボタンのクリック、フォームの送信など)を受け取り、それに応じてモデルの更新や他の処理を実行します。

MVCアーキテクチャのメリットは、アプリケーションのコードを機能的に分割し、各パーツの役割を明確にすることです。これにより、コードの再利用性や保守性が向上し、変更や拡張が容易になります。例えば、ビューのデザインを変更する場合でも、モデルやコントローラのコードに手を加える必要がありません。

パーシャル化とは?

Ruby on Railsの用語で、HTMLを再利用可能な部分(パーシャル)に分割することを指します。パーシャルは、繰り返し使用されるコードを一箇所にまとめ、そのコード片を必要な場所で再利用するためのテクニックです。

たとえば、フォーム部分をパーシャル化するというのは、フォームのHTMLを別のファイル(通常は_form.html.erbなどと名付けられ、アンダースコアで始まるファイル名が一般的です)に切り出すことを意味します。そして、そのパーシャルは、renderメソッドを使って必要なビューから呼び出すことができます。

例えば、new.html.erbとedit.html.erbという2つのビューがあるとします。両方のビューでほぼ同じフォームが使われているとしましょう。この場合、フォームのHTMLをパーシャル(_form.html.erb)に切り出して、それぞれのビューで以下のように呼び出すことができます:

ruby
<%= render 'form' %>

これにより、フォームのコードを一箇所にまとめることができ、コードの重複を避け、保守性を向上させることができます。また、フォームの変更が必要な場合は、パーシャルを編集するだけで良くなります。

変数paramsの使い方

paramsはRuby on Railsで非常に重要な役割を果たすハッシュのようなオブジェクトです。paramsを使うと、コントローラーがブラウザから送られてきたパラメータ(情報)を取得することができます。主に、フォームから送信されたデータやURLの一部(例えば、URLのクエリパラメータやルーティングパラメータ)を取得するのに使われます。

URLのパラメータを取得する

paramsを使うと、URLの一部として送られてきた情報を取得することができます。

例えば、http://www.example.com/users/123 というURLがあるとします。
ここで123はユーザーのIDを表しています。このユーザーIDをコントローラー内で取得するには、以下のようにparamsを使います。

ruby
def show
  @user = User.find(params[:id])
end

ここでparams[:id]はURLからID 123を取得します。

フォームからデータを取得する

フォームからデータを送信すると、そのデータはparamsを通じてコントローラーで取得することができます。例えば、ユーザー名とメールアドレスを持つフォームからデータを送信したとします。そのデータは、以下のようにparamsで取得できます。

def create
  @user = User.new
  @user.name = params[:name]
  @user.email = params[:email]
  @user.save
end

ここでparams[:name]とparams[:email]はフォームから送信されたユーザー名とメールアドレスを取得します。

なお、フォームから送信されるデータは通常、モデル名でネストされています。例えば、Userモデルのフォームからデータを送信すると、params[:user]の中にユーザーのデータが入っています。そのため、以下のようにデータを取得することがよくあります:

def create
  @user = User.new(params[:user])
end

ここで、params[:user]はフォームから送信されたユーザーのデータを取得します。

ただし、このようにパラメータを直接モデルに渡すと、セキュリティの問題が生じる可能性があります。そのため、通常は"ストロングパラメータ"と呼ばれる手法を使って、許可されたパラメータだけをモデルに渡すようにします。ストロングパラメータの使用例は以下のようになります:

def create
  @user = User.new(user_params)
end

private

def user_params
  params.require(:user).permit(:name, :email)
end

ここで、user_paramsメソッドがストロングパラメータを定義しています。このメソッドはparams[:user]から:nameと:emailだけを許可して、それ以外のパラメータを排除します。

特定のルートを追加、除外

resources メソッドには only と except オプションがあり、これらは特定のルートだけを追加、除外するのに使うことができます。

例えば、todos リソースに対して index, show, new, create の 4 つのルートだけを生成したい場合、以下のように書くことができます:

resources :todos, only: [:index, :show, :new, :create]

逆に、すべての標準的なルートを生成したいけど、destroy ルートだけは除外したいといった場合には、以下のように except オプションを使うことができます:

resources :todos, except: [:destroy]

only や except オプションを使うことで、アプリケーションの要件に合わせてルーティングを細かく制御することができます。

よく使うコマンド一覧

Ruby on Railsでよく使われるコマンドの一覧

rails new [アプリ名]: 新しいRailsアプリケーションを作成します。 末尾に--apiでapi作成
rails s(server): アプリケーションを開発用サーバーで起動します。
rails g(generate) [ジェネレータ名]: モデル、コントローラ、ビューなどのコードを自動生成します。

rails g model モデル名 カラム名:データ型

postsテーブルをつくるにはモデル名をPostと単数形にする。

rails g controller コントローラ名 アクション名

コントローラー作成

rails consoleまたはrails c: Railsコンソールを起動し、アプリケーションと対話します。
rails db:migrate: データベースのマイグレーションを実行し、テーブルやスキーマを更新します。
rails db:create: データベースを作成します。
rails db:drop: データベースを削除します。
rails db:seed: データベースに初期データを投入します。
rails routes: アプリケーションのルーティング情報を表示します。
rails test: テストスイートを実行し、テスト結果を表示します。
rails generate scaffold [モデル名]: モデル、コントローラ、ビューなどを自動生成し、CRUD操作を提供するフル機能のリソースを作成します。
rails db:migrate:status: マイグレーションの状態を表示します。
rails db:rollback: 直近のマイグレーションをロールバックします。
rails db:reset: データベースを削除し、マイグレーションを再実行して初期状態にリセットします。
rails db:setup: データベースを作成し、マイグレーションを実行し、初期データを投入します。

データ型一覧

文字列型

VARCHAR(n): string
TEXT: text
CHAR(n): string(長さ固定の文字列)

整数型

INTEGER: integer
BIGINT: bigint
SMALLINT: smallint

浮動小数点数型

DECIMAL(p, s): decimal
FLOAT: float
REAL: float

日付型

DATE: date
DATETIME: datetime
TIME: time
TIMESTAMP: datetime

真偽値型

BOOLEAN: boolean

バイナリ型

BLOB: binary
BYTEA: binary

JSON型

JSON: json
JSONB: jsonb

配列型

ARRAY: array

列挙型

ENUM: enum
これらのデータ型は、Railsのマイグレーションファイル内で使用されます。マイグレーションファイルを使用してデータベースのスキーマを作成・変更する際に、適切なデータ型を選択して使用します。

0
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
0
0