静的型付け言語原理主義者によるRailsチュートリアル(第2章)
第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パラメータは主キーとして自動付与とか強すぎるのでは(悪い意味で)
- オプション追加でDBのテーブル定義も可能
- なんという黒魔術
データベースのmigration
scaffold
で用意された.rb
ファイルをもとにmigrateするという理解で合っている?- 昔は
rails
コマンドではなくrake
コマンドだったrake
はRuby版のmake
- C言語でやったやつだ!
URLを変更してうろうろしてみる
- 色々ページができている
scaffold
すごい(語彙)
ユーザーの追加や削除ができる
- すごい(語彙)
- バリデーションはない模様
MVCの観点からUsersリソースを見てみる
ブラウザからのリクエストがどう処理されるか一連の流れが図解されている
ERB
はEmbedded RuBy
のこと- ビューのHTMLに埋め込まれている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上のすべてのユーザーを返すことが可能- これが悪名高きActiveRecordか…
@
で始まる変数は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でコードを書く以外のことを極力意識させないでおこうという強い意思を感じた
- ActiveRecordとか
- それがわかった上でRailsに乗っかるのと、何も考えずにレールの上を走るのは全然意味が違うよなという月並みな感想
- まともなWebアプリ開発はJava/Springでしかやったことがないが、RailsからはSpringを初めて触ったときに感じたものとは比にならないくらいの黒魔術感を感じた