changed a year ago
Linked with GitHub

【第17週】パRails輪読会🚂 (2023-12-11~ 2023-12-15)

tags: パRails🚂

目次


2023-12-11(月)

ファシリ

@sharoa

ドライバー

@hiromisugie

読んだところ

6-3-5 296P 「ログイン処理を作成する」の途中から

PR:

次回

6-4-2 「イベントようのモデルを作成する」から。🚂

学んだこと・感想

  • @sharoa

    • find_or_create_byという便利なメソッドがあって素敵だな、と思った。あとで公式のドキュメントに目を通してみようと思います。
    • !!はnot演算子。チェリー本で見かけたことある!と思って探したらありました!(p203)「確実にtrueまたはfalseを返すイディオム」とのことです。
    • タイムゾーンは興味があるので、記事を探して読んでみたいと思います。
  • @hiromisugie

    • GitHubログイン、書籍に従って書いたらサクッとできてしまった。理解が浅いかもしれないけど、ふむふむという感じで流れはわかったような気もする。
    • !!は、nilになるときにfalseを返したい、みたいな場合に便利。
    • ヘルパーメソッド。コントローラーで使うメソッドをビューでも呼び出すときに使う。あんまり多用し過ぎない方がいいらしい。
      • 複雑な処理をビューに書くくらいならヘルパーメソッド使って良さそう
    • 第6章は、章の初めにこの章で何をするかというのを箇条書きしてくれているので、これから何をするのかわかりやすくて非常にありがたいです。
    • Railsで時刻をJSTに設定しても、DBはUTCに変換して保存される。DBまでJSTにする場合にはそれ用の設定が必要。
  • @moegi29

    • !!session[:user_id]の!!はnot演算子。2つ重ねることでsession[:user_id]がfalseまたはnilのときはfalse,それ以外の値のときはtrueに変換してくれるもの。現場ではほとんど使わない
    • ログイン状態を返すためのメソッドlogged_in?内で、コントローラとビュー両方から利用する機会があるのでhelper_methodでメソッド名を宣言した。ヘルパーメソッドも覚えておくと便利なときがある、
    • タイムゾーンの設定はアプリによってまちまち。ハマったら大変そう。
  • @sadanora

    • request.env["omniauth.auth"]
      • Hashに似たOmniauth::AuthHashクラスのオブジェクト
      • ソーシャルログインをするSNS(GitHub)から渡されたユーザ情報やOAuthのアクセストークンなどが格納されている
    • find_or_create_by!
      • createに失敗した時に例外を発生させる。
      • !なしのメソッドの方は例外を発生させない。
      • 例外を発生させる方を使うと、想定外のエラーに気づきやすくてよいらしい?
    • !!はRailsチュートリアルで「バンバンと読みます」って紹介されてた気がするのですが、そういう風に呼んでる人を見かけたことがあんまりない気がする。
  • @shodan

    • チーム開発の過去のPRを見ていると、「ここはfind_or_create_byで書き直せるかも?」というレビューをちょこちょこ見かけるので、何気に大事なことを知れたかもと思いました。
    • コントローラにおけるhelper_methodメソッドは、引数に渡したコントローラのメソッドをビューでも使えるようにするもの
    • ビューヘルパーをコントローラにincludeするのとどっちがいいのか?みたいなことで悩んだりすることがあるのかな?とか色々考えてしまいました
    • GitHubの認証ページを通って渡された情報は、request.env["omniauth.auth"]から取得できる
  • @motohiro-mm

    • request.env["omniauth.auth"]にGitHubから渡されたユーザー情報やOAuthのユーザー情報等が入る
    • ActiveRecordはfind_or_create_by!メソッドを用意してくれている
    • reset_sessionメソッドでセッションに入っていた値が全て削除されログアウトされる
    • ヘルパーメソッドに宣言しておくと、そのメソッドがコントローラとビューの両方で使えるようになる(102P〜)
    • タイムゾーンは、必要がないならRails内とDBを合わせた方が良い
    • !!:チェリー本203P 真偽値の型変換 に書いてありました〜
    • 1月27日に新春輪読会EXPOをやります〜できればぱRails輪読会からも登壇していただけたら嬉しいです〜

2023-12-12(火)

ファシリ

@moegi29

ドライバー

@sadanora

読んだところ

6-4-2 「イベント用のモデルを作成する」から
6-4-3 「ログイン状態を管理する処理を作る」まで。
PR:https://github.com/PerfectRubyonRails-Rindoku/Perfect_Ruby_on_Rails_Ch6/pull/7

次回

6-4-4 「イベント登録用のフォームを作る」から。🚂

学んだこと・感想

  • @sharoa

    • モデルのバリデーション内容を決める時に、文字数の制限は忘れられがち、とのことで、なんだか自分もやってしまいそうな気がするのできちんと覚えておこうと思います。
    • skip_before_actionというものがあるのは知らなかった。文字通り、before_actionをスキップすること。
    • 6章の他の章より細かく進めてくれているのが、本当にいい。今自分がやってるところの参考にもなる!!
    • ドライバーすみませんでした。メインとノートとあることをすっかり忘れていて、メインの方の設定ができていなかったのでこのあとすぐやります!!😫
  • @hiromisugie

    • rails g resourceでモデルとコントローラとルーティングを同時に作成できる。あんまりやったことなかったような気がするので覚えておきたい。
    • 名前を1万文字入れてくる人がいないとも限らないので、モデルの各属性でのバリデーション設定は大切
    • add_indexは、その項目でよく検索することが予見できる場合にはつけるし、そうでもなければつけなくても良い
    • ログイン確認のように複数のコントローラで使用する汎用的な機能はApplicationContorollerに定義する
    • ビューでも使うようなメソッドはヘルパーメソッドにする(昨日も出てきたやつ!)
    • P307に出てきた||=はnilガード
      • 「左辺があれば左辺を返し、なければ右辺を返す」のが、nilガード
    • 早くrails sして画面を見たい、、、
  • @moegi29

    • バリデーションを設定しておかないと想定外の入力ができてしまう可能性がありデザインにも影響が出てくる場合がある
    • ログイン状態を管理する ログイン必須の状態をデフォルトにすることでログインが必要なページをまちがえて未ログインユーザに公開してしまう可能性を減らしている
    • add_indexの部分でindexを張っておくと1から検索する必要がなくなり効率よく検索してくれる。検索する機会が多くなるだろうなと思ったら追加すべし。でも後から追加もできる。
  • @shodan

    • add_indexは指定したカラムにインデックスを貼る、マグレーションのメソッド。
      • いくつかハンズオンをやりましたが、add_indexについては「ここではこうしておきましょう」みたいな触れられ方が多かった印象なので、聞けてよかったです。
      • たぶんDBに関する基礎的な知識の学習をふわ〜っと進めたことが問題な気がしているので、本とかを読み返しておかねばという気持ち。。
      • そのカラムで検索することが多そうだと思ったら設定する。ただしその分別にデータを保存するのでパフォーマンスに関わるので、ここぞで使う。
    • モデルの関連を設定する際、モデル名とは別名で関連のメソッド名を与えたい場合は、class_nameオプションに元のモデル名を指定する。
    • 関連先で自分を参照する外部キー名がデフォルトの自分のモデル名_idではない場合は、foreign_keyオプションを設定する。
  • @sadanora

    • add_index
      • インデックスを貼っておくとレコードの検索が早くなるけど、インデックスを貼るのもコストがかかる。なんでも書けばいいわけでもない。
      • 都道府県みたいな、レコードが数十件とかでそうそうレコードが追加されることもなさそうなデータはインデックスを貼る必要がないかも。
  • @motohiro-mm

    • add_indexはよく検索するものを書いておく。コスト等はかかるのでなんでも書けばいいわけではない。
    • 文字数のバリデーションはきちんとやった方がいい。
    • コントローラのbefore_action :authenticateで、未ログインユーザがそのコントローラのアクションにアクセスした時はトップページへリダイレクトする
      • 未ログインでもアクセスできるようにするにはskip_before_action :authenticate
    • 関連付けは、この状態でも正直曖昧なので、もう1回読みます
    • 今やっていることのイメージがどうしてもしづらくて、はやくなにかしらの画面が見たいです

2023-12-13(水)

ファシリ

@motohiro-mm

ドライバー

@sharoa

読んだところ

PR:https://github.com/PerfectRubyonRails-Rindoku/Perfect_Ruby_on_Rails_Ch6/pull/8

次回

学んだこと・感想

  • @sharoa

    • 初めてのドライバーは緊張した!けど、足らないものが多くてあまり何もできず、、、皆さんに教えていただきnodeとか入れられて良かったです。もう一つの方のPCでも確認しておきます。
    • 最初の方にやった設定系はすっかり抜けている。
    • 新しいpcになることはしばらくはないと思うけど、新しくしたら大事な設定が色々とあることを改めて気づけて良かったと思う。
    • gitのlogでマージした時と、コミットした時の自分の情報が異なるのは初めて知った。ビビらずに覚えておこう。
  • moegi

    • $ history でコマンド履歴が見れる
    • 複数のPCから同一のGithubアカウントに接続する を見ていてsshの設定が必要なのかなと思っていたけど、今回は二段階認証することでできたようだったので便利になったんだなーと思いました。
    • gitの設定は一度やったきりだったので復習になりました。環境設定お疲れさまでした。
  • @hiromisugie

    • コマンドラインでhistoryをすると、コマンド実行した履歴が見られる
    • 複数台のマシンから同じgitアカウントを使う場合の設定、滅多に確認する機会がないので、今日なんとなく流れを見ることができてよかったです!
  • @sadanora

    • sharoaさんの環境構築ができてよかった
      Image Not Showing Possible Reasons
      • The image file may be corrupted
      • The server hosting the image is unavailable
      • The image path is incorrect
      • The image format is not supported
      Learn More →
    • ローカルマシンのGitの設定とか最初の1回しかやらないこともあって何にも覚えてなかった。色々勉強になりました。
  • @motohiro-mm

    • 前にやったnvm,node(+npm),yarnの関係性?位置関係?をsadanoraさんが説明してくださって知識が整理されました。
      • nvmはnodeをバージョンごとに管理するもの、npmもついてくる
      • npmをつかってyarnをインストールする
    • Gitのアカウントの共有などはしたことがなかったのですが、今後PC変えたりするときに絶対必要になる知識だと思うので、覚えておきたいなと思いました。

2023-12-14(木)

ファシリ

@sharoa

ドライバー

@sadanora

読んだところ

6-4-4 「イベント登録用のフォームを作る」の途中から、
6-4-5 「バリデーションエラー時の設定」まで。
PR:https://github.com/PerfectRubyonRails-Rindoku/Perfect_Ruby_on_Rails_Ch6/pull/9

次回

6-4-6 「i18nの設定をする」から。🚂

学んだこと・感想

  • @sharoa

    • 久しぶりにローカルホストのページで確認できて良かった。sadanoraさんもおっしゃっていたけど、本と同じエラー(状況が再現)が出きて良かったですw
    • バリデーションエラーが発生した時の設定ということで、なんだか一気にググッと難しく感じました。
    • 最初読んだだけでは??がいっぱい飛び交っていましたが、sadanoraさんに説明をしてもらって、なんとなくですが流れが理解できたと思います。
    • ひとつひとつ設定をしていくので、その都度説明をしてもらえてありがたい。
  • @moegi29

    • イベント登録用フォームの部分で本の通りのフォームを確認でき、beforeアクションが効いているのでログインしていない状態ではイベント作成ページにアクセスできないという確認もできて良かった。
    • create.js.erbの説明が書かれているけどイマイチわからなくsadanoraさんに説明してもらったことで流れを理解できました。
    • Ajax,rails-ujsとか非同期な処理が絡むととたんに難しくなる。
  • @ayu-0505

    • form_withのdata-remote="true"やTurbolinksはRails7で変更された部分?で割と学習者泣かせのイメージです。
    • Ajaxでバリデーションエラーを対処する方法の一つにSJR(Server-generated JavaScript Responses)がある。
    • つまりサーバー側でJavaScriptをレスポンスとして返すので、フロントエンドではほとんど仕事しない、ということ?
    • 画面遷移が高速な一方、リッチなUIを作る昨今の方向性からは対立するので、どのような方法を使うかはきちんと考える。
  • @hiromisugie

    • Railsで日時を扱う場合は、Rubyの組み込みクラスではなくTime.zone.nowTime.currentなどを使う
    • バリデーションエラーの表示にあたって、通常(?)はバリデーションエラーがあればページ遷移をした上でエラーの旨を表示するが、それだと、エラー表示を出すためにページ全体を再読み込みしないといけない。
      一方、Turbolinksを使うと(?)、ページ遷移することなく、入力した内容の中でエラーがある部分だけを検知してそれに適したエラーメッセージだけをJavaScriptがHTMLに挿入して画面に表示してくれるので、ページ全体を読み込むよりも無駄が無い、という感じ…?
      • 書いてみて概念としてはわかったような気がします、細かい書き方については改めて勉強します…!
      • Turbolinksという名前を聞くと、ビビる
      • HotwireもTurbolinksやSJRに並ぶようなものってこと?(ReactやVueほど色々できないけど、フロントエンドをほぼ書かずに色々できるのがHotwire、くらいの知識です)
  • @motohiro-mm

    • イベント登録用ページが表示されてよかったです!ログインのところも色々やっていただいたおかげで理解が深まりました!
    • Ajaxを利用していることで必要な部分のみ変更されるので画面遷移が早い
    • AjaxでのバリデーションエラーはSJRで対応すると良いらしい
    • SJR:サーバサイドでJavaScriptを生成してクライアントサイドはそのまま実行するという形式
    • rails-ujs,Ajax,Turbolinksの知識が忘れすぎているので、今から読み直します
  • @sadanora


2023-12-15(金)

ファシリ

@ayu-0505

ドライバー

@sharoa

読んだところ

6-4-5 「バリデーションエラー時の設定」から
6-5-2 「イベント一覧ページの作成」 318pまで。
PR:https://github.com/PerfectRubyonRails-Rindoku/Perfect_Ruby_on_Rails_Ch6/pull/10

次回

6-5-2 319p columnから。🚂

学んだこと・感想

  • @sharoa

    • 初めてドライバーした時より緊張しましたw
    • 作成するものがそれなりにあったのでドキドキしましたが、きちんと動いたのが確認できて良かった(i18nやイベント一覧など。)
    • ただ、イベント作成時に時間が過去のものになっていて(全然気づいていなかった💦)、作成したコードでは未来のイベントを表示するものだったので表示されず何事かと思ったけど、motohiroさんが答えを見つけてくれてすごくスッキリできて良かったです!
    • 私が作ってしまった過去のイベントは削除機能ができた時に削除したいと思いますw
    • インデントを一気になくしたい時のおすボタンがよくわかっていなかったので教えていただけてありがたいです。
  • @moegi29

    • i18nの設定はプラクティスで一度やったところだったので安心感がありました。
    • テストデータが過去のものだと気づいたmotohiroさんすごい。イベント一覧ページの実装部分でstart_at > ?", Time.zone.nowだとこれから開催するイベントを表示<だと過去のイベントが表示されるということを実際に試して頂いてわかりました。
    • rails cでの原因究明手順もみれて勉強になりました。
  • @shodan

    • 今日は親しみやすい内容でよかったです。
    • Hamlになれないですけれど、現場でerbをそのまま使うパターンは少ないかも?と以前町田さんが言っていたので、変な苦手意識は持たないようにしようと感じました。
    • デバッグのとき、どこまでがうまく行っているのかを切り分けるのがとても大事。
    • ショーカットキーは私も使ったり覚えたりするの苦手です。Shiftをつけると大体逆だったりするので感覚で試したりしてます。command + z(元に戻す)の逆はcommand + Shift + z(前に進む)。
  • @motohiro-mm

    • i18nの復習になりました!
    • イベント詳細ページもばっちり表示できて嬉しくなりました!
      • image_tagのところで、GitHubの画像がuser.image_urlに入ってたんだなってことに驚きました
    • 一覧ページも表示できて良かったです!
      • 表示がうまくでないとき(エラー)のチェックしていく順序をtadaさんがひとつひとつ教えてくださって勉強になりました。
    • いまさらながら、一覧ページをあえて独自のwelcomeにしたのは、今後なにか意味があることなのかが最近気になっています
      • tadaさんより:eventsだけであればevents/indexでも良いが他の情報を入れたりするときは独自にトップページを作る方が良い!
    • sharoaさんドライバーお疲れ様でした!
    • moegiさんいつもサンプルコードありがとうございます!
  • @ayu-0505

    • i18n設定等はプラクティスの良い復習になりました。
    • lメソッドは伊藤さんのブログかQiitaでもおすすめしていたなと思い出しました。
    • デバッグ時の問題切り分け力、段階を踏んで確認する癖をつけたいと思いました。
    • where時のプレースホルダーの使用イメージについて実際に聞けてよかったです。(書くことでデメリットがあるものでもないので、現時刻による比較時にはそれほど必要がないがつけておく)
  • lef237

    • rails console --sandboxコマンドを使うと、データを上書きせずに気軽にRails Consoleを使えるのでオススメ!
  • @hiromisugie

    • i18nを導入する際、Railsでよく使う辞書データをrails-i18nというgemで利用できる
    • Eventモデルにbelongs_to :owner(ownerの中身はuser)と書いたが、Userモデル側にhas_many :eventsってセットで書かなくていいんだっけ?というあたりがちょっとよくわかっていない…
      • P309で既に定義済みでした!shodanさんありがとうございます!!
    • 登録したイベントが表示されない事件が勃発したけど、ワイワイ解決できてとても楽しかった😄
    • rails cでデータが入っているかどうかを一つずつ見ていくのが重要

Select a repo