sharoa
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    # 【第16週】パRails輪読会🚂 \(2023\-12\-04\~ 2023\-12\-08\) ###### tags: `パRails🚂` - [開催概要](https://hackmd.io/4A_8ahJtQNi5hz713N5Y7w?view) - [パRails輪読会 ノートまとめ](https://hackmd.io/jsgA8Pf_RVioOgSL_VOR4g) - サンプルコード・正誤表:[サポートページ:パーフェクトRuby on Rails【増補改訂版】:|技術評論社](https://gihyo.jp/book/2020/978-4-297-11462-6/support) - **サンプルコードをダウンロードしただけでは、すぐに`rails s`できない可能性が高い**です。 以下のページに環境構築の手順をまとめたので、ドライバーをやってくださるという方は、こちらに沿って環境構築をお願いします🙏 ⏩ [環境構築の手順 2022年版](https://hackmd.io/y7qb2BRMT2Wd4tAtKYObcQ) ⏩ [環境構築の手順 2023年版](https://hackmd.io/3_lnn8_QRD6wEjwFbWcBzQ) 💁‍♀️ [更新の手順 2章編](https://hackmd.io/pZAmF2EjSmyQ38lUtJ_CqA) ## 目次 [TOC] ------ ## 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~`)を適用すると、デザインが適用される - `navbar`はナビゲーションバーだった… - [ナビゲーションバー · Bootstrap v5\.3](https://getbootstrap.jp/docs/5.3/components/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で設定した`ClientID`と`Client 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テーブルで初めに設定しておくカラムは`provider`、`uid`、`name`、`image_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認証の道は険しい… - メンターのお二人がきてくださり、悩みが解決して本当に助かりました。ありがとうございます! -----

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully