第2章 Toyアプリケーション
scaffold
という即席のアプローチを使うらしい
2.1 アプリケーションの計画
- toy_appという新しいアプリを
rails new
bundle install
は大体うまくいかないので bundle update
してから実行
- そういえば
bundle install/update
とはなんぞや
- Hello, worldと同じようにherokuへデプロイ
- いきなりDBのテーブルのようなユーザーのデータモデルが登場
- マイクロポスト?
- マイクロソフトなら知ってる
- ユーザーに関連付けられたテキスト
2.2 Usersリソース
- 噂の
scaffold
scaffold
で生成された膨大なコードを今詳細に読む必要はありません。今の段階ではおそらく混乱するだけでしょう。
invoke active_record
create db/migrate/20191106133342_create_users.rb
create app/models/user.rb
invoke test_unit
create test/models/user_test.rb
create test/fixtures/users.yml
invoke resource_route
route resources :users
invoke scaffold_controller
create app/controllers/users_controller.rb
invoke erb
create app/views/users
create app/views/users/index.html.erb
create app/views/users/edit.html.erb
create app/views/users/show.html.erb
create app/views/users/new.html.erb
create app/views/users/_form.html.erb
invoke test_unit
create test/controllers/users_controller_test.rb
invoke helper
create app/helpers/users_helper.rb
invoke test_unit
invoke jbuilder
create app/views/users/index.json.jbuilder
create app/views/users/show.json.jbuilder
create app/views/users/_user.json.jbuilder
invoke test_unit
create test/system/users_test.rb
invoke assets
invoke coffee
create app/assets/javascripts/users.coffee
invoke scss
create app/assets/stylesheets/users.scss
invoke scss
create app/assets/stylesheets/scaffolds.scss
- Railsアプリに必要なものをゴリゴリ用意している模様
- なんという黒魔術
- オプション追加でDBのテーブル定義も可能
- idパラメータは主キーとして自動付与とか強すぎるのでは(悪い意味で)
- データベースのmigration
scaffold
で用意された .rb
ファイルをもとにmigrateするという理解で合っている?
- 昔は
rails
コマンドではなく rake
コマンドだった
- URLを変更してうろうろしてみる
- 色々ページができている
scaffold
すごい(語彙)
- ユーザーの追加や削除ができる
- MVCの観点からUsersリソースを見てみる
- ブラウザからのリクエストがどう処理されるか一連の流れが図解されている
ERB
は Embedded RuBy
のこと
routes.rb
を書き換えてリロードするだけでページの表示が切り替わるので便利
- RESTアーキテクチャ
- RESTをきちんと調べたことはない
REpresentational State Transfer
- RailsアプリケーションにおけるRESTとは、アプリケーションを構成するコンポーネント (ユーザーやマイクロポストなど) を「リソース」としてモデル化すること
- これらのリソースは、リレーショナルデータベースのCRUD操作と、4つの基本的なHTTP requestメソッド (POST/GET/PATCH/DELETE) の両方に対応
- RESTfulとは?
- Active RecordというRubyライブラリのおかげで、リスト 2.9のUserモデルは
User.all
というリクエストに対して、DB上のすべてのユーザーを返すことが可能
@
で始まる変数はRubyではインスタンス変数という
- コントローラー内で宣言したインスタンス変数はビューでも使える
- Update Userボタンのラベル名がどこにもない
- バリデーション、認証、テストなし、レイアウトが整っていない
2.3 Micropostsリソース
- Usersと同様にMicropostsも
scaffold
でコード生成してみる
- マイクロポストに文字数制限を加える
validation
- modelのクラスに文字数制限を追加するだけ
- SpringのEntityにこんなのがあった気がする
Content is too long
のエラーメッセージが表示された
- 「異なるデータモデル同士の関連付けは、Railsの強力な機能」
- Railsのconsole
- Railsアプリを対話的に操作することができるツール
- コード実行によりSQLが実行されてデータが取得される
- UsersモデルとMicropostモデルは
ApplicationRecord
を継承
ApplicationRecord
は ActiveRecord
を継承
- これを継承するだけでモデルはDBにアクセスできるようになる
- DBのカラムをあたかもRubyの属性のように扱えるようになる
- 扱った結果いったいどんなSQLが発行されるんですかねえ…
- コントローラの多彩な機能は
ActionController
を継承しているから
- heroku上で動かして確認
2.4 最後に
- この章で作成したアプリの弱点
- 「Scaffoldは何よりも手っ取り早いのがとりえだが、これを元にRailsを理解するには向いていない」
- チュートリアルがこれを言うのが面白すぎる
- 黒魔術すぎてプログラミング初心者が触るのは危険すぎるのを体感
所感
- ここまでRailsを触ってきて、Rubyでコードを書く以外のことを極力意識させないでおこうという強い意思を感じた
- それがわかった上でRailsに乗っかるのと、何も考えずにレールの上を走るのは全然意味が違うよなという月並みな感想
- まともなWebアプリ開発はJava/Springでしかやったことがないが、RailsからはSpringを初めて触ったときに感じたものとは比にならないくらいの黒魔術感を感じた