railsの続きです。前回はhello_appをGitHubにプッシュ & Renderにデプロイしました(Railsチュートリアル第1章クリア!)。今回からチュートリアルの第2章に入っていきます。Toyアプリケーションを作ります。「Scaffold」というツールを使うようです。それではいきましょう!
【目次】
- Railsチュートリアル第2章
- 作ったもの
- ローカル環境
- scaffold
- データモデルを設計(Userモデル、Micropostモデル)
- Usersリソース
- MVCの挙動
- ルーティング(REST)
- ユーザー一覧
- Micropostsリソースを生成
- マイクロポストに140文字制限を設定
- ユーザーとマイクロポストを関連づけ
- クラスの継承
- 最後に
Reactを習得するためにやったことまとめ qiita.com
Railsチュートリアル第2章
Railsチュートリアル第2章に入っていく!ここからは有料版の範囲になる。
下記のリンクはチュートリアルを購入して、アカウントにログインすると開くことができる。
※参考:第2章 Toyアプリケーション - Railsチュートリアル
第2章は「Toyアプリケーション」というアプリを作成する内容になっている。
- ローカル環境構築
- scaffoldジェネレータを使う
- データモデルを設計(Userモデル、Micropostモデル)
- Usersリソースを生成(scaffoldコマンド)
- MVCの挙動を体験
- ルーティングを体験(REST)
- ユーザー一覧を表示
- Micropostsリソースを生成
- マイクロポストに140文字制限を設定
- ユーザーとマイクロポストを関連づけ
- クラス継承を体験
作ったもの
ユーザー一覧ページ(/users)
New userを押す
ユーザー追加ページ(/users/new)
名前とメールアドレスを入力
「Create User」を押す
なお、テスト用のメールアドレスのドメインは「example.com」にした
※参考:メールアドレスやURLの例に使えるサンプル用ドメイン [ホームページ作成] All About
登録成功
「Back to users」を押す
ユーザー一覧が表示される
「Show this user」を押す
ユーザー編集画面(ここで修正できる)
「Destroy this user」を押すと
ユーザーを削除できる
CRUD(Create、Read、Update、Delete操作ができることがわかる
マイクロポストの一覧画面(/microposts)
New micropostを押す
ポスト投稿画面(Userはユーザーid番号を入れる)
ポストを追加した後のポスト一覧画面
ポスト追加時に140字を超えるとアラートが表示される
リポジトリ
※参考:GitHub - ryo-i/rails_toy_appp
ローカル環境
まず前々回の記事の時と同じく、ローカル環境でrails環境を構築する。
※参考:【Rails】Codespacesとローカルに環境構築(Railsチュートリアル1章) - クモのようにコツコツと
Gemfileの内容を変更する
※参考:sample_apps/7_0/ch02/Gemfile at main · yasslab/sample_apps · GitHub
scaffold
第2章ではscaffoldジェネレータを使ってアプリを作成した。
アプリケーションの基本的な機能の一覧(index)、詳細(show)、新規作成(new/create)、編集(edit/update)、削除(destroy)するために必要なコントローラ、モデル、ビューをまとめて生成
※参考:rails generate scaffold | Railsドキュメント
Railsを作ったDavid Heinemer Hanssonさんが「15分で作るブログ(英語)」という動画でscaffoldを使ったブログの作り方を紹介していて有名になったとのこと。 www.youtube.com
データモデルを設計(Userモデル、Micropostモデル)
今回からDBを使うため、データモデルを設計した。
Userモデル
- id: integer型
- name: string型
- email: string型
Micropostモデル
- content: text型
- user_id: integer型
integer型は整数。string型は文字列。
※参考:[Rails]データベースのデータ型種類について勉強してみた! #Ruby - Qiita
Usersリソース
Usersリソースを生成するために下記のコマンドを実行した。
$ rails generate scaffold User name:string email:string
rails generate
はrailsジェネレータという機能になる。
※参考:Rails ジェネレータとテンプレート入門 - Railsガイド
scaffold
は文字通りscaffoldのジェネレータを意味する
※参考:rails generate scaffold | Railsドキュメント
その後に、User
データモデルにname
(string型)とemail
(string型)を追加している。
id
は最初から組み込まれるらしく、追加しなくても良い様だ。
続いて、DBをマイグレートする
# rails db:migrate
このコマンドはActive Record マイグレーションを実行する意味になる。
※参考:Active Record マイグレーション - Railsガイド
Active Record はRails公式のORM
Active Recordとは、MVCで言うところのM、つまりモデルに相当するものであり、ビジネスデータとビジネスロジックを表すシステムの階層です。
ORMはRDBを操作するための仕組み。SQLではなくバックエンド環境の言語で操作できる。
オブジェクト関係マッピング(ORM、Object-Relational Mapping)は、オブジェクト指向プログラミングと関係データベースの互換性を向上させるために設計されたプログラミング技術です。
※参考:Active Record の基礎 - Railsガイド
MVCの挙動
Userモデルの動きをMVCに当てはめると下記になる。
- ユーザーがブラウザからurlをリクエストする
- RailsルーターがurlをControllerに伝える
- ControllerからModelにデータを問い合わせる
- Modellがデータベースから値を取得する
- ModellがControllerにデータを返す
- ControllerからViewにデータを渡す
- Viewがデータが入った状態のページを返す
- Controllerがブラウザにhtmlのレスポンスを返す
こうして見るとユーザーとの間にはControllが立っていて、Modellから取得したデータをViewに合体させたページを返している。
ルーティング(REST)
画面のリンクやボタンをクリックすると別の画面に遷移して、ページのurlも変わる。
config/routes.rb
に設定する
resources :users
※参考:sample_apps/7_0/ch02/config/routes.rb at main · yasslab/sample_apps · GitHub
ルーティングの詳細
ユーザー一覧
ユーザー一覧の設定をapp/views/users/index.html.erb
に記載する。
※参考:sample_apps/7_0/ch02/app/views/users/index.html.erb at main · yasslab/sample_apps · GitHub
Micropostsリソースを生成
先ほどのUsersと同じくrails generate
コマンドを実行
# rails generate scaffold Micropost content:text user_id:integer
DBをマイグレート
# rails db:migrate
config/routes.rb
にルーティング設定
resources :microposts
※参考:sample_apps/7_0/ch02/config/routes.rb at main · yasslab/sample_apps · GitHub
マイクロポストに140文字制限を設定
app/models/micropost.rb
に下記を追記
validates :content, length: { maximum: 140 }
バリデーション機能詳細
※参考:Active Record バリデーション - Railsガイド
ユーザーとマイクロポストを関連づけ
app/models/user.rb
にユーザーとマイクロポストを関連づける設定を追加
has_many :microposts
※参考:sample_apps/7_0/ch02/app/models/user.rb at main · yasslab/sample_apps · GitHub
has_many関連付けは、has_oneと似ていますが、相手のモデルとの「1対多」のつながりを表す点が異なります。
※参考:Active Record の関連付け - Railsガイド
app/models/micropost.rb
にユーザーにポストを従属させる設定を追加
belongs_to :user
あるモデルでbelongs_to関連付けを行なうと、宣言を行ったモデルの各インスタンスは、他方のモデルのインスタンスに文字どおり「従属(belongs to)」します
※参考:Active Record の関連付け - Railsガイド
クラスの継承
app/models/user.rb
にApplicationRecord
クラスの継承がある。オブジェクト指向らしい作り♪
class User < ApplicationRecord
※参考:sample_apps/7_0/ch02/app/models/user.rb at main · yasslab/sample_apps · GitHub
app/models/micropost.rb
にもある
class Micropost < ApplicationRecord
※参考:sample_apps/7_0/ch02/app/models/micropost.rb at main · yasslab/sample_apps · GitHub
ApplicationRecordはrubyにあらかじめ組み込まれているクラス
※参考:Active Record の基礎 - Railsガイド
最後に
とうことで、Toyアプリケーションを作りました。ユーザー登録、ポスト投稿、さらにCRUD処理、複数ページに遷移(ルーティング)など基本的な機能が備わっています。
RailsにはMVC構成のフォルダが最初から備わっており、さらにScaffoldを使うと簡単にアプリケーションを実装できることがわかりました。
今回でMVCの機能がどのように関連しあいながら動いているのか、ModelのDB操作やViewのページ生成の部分がどうなっているのかが体験できたので良かったです。DBを操作するORMであるActive Recordも初めて体験しました。
3章からはScaffoldを使わずに、そしてさらに機能の多いアプリケーション作りに入っていくようです!ここからが本丸!それではまた!
Reactを習得するためにやったことまとめ qiita.com