# 【第13週】パRails輪読会 \(2022\-10\-17\~ 2022\-10\-21\) ###### tags: `パRails(2回目)` - [開催概要](https://hackmd.io/rOcLR0riRqmOgEF0_Ssm0A?both) - [パRails輪読会 ノートまとめ](https://hackmd.io/5emISRvRRXapmakSiHnFJg?both) ## パRailsのサンプルコード・正誤表 - [サポートページ:パーフェクトRuby on Rails【増補改訂版】:|技術評論社](https://gihyo.jp/book/2020/978-4-297-11462-6/support) - [パRails 環境構築の手順](https://hackmd.io/y7qb2BRMT2Wd4tAtKYObcQ) ## 目次 [TOC] ------ ## 2022\-10\-17(月) ### 連絡事項や確認・相談 ### タイムキーパー - tomonariさん ### ドライバー - LEFさん ### 読んだところ - P.337 [6-8 退会機能を作る]〜 ### 次回 - P.344 [6-9 終わりに]〜 ### 自由に使う共有スペース ### 各自の疑問点や気づき、学んだこと - @maimu_x2x - link_toにremote: :trueを指定するとAjax通信にできる - コントローラの見通しが悪くなる場合((7つ以外のアクションを追加するような場合)はコントローラーを分けた方が良い場合もある。 - @fuwa - `dependent: nullify` オプションをhas_manyに追加すると、削除したときに関連するレコードの外部キーをnullにできる - 基本の7つのアクション以外のアクションを作りたくなったら別のコントローラを作ると、コントローラの見通しが良くなる。目安の一つにできそう - Saki - モデル同士の関連付けや条件分岐が徐々に複雑になっていくので、自分が機能追加した時に他の機能が壊れていないか確認するためにテストは大事だなと思った - 退会=Userモデルのレコード削除=user#destroyアクションのイメージだが、その場合退会の確認ページ(/retirements/newのページ)を、7つのアクションとは違う新しいアクションを作ることになる。→退会というリソースと捉えて、`retirements#create`で退会処理を表現する。 リソースの削除=`destroy`アクションのイメージだったのでなるほどと思った - `before_destroy`初めて知った。便利そう。`throw(:abort)`で、エラー発生時にリソースの削除を中断する。 - LEF - 簡単に退会機能が作成できてすごいな~と思いました。 - viewで`remote: :true`にすると、Ajaxを利用するようになることが分かりました! - @tomonari - モデル同士の依存関係が把握するの難しい:cry: - 退会機能を別のコントローラーに分けるが勉強になりました。destroyとは別にするんですね。 - ### 本日の振り返り(よかった点・次回に向けての改善点・今の気分などなんでもOK) - LEF - GitHubが多人数でログインできない問題については、メールアドレスとパスワードのみで登録できるように改良すれば(コードを書き換えれば)、なんとかなりそうな気もしました。 - 最近の卒業生はフロントエンドのみで自作サービスを開発している方も多いことを質問雑談タイムで知りました! - FBCでReactのプラクティス https://discord.com/channels/715806612824260640/789424190037819393/1028472693076525087 が作成されていたり、JavaScript関係のプラクティスの変更点がお知らせで流れてきたりして、フロントエンドは進化が早いんだな~ということを改めて感じました。 - @tomonari - LEFさんドライバーお疲れ様でした! - @fuwa - チーム開発、わかりそうでわからない。。を3日くらいやっていたのでしんどくなってきました。が、今日ちょっと進んだかも? - 気晴らしに海を見に散歩していました〜お天気悪くて海なのかよくわからなかったです - 久しぶりだったのでやや浦島太郎でした - @maimu_x2x - 今日も手動テストを1日やっていましたが、コンソールでデータをいじりながらやるタイプだったので集中してやれましたw - :tea::cake: - Saki - LEFさん、ドライバーありがとうございました! ------ ## 2022\-10\-18(火) ### 連絡事項や確認・相談 ### タイムキーパー - LEFさん ### ドライバー - tomonariさん ### 読んだところ - P.344 [6-9 おわりに]〜 ### 次回 - P.350 [7-3 テストデータを作成する]〜 ### 自由に使う共有スペース ### 各自の疑問点や気づき、学んだこと - @mamimu_x2x - minitestでRSpec風の書き方ができると知らなかった。 - でもその場合は純粋にRSpecが書きたい。 - @tomonari - E2Eテストというのは進捗報告会で耳に挟んだような?お馴染みシステムテストのことでいいのかな。 - @garammasala29 - 自作サービスでは取っ付きやすそうだからという理由でモデルスペックから書いていたけど、テストカバレッジを効率よく上げたり、アプリの仕様を確認できるので、システムスペックを優先させるべきだった - テストカバレッジを確認できるgemを最近トミーさんから教えてもらった - https://github.com/simplecov-ruby/simplecov - LEF - RSpec風のminitestよく分からないです!本物のRSpecを使えるように学習したいと思いました📕 - Saki - 違いの話、RSpecの方が「今からこういうテストをするよ」「◯◯したら××になる」という風に書くので読みやすそう - 伊藤さんのスライド:[なぜRSpecを書くのか、なぜテストを書くのか \- fv17の日記 \- Coding Every Day](https://forest-valley17.hatenablog.com/entry/2019/07/06/155404) - minitest久々に読んで思い出しました - 新しい開発チームに入った時はテストを読んで仕様を理解するって本当だろうか?? - 本当だと思います!レビューするときもテストからと言われました - @haruguchi - 今日の内容は濃かったですね〜😇 ### 本日の振り返り(よかった点・次回に向けての改善点・今の気分などなんでもOK) - @maimu_x2x - 手動テストの文化撲滅したいw - 今日はリクエスト時のパラメータを1個ずつ目視でチェックするテストがありました - OOPのプラクティスをなんちゃってテスト駆動開発でやってるのですが、心なしかコードが書きやすいです。 - LEF - リーダブルコード輪読会は来年初めに初めたいですが、ダメだったらごペンなさい🐧 - JavaScript、色んな書き方があってちょっとずつ混乱します💫 - @tomonari - 自作サービス作っていらっしゃる方、テストはいつ書かれましたか?TDDでやってみたい気もするのですが、テストの実装があってるか自信が持てなさそうです。 - Saki 私は技術検証の段階でしっかりどういう仕組みでアプリを作るか決めていなかったので、`rails new`した後いろんな方法をブランチを切って試していました。なので完全に実装が終わった後にテスト書きました。 梅本さんがEverydayRails合宿の時に、「自作サービスでテスト駆動で書くのはできないと思う。書くには、設計できていないといけない。設計スキルが十分にないといけないので。」と仰ってました。([【第7日最終日】EverydayRails輪読会合宿\(2022GW\) \(2022\-05\-05\) \- HackMD](https://hackmd.io/KCW3SW1bSQaspAMGR5BTfg)より) - やろうと思って撃沈しました(ガラムマサラ) :nakama: - モデルとかだとやりやすい? - @garammasala29 - 浦島太郎に付き合っていただきありがとうございました! - 出張ESMトーク見始めましたよ〜 - 恥ずかしいな,見なくていいですよ! - Saki - モデルテストはたしかにもうちょっと早い段階で書いた方が良かったなと思いました。モデルテスト書いてバリデーションのミスにいっぱい気づきました😂 - @haruguchi - minitestの方が好きです(小声) - ~~河村~~川村さん生きててよかった! - 3本川なんですよ〜😇 - こう? :chiken: - 🙆‍♂️ ------ ## 2022\-10\-19(水) ### 連絡事項や確認・相談 ### タイムキーパー - ガラムマサラさん ### ドライバー - Saki ### 読んだところ - P.350 [7-3 テストデータを作成する]〜 ### 次回 - P.354 [7-4 システムテスト]〜 ### 自由に使う共有スペース ### 各自の疑問点や気づき、学んだこと - Saki - ぐぐってみたら、seed値を指定して実行するには設定が必要そう? [RailsのRspecでランダムに落ちるテストを再現したい \- その辺にいるWebエンジニアの備忘録](https://kossy-web-engineer.hatenablog.com/entry/2020/11/08/083527) - テストデータのgemは他にもいくつかある。miniskirtかわいい。 - `{}`で囲むのが読みにくくて苦手。 - do ~ endでも大丈夫ですよ! - @garammasala29 - `spring stop`しても`rails c`すれば自動的に`spring start` - なおRails7では、、、 :eyes: - FactoryBotの書き方が独特で、毎回写経になってしまう。fixtureはyaml形式で楽だったなぁ - 同じ乱数でテストできるように復習してみます。 - hikaru - `sequence(:uid){|i|"uid#{i}"}`factory_bot便利 - 乱数の謎 - LEF(代読お願いします🙏) - 途中から参加したのでうまく内容が掴めていないのですが、factory_botを使うと、乱数的にランダムでテストデータを生成してくれる、という認識で大丈夫でしょうか? - FactoryBot自体はテストデータを普通に作成してくれるgemですね。 - なるほど!ありがとうございます! - @tomonari - FBCアプリはyamlファイルでテスト書いていましたね。factory_botは大量にランダムなデータでテストしたい時に使うのかなと思いました。 - @haruguchi - fixture replacementとして色々あるけど、FactoryBot一強だった - テストは基本(実行順序が)ランダムに実行されるがseed値を指定すると実行順序を再現してくれる - traitの旨さを知ってからFactoryBotが好きになりました - EverydayRailsのP.73にのってました! ### 本日の振り返り(よかった点・次回に向けての改善点・今の気分などなんでもOK) - @maimu_x2x - factory_botちゃんと理解したい!定義ファイル難しそう・・・ - 会社のシステムテストをちゃんとコード書いて自動化できないか上司に相談したら、今から導入はコスト的に厳しいという話になって現実世界は世知辛いです。 :tea::cake:  - テストが通らないヤバそうなバグを見つけたと思ったら1ヶ月前に私が修正したコードが原因でした・・・ :daijyoubu!: - @garammasala29 - 札幌は雪虫が飛び始めました :waiwai: - カメムシなら、、、 - hikaru - Railsと仲良くなれない... - 朝の時間に輪読会をしたいなーって思ってます :tsuyoi: :yoi!:  - JSの輪読会・・・!! - LEF - ディズニープラスの一ヶ月間199円セール、ほとんど何も見れないまま終わっちゃいました🥲 - Saki - 自作したJSファイルが本番環境で動かなくて辛いです〜😭 - @haruguchi - 最近はUnixプロセス、シェルワンライナーの学習をしてます - むずかしそう...[なるほどUnixプロセス ― Rubyで学ぶUnixの基礎 \- 達人出版会](https://tatsu-zine.com/books/naruhounix) - https://workingwithruby.com/wwup/intro/ 輪読会チャンス ------ ## 2022\-10\-20(木) ### 連絡事項や確認・相談 ### タイムキーパー - Saki ### ドライバー - fuwaさん ### 読んだところ - P.354 [7-4 システムテスト]〜 ### 次回 - P.361 [7-4-6 ログインが必要なページのテストを書く]〜 ### 自由に使う共有スペース ### 各自の疑問点や気づき、学んだこと - @maimu_x2x - 先日梅本さんにペアプロしていただいて、`headless_chrome` を指定するとシステムテストの実行が早くなると教えていただきました - https://qiita.com/jnchito/items/7de4c13d07d2bfb713d3 - モックはテストを通すための手段なため、リリース前はちゃんと手動実行してテストが必要 - @garammasala29 - 今回はminitest✖️FactoryBotの組み合わせ - mockはホンモノっぽいニセモノ。Githubの連携をやった形にしてくれた。ここでも伊藤さんの記事がありがたい - [使えるRSpec入門・その3「ゼロからわかるモック(mock)を使ったテストの書き方」 \- Qiita](https://qiita.com/jnchito/items/640f17e124ab263a54dd) - `--no-plugins`オプション - LEF - OmniAuthをモック化する方法がとても参考になりました! - `generate test_unit:scaffold`コマンドも知らなかったです。後からテンプレートを生成したいときは使ってみたいと思います。 - hikaru - ヘッドレスブラウザというものを初めて知りました - 設定ファイル:`test/application_system_test_case.rb` - `ApplicationSystemTestCase`を継承して書く - `add_mock`でモックできるらしい - @fuwa - テストでログインするのはいろんなシステムテストで使う処理だと思うので、helperにして切り出しておくと便利そうですね - モックってなんだっけ??と思って調べたら、テストに必要な値を擬似的に設定するもの みたいな感じでした。 (https://qiita.com/Fudeko/items/301f8a80963dfcaafb80) - Saki - ログイン機能のテストでは、モックを使って、レスポンスを設定した値を返すようにする。実際にGitHubにログインさせるわけではない。よく使う処理はヘルパーに切り出す。 フィヨルドのチーム開発でよく使われてるヘルパーを最初知らなくてぐぐったらbootcampリポジトリがトップに来たのは良い思い出😇 - @tomonari - Omniauthをモックでログインできるようにするのはいいですね。テストの時にいちいち本当のアカウントでログインするのは手間がかかりそう。 - test test/〜の最初のtestは忘れがちですね〜、でも書籍で抜けていると困ります:cry: ### 本日の振り返り(よかった点・次回に向けての改善点・今の気分などなんでもOK) - LEF - 先ほど気付いたのですが、マイクの音声が、手元のマイクではなく、遠くに置いてあるWebカメラのほうから拾ってしまっていたみたいでした💦 聞き取りづらかったかもしれないです、すみません🙇 - リーダブルコード輪読会の共同主催者(ピンチヒッター)を募集しています📘 - わいわい! - @maimu_x2x - 明日はKaigi on Railsに参加するため輪読会お休みします〜 - @fuwa - vue.jsのモーダルが難しいです〜`v-for`の処理が全て完了してからモーダルが開いてしまうみたいで、取得したいものが取れないです。。 - 最近短期バイト始めようかなぁとぼんやり考えています。年末まで、週3〜、実動時間6時間、時給1350円。 - 僕もバイト検討してます... - 画質悪くてすみません〜 - hikaru - チーム開発のマージ分をステージング環境で確認したら全然バグってました:innocent: 凹むぜ... - 私も仕事でバグ出したので大丈夫です!! - 🥺 - :tea: - @garammasala29 - KaigionRailsの予習しなきゃ。 - @tomonari - 自作サービスぽしゃりそうだったけど、梅本さんのおかげでなんとか首の皮一枚つながりました。 - おおー!昨日の報告会で心配だったのでよかったです〜!!:tada: - :tada: ----- ## 2022\-10\-21(金) KaigionRailsのためお休み