Ruby on Rails

【Ruby on Rails】チュートリアル「第2章 Toyアプリケーション」をやってみた

Ruby on Rails チュートリアルの第2章のメモです。第2章ではscaffoldというコード自動生成機能を駆使して、高速で機能を開発しつつ、RESTアーキテクチャを学ぶことができます!

第2章 Toyアプリケーション | Rails チュートリアル

Railsチュートリアル第2章をやってみた

データモデルの設計

Webアプリケーションを作る際、構造を表すためのデータモデルを最初に設計しておくのが慣例

リソースの作成

データモデルとそのモデルを表示するためのWebインターフェースを組み合わせたものをリソースと呼ぶ
Railsではscaffoldジェネレータという機能を使うことで、リソースのコードを自動生成できる

scaffoldを利用したUsersリソースの自動生成

rails generate scaffoldコマンドを叩くことで、リソースを自動生成できる

rails generate scaffold User name:string email:string

scaffoldジェネレータで生成できるのは、リソースのコードのみ
モデルとデータベースと連携させるため、
作成したリソースをRakeを利用してマイグレート(migrate)する

bundle exec rake db:migrate

これで、リソース(RESTアーキテクチャ)の自動生成とデータベースへの自動構築が完了する

Rakeとは?

Unixでは、C言語などのプログラムをビルドするためにmakeというツールが利用されてきた
RakeはRuby版のmakeコマンド

RailsにおけるMVCの挙動

  • ブラウザから「/users」というURLのリクエストをRailsサーバに送信
  • 「/users」リクエストは、RailsのルーターによってUsersコントローラ内のindexアクションに割り当てられる
  • indexアクションが実行され、そこからUserモデルに、「全てのユーザを取り出せ」(User.all)と問い合わせる
  • Userモデルは問い合わせを受け、すべてのユーザーをデータベースから取り出す
  • データベースから取り出したユーザの一覧をUserモデルからコントローラに返す
  • Usersコントローラ、ユーザの一覧を@users変数(@はRubyのインスタンス変数を表す)に保存し、indexビューに渡す
  • indexビューが起動し、ERB(Embedded RuBy: ビューのHTMLに埋め込まれているRubyコード)を実行してHTMLを生成(レンダリング)する
  • コントローラは、ビューで生成されたHTMLを受け取り、ブラウザに返す

RailsにおけるRESTアーキテクチャ

REpresentational State Transfer(REST)
インターネットそのものやWebアプリケーションなどの、分散/ネットワーク化されたシステムやアプリケーションを構築するためのアーキテクチャのスタイルの1つ
RailsにおけるRESTとは、
アプリケーションを構成するコンポーネントを「リソース」としてモデル化する
ことを指す
リソースは、
RDBの作成/読み取り/更新/削除(Create/Read/Update/Delete:CRUD)操作

4つの基本的なHTTPrequestメソッド(POST/GET/PATCH/DELETE)
の両方に対応している

Railsにおけるインスタンス変数

@記号で始まる変数はRubyではインスタンス変数と呼ばれる
Railsのビューでは自動的にこれらのインスタンス変数を使用できる
CakePHPでは、

$this->set(compact($users));

みたいに書いていたのがなくなって楽そう!

scaffoldジェネレータによって自動生成されたリソースの欠点

  • データのバリデーション(検証)が行われていない
  • ユーザ認証が行われていない
  • テストが書かれていない
  • レイアウトやスタイルが整っていない
  • 理解が困難

Railsにおける検証(バリデーション)

バリデーションはmodel(app/models/micropost.rb)で行う

class Micropost ActiveRecord::Base
  validates :content, length: { maximum: 140 }
end

RailsにおけるRelationals関連付け

異なるデータモデル同士の関連付けをすることで、より簡単にデータアクセスすることができるようになる
モデルでhas_manyとかbelongs_toを書いていく
CakePHPとほぼおなじ

class User ActiveRecord::Base
  has_many :microposts
end

class Micropost ActiveRecord::Base
  belongs_to :user
  validates :content, length: { maximum: 140 }
end

RailsのConsole

ターミナルでrails consoleコマンドを入力すると立ち上がる
RailsのコマンドをCUIで叩くことができる
exitコマンドかCtrl-dで終了できる

Railsの継承の階層

CakePHPと同じ構造

Railsのモデルの継承構造

RailsのモデルはActiveRecode::Baseというクラスを継承している
継承することで、作成したモデルオブジェクトがデータベースにアクセスできるようになる

RailsのControllerの継承構造

Railsのコントローラの継承構造は2段階になっている
まず各コントローラはApplicationControllerを継承している
そして、ApplicationController`はActionController::Baseを継承している
Railsのコントローラは必ず
ApplicationController`を継承しているので、共通処理などはApplicationコントローラに記載する

Ruby on Rails チュートリアル 「第2章 Toyアプリケーション」まとめ

  • Scaffold機能でコードを自動生成すると、Webのあらゆる部分からモデルデータにアクセスしてやりとりできるようになる
  • Scaffoldは何より手っ取り早やいのがとりえだけど、理解には向いていない
  • RailsではMVCモデルが採用されている
  • Railsが解釈するRESTには、標準的なURLセットと、データモデルとやりとりをするてためのコントローラアクションが含まれている
  • Railsにはバリデーションがサポートされている
  • データモデルの関連付けのための組み込み関数が多数ある
  • コンソールを使える

かかった時間は1時間ほど
CakePHPはRailsがベースとなっているだけあり、似ているところが多い
Ruby on Rails チュートリアル 第2章までかかった合計時間は3時間

次回記事は、こちら!
Ruby on Rails チュートリアル「第3章 ほぼ静的なページの作成」をやってみた

Ruby on Railsのおすすめ書籍はこちら!


-Ruby on Rails