【第19週】パRails輪読会🚂 (2023-12-25~ 2023-12-28)

tags: パRails🚂

目次


2023-12-25(月)

ファシリ

@sadanora

ドライバー

@ayu-0505

読んだところ

6-8-2 「退会処理の作成」から
344pの「おわりに」の前まで。
PR:

次回

344p テストで作ったイベントがエラー表示になっているので、そこを解消するところから。🚂

学んだこと・感想

  • @sharoa

    • 退会処理までできて、これでイベント告知アプリケーションを実装できた。ただ、確認するところで、まだ完璧とまではいかないので明日その確認ができたらいいですね。
    • その確認が終われば、今度こそ完了(かな。)
    • あゆさん、今日はたくさん試してくれてありがとうございます!!
  • @sadanora

    • dependent: :nullify
      • 削除した時に、関連するレコードの外部キーをnullにできる
    • throughsourceにあまり慣れないので[ActiveRecord] ActiveRecordの便利な道具を後で読もうと思います。
  • @moegi29

    • user.rbのhas_many ④がついている部分、source: :eventはチケットを通してイベントを取得しているということがshodanさんとakiさんの解説でわかりました。:source には「:throughで指定した関連先モデルから、取得したいモデルへたどるための関連名」を書くということがRailsの練習帳にのっていたというのがすぐ出てくるのがすごいと思いました
    • Ayuさんにテストデータを作って頂いてイベント作成できるというところまで動作確認できました。明日実際の画像データを入れてみて表示できたら良いなぁと思います。
  • @ayu-0505

    • 同じeventオブジェクトでも作成したcreated_eventsと参加するparticipating_eventsでhas_manyの参照の仕方を変えている。(Ticketsを通したHas_many_throughの方法)
    • ユーザーの退会処理のチェックのおいて、DBの仮データの編集を思ったよりもかなり自由にできることがわかった。
  • @motohiro-mm

    • throw(:abort):コールバックを中断する
    • dependent: :nullify:削除した時に関連するレコードの外部キーをnullにできる
    • :source:throughで指定した関連先モデルから、取得したいモデルへたどるための関連名を書く
    • たくさん色々試していただいてありがとうございます

2023-12-26(火)

ファシリ

@hiromisugie

ドライバー

@sharoa

読んだところ

昨日の続きの確認をしてから、6-9の「おわりに」まで。
PR:https://github.com/PerfectRubyonRails-Rindoku/Perfect_Ruby_on_Rails_Ch6/pull/16

次回

7章から。🚂

学んだこと・感想

  • @sharoa

    • 自分がいつも使っているPCが最初もたついてしまってすみません。でも、そのあとはちゃんと動いてよかったです。
    • 6章が無事に終わりました。5章の時と比べて理解がしやすく、アプリケーションも少しずつ作られていくので、その都度確認ができて本当によかったです。
    • ダミーデータの作り方、昨日あゆさんがやっているのを画面越しにみてすごいな〜なんて思っていたら、今日自分がドライバーになってすごく変な汗が出ましたがw、皆さんのお手伝いのもとダミーが作れたし、イベントのオーナーのIDを勝手に変更したり、色々自分の手で試せてよかったです。
    • 7章はこのアプリケーションを使って、テストを書いていくみたいなので、楽しみです。(テスト苦手なので、少しでも好きになれたらいいな、という思いもある。。。。)
  • moegi

    • 昨日に引き続きイベントのダミーデータを作成して実際のイメージ画像を追加したことでスムーズに確認することができてよかった!
    • 未来に自分が作ったイベントがあるとき、未来のイベントに参加しているときの条件で退会できないことができてよかったです。sharoaさんドライバーお疲れさまでした
  • @ayu-0505

    • 今日はテストデータ作成時にあまりRailsに怒られずにスムーズにできてよかったです!
    • 5章あたりは個々の機能解説で、重要とは思いつつなかなか再現できずに苦しみましたが、6章は実際に動くものを作っていったのでやはり楽しかったです。
    • 7章のテストはちょうどプラクティスで差し掛かっているので、とても勉強になりそうです。
  • @motohiro-mm

    • コンソールでユーザーを作ったり、イベントの編集をしたりと、昨日ayuさんがなにげなくやってくださってたことがなかなか思い出せず、復習しないとなぁと思ったりしました
    • 昨日からの検証?がうまくできて良かったです!ayuさん&sharoaさんありがとうございます〜!
    • 参加者欄に「退会したユーザです」が表示されるのはいつ
      • 実際はイベントページはイベント終了すると表示されないので主催者・参加者の「退会したユーザ」はみられない
        - 見る方法は2つ
        - データがnilのユーザを作って未開催のイベントに参加させる
        - 過去のイベントの詳細ページをURLにいれて表示させる
  • @hiromisugie

    • 退会できないケースの確認が完了して大変めでたい!
      • 退会できないパターン
        • 未来に自分が主催のイベントがある時
        • 未来に参加予定のイベントがある時
    • コンソール上でデータ追加していく書き方、うろ覚えなので慣れたい
    • 今回テスト用のデータを作るのに苦労したけど、次章でこういう話も出てくるのかな?と期待
  • @tadaaki

    • 想定されるパターンは実際に試してみてね
    • そのために必要なデータがあれば作って試してね
    • テストデータづくりに興味持った人は新しくイベントを作って、Ticket を捏造するのもやってみてね
  • @SummerTree

    • こっそり覗き見しようと思ったら入った瞬間話しかけられてビックリしました!嘘です!みなさん楽しそうでなによりです〜いい輪読会!

2023-12-27(水)

ファシリ

@sharoa

ドライバー

@motohiro-mm

読んだところ

7章 最初から
7-3-2 「factory_botを導入する」まで。
PR:https://github.com/PerfectRubyonRails-Rindoku/Perfect_Ruby_on_Rails_Ch6/pull/17

次回

7-3-3 「factory_botの定義ファイルを書く」から。🚂

学んだこと・感想

  • @sadanora

    • テストコードの行数がプロダクトコードの数倍になったりするけど、テストが動作を保証してくれるので不安が減ったり、色々いいことがある。
    • TDD
      • テストコードを書く→実装→リファクタリング
      • そういえばチェリー本の課題もこの流れ
    • 既存のアプリにテストコードを書くならシステムテストから書くとよい
      • 動作の概要を掴んでいればテストを書き始められる
      • 効率よくテストカバレッジを上げられる
      • 仕様の理解が深まる
    • minitestでRSpec風の書き方ができるということだけど、使いたいケースが思いつかなかった
  • @moegi29

    • TDDはテストを最初に書いて、次に実装、最後にリファクタリングするというサイクルを繰り返しながら開発するもの。開発手法として良いというのは理解できるけど経験不足もあり慣れないですが7章をしっかり読んでテストに慣れていきたい
    • E2Eテストはシステムテストのことで実際のブラウザを使い画面ベースでするもの。
    • テストの書き方が理解できていればminitestでもRSpecどちらでもそんなには変わらないらしい
  • @motohiro-mm

    • 既存のアプリケーションにテストを追加するときは、まずシステムテストで広範囲にテストを書いて、それで足りない部分を各種テストで埋めていくと効率が良い
    • minitestとRSpecの特徴が細かく書いてあって分かりやすかったです
      • minitestでもRSpec風の書き方ができる!
    • テストデータを作成する方法は2つ
      • fixture
      • fixture replacementというライブラリ(factory_botとか)
    • コミット前ならそのままブランチを切ればその新しいブランチでコミットでき、前のブランチのほうはステージング等のやったことはなくなる
  • @hiromisugie

    • テスト駆動開発TDDTest-Driven Developmentの略
    • minitest
      • シンプル。Rubyの標準ライブラリに組み込まれておりRailsもデフォルトで利用できるようになっている
      • デフォルトでRailsに入っているというのが強み。Railsに新機能がついてもすぐテストも用意される
    • RSpec
      • 大きなシェアを持っているのが強み。世の中でたくさん使われていて、ドキュメント・ノウハウも多い。
      • describecontextshared_sxampleなど構造化の道具が用意されている(ってどういうこと?)
    • RSpecは豊かに書ける、minitestはシンプルに書ける。どちらを採用すべきかは、プロジェクトやチームメンバーと相談して決める。
      • これまでの印象と、今日読んだ内容から、minitestが初心者向けでRSpecはちょっと中級なのかなと思ったけど、sadanoraさんの話ではRSpecが特段難しいというわけでもなさそうなので、どこかのタイミングでEverydayRailsを読みたいなと思った
    • DSLとは、、、Domain Specific Language = ドメイン特化言語(ドメイン固有言語)。今回で言うとminitestやRSpecで使える専用の言語のようなもの
  • @sharoa

    • 今日から7章突入ということで、また気持ち新たに本の内容についていけたらな、と思います。
    • なんせ、テストコードを書くのが苦手なので、これを読み終わるころには「テストコードを書かないプロジェクトには耐えられなくなってしまう」という状態になれたらいいな、と思っています。
    • TDD(テスト駆動開発)は、チェリー本の時にも聞いたことがあって、探してみたら思ったより最初の方の130pにありました!後でまた目を通しておきたいと思います。
    • 今回のテストではデフォルトで添付されているminitestを採用とのこと。他にもRSpecという非常に多くの機能をサポートしていて、ドキュメントも豊富テストフレームワークもある。

2023-12-28(木)

ファシリ

@ayu-0505

ドライバー

@motohiro-mm

読んだところ

7-3-3 「factory_botの定義ファイルを書く」から
7-4-2 「最初のシステムテストを書く」まで。
PR:https://github.com/PerfectRubyonRails-Rindoku/Perfect_Ruby_on_Rails_Ch6/pull/18

次回

7-4-3 「システムテストを失敗させる」から。🚂

学んだこと・感想

  • @sharoa

    • factory_bot_railsをインストールしている状態でrails gコマンドでモデルを生成すると、同時にfactory_bot用のファイルも生成してくれる。
    • factory_botの定義で、factoryメソッドの引数は、第一引数がテストケースから呼び出す時の名称。(今回で言うと:user
    • 第一引数がモデルクラス名と同じ時にはクラス名の指定が不要。
    • aliasを定義することもできる。
    • sequenceメソッドは連番を設定するメソッド。これを利用するとユニーク制約を回避したり、固定値ではない値を使ったデータの生成ができる。
    • --seed ⚪︎⚪︎でseed値を指定して実行すると、テストコードが実行される時に使われる乱数を同じ値で固定することができる。
    • システムテストの設定で、rails newした時に生成されているtest/appplication_system_test_case.rbファイルに書かれいて、デフォルトのままでもシステムテストを実行することができる。
    • using: :chromeの部分をusing: :headless_chromeに変更すると、ヘッドレスブラウザを使う設定になる。
  • @shodan

    • FactoryBotでのデータの定義の仕方をふわっと知れました。
      • aliasesオプションで、テストケースから呼び出す際の名前に別名をつけることができる。
    • randメソッドで乱数を使うテストを用意している時に、乱数を固定してテストを走らせたいときは、テスト実行時に--seedオプションをつける。
    • Capybaraのvisitメソッドは、引数に指定したパスにGETでリクエストを投げることができる
      • なんとなく「ページに訪問できる」くらいの理解しかしていなかったので、ここを読めて良かった気がしています。
  • @moegi29

    • 昨日に引き続きfactory_botを使って定義ファイルを書いて実行してもらったりしてなんとなく理解が出来ました。factory_botは関連名を書くと同名の定義を自動で利用してくれるというところが便利ポイントらしいと知りました
    • randは乱数を作ってくれるメソッド、この乱数を固定するためにテストを実行する際はseedを使う
  • @ayu-0505

    • factory_botの定義ファイルでaliases設定で別名も認識させることができる。
    • sequenceメソッドでイテレーターのように順番に番号を挿入することができる。
    • 乱数を入れる時はrandメソッドを使用する。
      • 問題を再現するときに乱数部分に同値を入れたい時は、テストを走らせる際に--seed {seed値}を入れることで値を固定することができる。
    • headlessテストはマシン機能が早過ぎて失敗することがあるので、それを考慮したテストを作成する。(あまり推奨はされないけど、わざと一時的に時間を止めるsleepというメソッドもある)
  • @motohiro-mm

    • factory_botを初めて使ったので書き方が慣れない感じでした
      • bin/rails g factory_bot:model モデル名でfactory_bot用ファイルが生成される
    • テストデータ作成で乱数を使う時に、乱数部分を同じにしてテストデータを作成したい場合は以下のようにする
      • bin/rails test 実行したいテストのパス --seed 数字
      • 数字は元となるテスト実行時に出るRun options: --seed 数字の部分からとる
    • システムテストをいよいよ書き始めて今後が楽しみです!

Select a repo