【第16週】パRails輪読会🚂 (2023-12-04~ 2023-12-08)

tags: パRails🚂

目次


2023-12-04(月)

ファシリ

@motohiro-mm

ドライバー

@shodan

読んだところ

6章 「Railsアプリケーション開発」から
6-2-2 「Hamlの導入」まで。
PR:https://github.com/KMZ0209/Perfect_Ruby_on_Rails_Ch6/pull/1

次回

6-2-3 「独自のトップページを表示してみる」から。🚂

学んだこと・感想

  • @sharoa

    • 新しい章に突入した。実装する仕様を見るとめちゃくちゃたくさんあって、一つ一つ作っていくのを体感できるのが楽しみです。
    • ログインはgithubアカウントで、と書いてあったけど、それ以外ではログインできない(新規作成とかはない)って仕様で合ってるのかな?だから、ルーティング仕様のところに/auth/:provider/callbackとなってるのかな?と思っていますが、、、
    • とりあえず今後の流れに注目していきたいと思う。
    • ERBで書かれたビューをHamlに変換するためのgemがhtml2hamlということ。ただ、これはHaml形式に変換後に不要だから削除するらしい。あっという間の gem。
  • @hiromisugie

    • Hamlの場合はHamlit、ERBの場合はErubiが高速な実装で、Rails 5.1以降はErubiが採用されている
      • Hamlの部分だけ抜き出すと「Hamlの場合はHamlitが高速な実装」っていう日本語の意味がいまいちわからない…汗。けど、HamlとHamlitは、Hamlという記法を利用できる別々の実装で、Hamlitのが高速。2つは共存させてはいけない、ということらしい。
    • イベント管理アプリケーションづくり、楽しみです😄
    • 半角スペースが入るだけでもコードは動かなくなることがあるし、HackMDなどウェブ上のメモなどからのコピー&ペーストで半角スペースが紛れ込むことがある。今回知れて良かったです!
  • @ayu-0505

    • 6章ではイベント告知アプリケーションを作成するので、そのための環境構築を行なった。
    • HamlはRailsのテンプレートエンジンの一つ。「Hamlitは同じ記法を利用できる複数の実装」という書き方なので、RubyとRailsのように依存している訳ではないらしい。(テンプレートエンジンの仕事をするには1つで十分ということ?)
  • @shodan

    • 環境構築はいつもドキドキです。気づいたときには小さな理由だなと思うことでも、そのときはパニックになるのがつらいところですね。。伴走ありがとうございました🙏
    • Slimは現場Railsで使ったことがあるけれどHamlははじめてです。
    • ERBは書く量は増えるけれどJSXと共通できるところがある、というのはなるほどと思いました。
  • @moegi29

    • slimは比較的記述量を少なく書けるけどHTMLタグとそれ以外に差がなく混同しやすい。ERB,Haml,Slimそれぞれが開発現場で使われていてどれが一番良いと断言はできない。
    • .gitignoreを半角スペースを入れた状態で追加してしまっていたことによりnode_modulesを含めたファイルが大量に出てしまっていた!shodanさん迷惑かけてごめんなさい!
  • @motohiro-mm

    • イベント告知アプリケーション!楽しみ
    • 実装する仕様を書いてくれていて親切だなと感じました。それをみて「こういうふうに実装するのかな…」と少し自分で考えてみたいなと思いました
    • providerがなにを示すのか気になります。GitHubのアカウント情報?
    • Hamlに慣れるように頑張って覚えたいです
    • リポジトリ作ってくださったmoegiさん、ドライバーのshodanさんありがとうございます!
      • shodanさんが操作してらっしゃるのをみていてGitHubのDashboardの画面を初めて知りました苦笑
  • @sadanora

    • 相変わらず環境構築はどきどき。
    • Wantedボット、根拠はないですが同じ指名が続くときは他の人にyou!コマンド実行してもらうとリセットされるような感じがしてます。(体感)

2023-12-05(火)

ファシリ

@shodan

ドライバー

@sharoa
@sadanora

読んだところ

6-2-4 Bootstrapの導入

PR: https://github.com/KMZ0209/Perfect_Ruby_on_Rails_Ch6/pull/2

次回

6-3 OAuthを利用して「GitHubでログイン」機能を作る

学んだこと・感想

  • @sharoa

    • アキさんが参加!!色々と教えてくれて感謝です。
    • コラムのgemのバージョンアップ戦略のところで、ざっくりとした感想になっちゃいますが、すごくなるほど〜と思いました。アキさんの説明(お話)もすごくわかりやすくて良かったです。
    • Bootstrapは世界で最も有名なフロントエンドフレームワークの一つ。
    • 何かのプラクティスで調べ物をしていたときにBootstrapを見かけたことがあったので、時間がある時にでも公式ドキュメントを読んでみようと思います。
    • 明日以降の「Githubでログインの機能を作る」が楽しみです。
  • @shodan

    • gemのバージョンアップが悩みのタネになる、ということはなんとなくイメージができました💭
    • だからこそ、テスト重要であることを再確認しました。
    • 課題の修正をしているときに、テストがないとそもそも以前の機能が動いているかどうかを担保できない……みたいなことがあるのを思い出しました(これはgemの話ではないですが、似たような話なのかな〜と)。
    • デザインを当てずに機能を作る / 無味乾燥なデザインだと味気ないので先にスタイルは当てておく の割合が気になる。
    • あきさんありがとうございました!またぜひ来てほしいです〜。
  • @ayu-0505

    • gemのバージョンアップについて、テストを書くことによってgemの変化をキャッチ&即座に修正できる、というのがなるほどと思いました。
    • (今のプラクティスでもテストがあったらすぐ発見できたミスがあったので、テストプラクティスの関心が高まりました。)
    • Bootstrapは書籍ではよく見かけるなぁと思っていましたが、やっぱり簡単にできる分自由度が少ないので「できあいもの」という認識が強い。
    • 輪読会の運営は本当に大変だと思います。(いつもありがとうございます)
    • アキさん、現場の名前の声がめちゃくちゃ参考になります!ありがとうございます
  • @sadanora

    • ドライバー久しぶりで緊張した。
      • 最初のセットアップの遅さがつらいのでAppleシリコンのMac本当に欲しくなる〜
    • gemのバージョンを上げていくには、テストを書き、そのうえでバージョンアップを続けられる仕組みを作ることが重要!!
      • たださんから現場目線の話も聞けて有難かったです。
    • GitHub Dependabotを使って自動でgemのバージョンアップ用のPRを作成するようにしたりできる
      • 謎の存在だったんですがこういう使い方があるんだなーというのがわかりました。
    • 自作サービスで使ったのでBootstrapが出てきて嬉しいです。
      • 前はTailwindに比べるとレガシーな存在だと思ってたんですが、Bootstrapの良さもあるといまは思ってます。
  • @moegi29

    • gemはこまめにバージョンアップしていくのが一番。
    • gemのバージョンを上げていくにはまずテストを書きそのうえでバージョンアップが続けられる仕組みを作ることが重要。なぜテストを書くのか? 自分で書いたRubyのコードはgemに依存している→バージョンアップでgemのふるまいが変わる場合がある→そこでテストを書いてあるとその振る舞いが変わった箇所に気づける ということをあきさんに教えて頂いてよくわかりました。
  • @motohiro-mm

    • 「企業側が技術に投資しているか」なども就活で気にした方が良い!(gemのアップデートしてくれないとかもある)
    • BootStrapはフロントエンドフレームワーク。BootStrapが指定してるもの(今回だとnavbar~)を適用すると、デザインが適用される
    • ピンク画面が出て落ちないように対処したいと思います…
    • tadaさん来てくださり嬉しかったです!また来てください〜!
  • @hiromisugie

    • Macで画面がピンク色になる現象があることを初めて知った。自分もしばらくバックアップ作成をサボっているので、やらねばと思った…!
    • gemは、バージョンアップを定期的にしていくことが重要。バージョンアップを定期的にするには、ちゃんとテストを書いておくことが必須。
      • なぜテストが必須なのか?
      • gemのバージョンアップでgem側の振る舞いが変わることがある。
      • そのgemを使っている部分をテストで書いておけば、gemのアップデートにより不具合が起こった場合にテスト段階で気づくことができる。
      • (コードを修正したらテストで確認した方が良いのでテストが必要、というのはgemアップデートに限らず重要だなと思いました)
    • bootstrap、ゼロからcss書くの面倒だけどちょっと画面を綺麗にしときたいなって時に便利そう…なのかな?書籍で写経する分には良いけど、「このclass名をあてたらこうなる」ってのを知っておく必要があるので、学習コストは多少かかりそうな気もする。

2023-12-06(水)

ファシリ

@moegi29

ドライバー

@hiromisugie

読んだところ

6-3 「OAuthを利用して『GitHubでログイン』機能を作る」から、
6-3-3 「GitHubアカウントでログインする機能の作成」まで。
PR:

次回

6-3-4 「ユーザーのモデルを作成する」から。🚂

学んだこと・感想

  • @sharoa

    • 「OAuth」は第三者となるアプリケーションに対して安全にアクセス権限を提供するためのプロトコル。
    • 最近よくSNSアカウントでログインできる、みたいなサイトを見かけたりするのはこういったプロトコルを使ってるからなのかな、と思ってみたり。
    • Githubを細かく観察したことがなかったのでこんな開発者用設定ページがあるとは知らなかった!覚えておこう。
    • OAuthアプリケーション作成ページの Authorization callback URL のところで、以前ルーティング仕様の時にあった :provider のところが使用したいもの(今回だとGitHub)に変わるんだな、と思いました。
    • OmniAuthはユーザー認証機能を提供するベースとなるgem。
  • @moegi29

    • OAuthを使うとパスワードをアプリ側に渡さなくてもOK。OmniAuthというgemとどのような形式で認証するかの実装は別にできるようになっていていろいろな認証形式をユーザに提供できる。
    • OmniAuthをRailsで使うには脆弱性対策が必要。gemで対応できるという部分がいまいちわかっていなかったので読み返したい。
  • @ayu-0505

    • OAuthは第3者となるアプリケーションに対して安全にアクセス権限を提供するためのプロトコル。パスワードを第3者側のアプリに渡さすに、機能提供に必要な権限だけを与えることができる。(書き方的に、ログイン等の認証機能だけでなく他のことにも使える??)
    • OmniAuthとはユーザー認証機能を提供するベースとなるgem。認証形式は別に実装できるので、組み合わせで様々な認証形式をユーザーに提供する。
    • OmniAuthを使用する際はCSRF攻撃への対策が必要となる。(悪意のあるリクエストが不正に送信されるもの?攻撃の種類等は忘れやすいのでチェックしたい)
    • omniauth_rails_csrf_protectionというgemはCSRFの対策用。
    • credentials.ymlは初めて出会った時はなんなのかさっぱりだったけど、だんだん秘密情報なんだとわかるようになってきました。
  • @motohiro-mm

    • OAuth:第三者となるアプリケーションに対して安全にアクセス権限を提供するためのプロトコル
      • アプリ自体にIDやパスワードを預けなくて済む!
    • 前に謎だった:providerは、今回はgithubを示していて、そういう意味だったんだと納得
    • OmniAuth:ユーザ認証機能を提供するベースとなるgem
      • GitHubの認証にはOmniAuth GitHubというgemを利用する
      • CSRF対策が必要!→対策用のgem(omniauth-rails_csrf_protection)を使う
    • credentialsのあたりは相変わらず難しい…
    • GitHubで設定したClientIDとかそのあたりが今後どのようになっていくのかがよくわかっていません
  • @hiromisugie

    • OAuthの読み方は「オーオース」。安全にアプリにアクセス権限を提供するための仕組み。
    • 例えばGitHubを使うと、アプリケーション側にGitHubのパスワードを渡すことなく、GitHubの認証を使ってログインできる。
    • RailsでOmniAuthを使う場合は、CSRF対策が必須。gemを使って対応できる。
    • config/initializers/omniauth.rbファイルで、開発環境・テスト環境用の設定と本番用の設定で分けて設定が可能。どちらもGitHubで設定したClientIDClient secretsを使うので、本番環境では平文で公開しないようにconfig/master.keyで管理する必要がある。
    • GitHubログインだけの場合は(ログイン方法が単一の場合は)、開発環境に平文で上げておく方法でいいのかな〜?と思ったりもしています。

2023-12-07(木)

ファシリ

ドライバー

読んだところ

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

次回

学んだこと・感想


2023-12-08(金)

ファシリ

@hiromisugie

ドライバー

@sadanora
@shodan

読んだところ

6-3-4 「ユーザーのモデルを作成する」から
PR:https://github.com/PerfectRubyonRails-Rindoku/Perfect_Ruby_on_Rails_Ch6/pull/5

次回

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

学んだこと・感想

  • @sharoa

    • 秘密鍵むずい。でも、結局DMで済んで良かった(のかな?w)
    • Hamlファイルの書き方(見方)が慣れない。
    • とりあえず、本どおりの表示が確認できたので来週でその先を進めていければと思います。
    • メンターさんが2人もいると心強っ。
  • @moegi29

    • credentials.yml.encに暗号化して保存すればOKなのかなと考えていたけどやはりmaster.keyは必要といういうことでそう簡単にはいかないものなんだなと知った
    • akiさんと梅本さんが来てくれて解決できたのがありがたかったです
  • @hiromisugie

    • 複数人でリポジトリをいじるにあたってcredentials周りの扱いが難しいなぁと感じた。セキュリティには気をつけつつ学習用にバランス取って便利にやっていくという感じで、勉強になりました!
    • Userテーブルで初めに設定しておくカラムはprovideruidnameimage_url。providerは、今回はgithubだけ入るはずだけど他のログイン方法を実装した場合にはtwitterとかgoogleとか入っていくのかなと想像。
  • @shodan

    • bootstrapが効かなくてしょげてますがあとで確認してみようと思います->効きました!
      • やったこと
      • node_modulesを消す
      • rails webpacker:clobberでWebpackerの生成物を削除する
      • yarnでパッケージを入れ直す
    • 共有しているcredentials.ymlをいじったばあい、読み込むのにもmaster.keyは必要になってしまう
    • こういうことがあるので、前回の輪読会ではそれぞれのPCに環境変数で秘匿情報をシェアしてた感じだったんですかね〜
  • @sadanora

    • 数日ぶりにきたら、organization作ってその配下でリポジトリ管理してくみたいな感じになっていてすごい〜
    • たださんと梅本さんがきてくださって心強かった!ありがとうございます〜!
  • @motohiro-mm

    • credentialsはmaster.keyがないと複合化×→複合⚪︎できない
      • 暗号化 <-> 復号。「復号化」と呼ぶと怒る人がいるので気を付けて。暗号(=暗号化されたもののこと。暗号文とも)はあるけど復号(復号文とは言わない。元のものは平文という)はないから、というのが理由らしい。 (@cafedomancer)
      • ↑ご指摘ありがとうございます!
    • GitHub認証の道は険しい…
    • メンターのお二人がきてくださり、悩みが解決して本当に助かりました。ありがとうございます!

Select a repo