静的型付け言語原理主義者によるRailsチュートリアル(第2章)

image

第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 コマンドだった
      • rake はRuby版の make
        • C言語でやったやつだ!
  • URLを変更してうろうろしてみる

    • 色々ページができている
    • scaffold すごい(語彙)
  • ユーザーの追加や削除ができる

    • すごい(語彙)
    • バリデーションはない模様
  • MVCの観点からUsersリソースを見てみる

  • ブラウザからのリクエストがどう処理されるか一連の流れが図解されている

  • ERBEmbedded 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 を継承
    • ApplicationRecordActiveRecord を継承
    • これを継承するだけでモデルはDBにアクセスできるようになる
      • やめて
    • DBのカラムをあたかもRubyの属性のように扱えるようになる
      • 扱った結果いったいどんなSQLが発行されるんですかねえ…
  • コントローラの多彩な機能は ActionController を継承しているから
  • heroku上で動かして確認

2.4 最後に

  • この章で作成したアプリの弱点
    • 理解が困難
  • 「Scaffoldは何よりも手っ取り早いのがとりえだが、これを元にRailsを理解するには向いていない」
    • チュートリアルがこれを言うのが面白すぎる
    • 黒魔術すぎてプログラミング初心者が触るのは危険すぎるのを体感

所感

  • ここまでRailsを触ってきて、Rubyでコードを書く以外のことを極力意識させないでおこうという強い意思を感じた
    • ActiveRecordとか
  • それがわかった上でRailsに乗っかるのと、何も考えずにレールの上を走るのは全然意味が違うよなという月並みな感想
  • まともなWebアプリ開発はJava/Springでしかやったことがないが、RailsからはSpringを初めて触ったときに感じたものとは比にならないくらいの黒魔術感を感じた

1897 Words

2019-11-13 13:09 +0000