Ruby on Railsの基礎
■概要
RubyでのWebアプリ開発フレームワークであるRuby on Railsについて、何も知らない状態から初心者までの導入を目的(0->30までのintro)として、
本記事を書くことにする。
①Railsの概要と環境構築
- Ruby on Railsは、2004年に登場したwebアプリケーション・フレームワークです。
- Webアプリケーションは、ブラウザなどのクライアントからの要求(リクエスト)に応じて、Webサーバーが応答(レスポンス)を生成して返す仕組みです。
RoRの特徴は、下記の三点です。
- MVCアーキテクチャ
- DRY(Don't Repeat Yourself):同じことを繰り返さない
- CoC(Convention over Configuration):設定より規約
環境構築はカットします。自前のWindowsへの環境構築は、
にて実施しているので、良ければご参照ください。
②コントローラー
■Railsアプリの開発手順
- リクエスト受け取るコントローラー(アクション)の定義
- 出力であるビューを作成する
- 共通デザインのレイアウトを適用
- データベースを作成して、アクセスするためのモデルを定義する
■アプリの作成
rails new "xxx"
■アプリの起動
rails s
■コントローラーの役割
コントローラーは、ユーザのリクエストを受け取り、
モデルやビューへその情報を渡す橋渡し役です。
■コントローラーの作成
rails g controller xxx
↓
rails g controller users
実行で、コントローラーに対応するファイルが生成される
Usersコントローラーへとメソッド(=アクション)を追加する
ルーティングは、ユーザーが特定のURLにアクセスした場合に、
どのコントローラーのどのアクションに処理を振り分けるかを定義する仕組み
■ルーティングの追加
③ビュー
■コントローラーからビューを呼び出す
コントローラーには直接的に描画処理を記述することは可能である。しかし、それはMVCに則った設計ではない。コントローラーとビューを分離する、そしてコントローラーからビューを呼び出す関係性に作り直すことが良い設計である。
■renderメソッドの書き換え
renderは、呼び出し先がtemplateファイルならば(=xx.html.erb)省略可能
■対応するビューの新規作成
index.html.erbなどのビューファイルはテンプレートと呼ぶこともある。
index.html.erb
ERBでは、
HTMLを記述するだけでなく、
■レイアウトで共通ファイルを定義
DBの概念
データを整理して格納する保存先
リライトの目的は、実務に照らして不要な点(環境構築など)をカットすることで、
Railsの要点を効率的にインプットするためである。
参考記事
↓
rails g controller users
実行で、コントローラーに対応するファイルが生成される
- viewフォルダ : app/views/users
- テストコード : test/controllers/user_controller_test.rb
- ヘルパーメソッド: app/helpers/user_helper.rb
- アセットファイル: app/assets/stylesheets/users.scss
Usersコントローラーへとメソッド(=アクション)を追加する
class UsersController < ApplicationController def index render plain: "Hello World!" end end■ルーティングの作成
ルーティングは、ユーザーが特定のURLにアクセスした場合に、
どのコントローラーのどのアクションに処理を振り分けるかを定義する仕組み
Rails.application.routes.draw do get "/users", to: "users#index" end■記述内容
- HTTPリクエストメソッド
- URLパターン
- コントローラー名#アクション
③ビュー
■コントローラーからビューを呼び出す
コントローラーには直接的に描画処理を記述することは可能である。しかし、それはMVCに則った設計ではない。コントローラーとビューを分離する、そしてコントローラーからビューを呼び出す関係性に作り直すことが良い設計である。
■renderメソッドの書き換え
class UsersController < ApplicationController def index render template: "user/index" end end
renderは、呼び出し先がtemplateファイルならば(=xx.html.erb)省略可能
■対応するビューの新規作成
index.html.erbなどのビューファイルはテンプレートと呼ぶこともある。
index.html.erb
<div>Hello World</div>■コントローラーから受け取った値をビューで表示する
ERBでは、
HTMLを記述するだけでなく、
- コントローラーから受け取った値をインスタンス変数(@xxx)として使用できる。
- 変数を表示するには<%= インスタンス変数 %>と囲む。
- インスタンス変数は、クラスのオブジェクト(インスタンス)ごとに保持される変数
....
@hello = "Hello World"
render template: "user/index" end end
<div><%= @hello World %></div>
■<%= %>と<% %>の違い
- <% %>は、Rubyのコードの実行
- <%= %>は、実行結果の戻り値の出力
<% if @hello.present? %>hello World<% end %>
■レイアウトで共通ファイルを定義
- レイアウトは、Railsが提供する共通のデザインを管理する仕組み
- app/views/layouts以下に配置する
- Railsアプリのデザインはlayouts/application.html.erbを最初に読み込む
- なので、当ファイルにヘッダー/フッターなどを書くことが可能
- yieldメソッドは、ビューファイルの内容を表示する箇所を示すもの
<body> <header>ヘッダー</header> <%= yield %> <footer>フッター</footer> </body>
■アセットファイルの確認
④データベースDBの概念
データを整理して格納する保存先
DBMS(DB Management System)の特徴
- データにアクセスする言語
- データが壊れないための管理
- データへのアクセス制限
DBの種類
- RDBMS
- ODBMS
- NoSQL
■RDB
- データをテーブルという表形式で表し、複数テーブルを関連付けてデータを管理
- データを操作する言語としてSQLを使用する
テーブル
UserとCompanyの関連付けとid保持の例より
■SQLでテーブルの作成/削除
SQLは操作が3種類に大別
⑤モデル
Railsが提供するモデルは、データベースのテーブルと対応しており、テーブルのデータを簡単に操作する機能を提供している。モデルを使えばSQLを直接記述することなく、分りやすいRubyのコードでデータを操作できる。
テーブルごとに一つのモデルが対応している。
>rails db:create
■O/Rマッピング
- DDL:DB,tableの作成/削除<--2番目に使う
- DCL:データ更新の確定/キャンセル
- DML:データの参照・作成・変更・削除<--ほぼこれ
DBの作成(SQLite3)
>sqlite3 db/sandbox sqlite3
Tableの作成
>create table users(id integer, name text);
Tableの削除
>drop table users
■SQLでのデータ操作
テーブルのレコード操作は4種類である
- insert文 :Create : insert into users(id, name) values(1,山田太郎);
- select文 :Read : select name from users; select * from users where id = 1;
- update文 :Update : update users set name = '田中太郎' where id = 1;
- delete文 :Delete : delete from users where id = 1;
⑤モデル
Railsが提供するモデルは、データベースのテーブルと対応しており、テーブルのデータを簡単に操作する機能を提供している。モデルを使えばSQLを直接記述することなく、分りやすいRubyのコードでデータを操作できる。
テーブルごとに一つのモデルが対応している。
■DBの設定
YAMLファイルにて記述。
config/database.yml
設定項目について
- adapter :DBに接続するgem
- pool :コネクションプーリングに使用するコネクションの上限
- timeout :応答待ちの上限時間
- database :データベース名
RailsコマンドでDB作成
>rails db:create
■O/Rマッピング
- オブジェクト指向言語からRDBにアクセスする際の懸け橋になる仕組み
- RoRにおいてはActiveRecordが相当する
ActiveRecordの特徴
- SQLをかかずにCRUDを実現
- RDBの関連付けをmodelクラスの関連付けで表現できること
- データの検証機能
ActiveRecordでは、レコードを識別するカラム名は、デフォルトでidとなる。また、created_at,updated_atは自動的に追加される。
■モデルクラスの作成
rails g model Diary title:string body:text
■参考
なお、本稿は下記の書籍を底本として、投稿者が適宜リライトしたものである。リライトの目的は、実務に照らして不要な点(環境構築など)をカットすることで、
Railsの要点を効率的にインプットするためである。
たった一日で基本が身に付く!Ruby on Rails
参考記事
■目次(書籍)
- Railsの概要と環境構築
- 新規作成とルーティングとアクセス手順
- コントローラからビューを作成、レイアウトの適用
- DBとSQLの操作
- モデルの役割、モデル経由のDB操作
- 日記アプリの作成、Scaffold
- データの登録、更新、削除
- 検証ルール