ひろしとRailsチュートリアルと - その2 : rails:migrate, バリデーション

前回、1章2章を終えて、本格的にTwitterクライアントぽいwebアプリを作る本題のフェーズに入った。

3章

静的なページを作りながらminitestを使ったTDDで開発していく内容だった。Guardというテスト監視ツールを使って、テスト対象のファイルに変更が入ったら自動でテストしてくれる仕組みが便利。

普段、静的型付け言語を書いてて、コンパイル待ちをひたすら体験してるので、 テストコード -> RED -> 実装 -> GREEN のサイクルが高速に回せれるのは気持ちいい。

4章

ヘルパーモジュールというUtill的な?モジュールを使ってメソッドを実装したりした。 Rubyについての節はすでに勉強済みだったので、流し流しやった。

require 文を書かなくてもよしなにRailsがヘルパーモジュールなどをincludeしてくれるのだが、これが慣れない。でも便利。Railsが自動でやってくれるところを把握しておくのが開発に慣れないうちは大事になってきそう

5章

アセットパイプラインは素晴らしい..

などを自動でやってくれる。昔Gulpとかで自分で書いてたけど、こういうフロントエンドの自動化もフレームワークの中に組み込まれててすごいなと思った。

Bootstrapでレイアウトを組んだ。

6章

ユーザーモデルを作成した。

Server Side Swiftで、FluentというO/Rマッパーを触ったことがあったので、クエリの投げ方とか似ててよかった。(というかFluentが参考にしてるんだろうけど)

  • モデルの作成
  • DBのインデックス
  • バリデーション
    • ユニーク制約
    • 文字数チェック
    • 空文字チェック
  • パスワードのハッシュ化

どれも1メソッド程度で実装できてすごい楽。

特にパスワード関連は、ハッシュ化するメソッドすら叩かずに has_secure_password という宣言をモデルに書いとくと半自動でやってくれる

Ruby & Rails所感

ここまで書いてみて

  • コードは平易だけど、仕組みを覚えるのが大変。
  • なんでもメソッドがある
  • インスタンスを生成するとき .new をつけ忘れてエラーになるのを2億回くらいしてる
  • 変数をキャメルで書いちゃうのは1億回くらいミスを繰り返してだんだん慣れてきた
  • 1章、1 ~ 2時間かかるのでこれでGW終わってしまいそうで泣ける..

メソッド名が短いので、チェインを使って簡潔に書けるのが良い

('a'..'z').to_a.shuffle[0..7].join

引数について

名前付き引数を使わない書き方で、こういう例があるけど(マスアサインメントというらしい) attributes に何を入れたらいいのかメソッド呼び出しのタイミングで分からないのでメリットが分からない🤔

  def initialize(attributes = {})
    @name  = attributes[:name]
    @email = attributes[:email]
  end

<追記> Railsのエンジニア仲間に教えてもらった。 hashを渡せば、save, updateメソッドにhash渡してまとめて更新できるのがメリットで、適当なキーバリューを埋め込まれないようstrongパラメータというのが先の演習で出てくるらしい