Kaigi on Rails 2023 - ActiveSupport::CurrentAttributes: すっごく便利なのに嫌われ者?!
by
Sampo Kuokkanen
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
ActiveSupport::CurrentAttributes: すっごく便利なのに嫌われ者?! Kaigi on Rails 令和五年
Slide 2
Slide 2 text
自己紹介 合同会社イービルマーシ ャンズ代表 イービルマーシャンズの 日本支社の色々やってま す!火星について知りた い方は連絡待ってます🤓 日本の開発のお手伝いさ んも 時々Ruby も書きたいの で、日本の会社のRails 開 発のお手伝いも。最近は Hotwire にハマっていま す。 KUOKKANEN SAMPO #THANKYOURUBY 日本で暮らしている フィンランド人です。 Ruby, ゴルフ、車が好 きです。ホンダビート 乗りです。
Slide 3
Slide 3 text
No content
Slide 4
Slide 4 text
なんで今日ActiveSupport::CurrentAttributes について話すねん? RAILS の便利な機能なのにあまり知られていない 目的:発表聞いて、初心者でも実際にRAILS のプロジェクトに 導入できるようになる もしかしたら古いコードでセキュリティ欠陥があるものもあ り、それをCURRENTATTRIBUTES に書き換えたら解消できる かもしれない
Slide 5
Slide 5 text
今日ActiveSupport::CurrentAttributes について話す内容 1 どうやってRAILS に入った機能? 2 不具合とかあったかな。。。 3 使い方 4 使わない方がいい?!?!
Slide 6
Slide 6 text
NSX $variables どこからでもアクセスでき る! ビート CurrentAttributes 1リクエストの間だけ、どこから でもアクセスできる! RUBY のグローバル変数、ホンダの車で例えるなら。。。
Slide 7
Slide 7 text
No content
Slide 8
Slide 8 text
No content
Slide 9
Slide 9 text
次のようなコード、あなたのプロジェクトに入ってます か? 入ってたらCurrentAttributes に書き換えましょう!
Slide 10
Slide 10 text
No content
Slide 11
Slide 11 text
さっきのようなコード。。。 使ってるウェブサーバーによっては大丈夫 例えばUNICORN だと使って大丈夫!リクエスト はメモリースペースを共有していないため スレッド系のPUMA などだと、お掃除しないとヤ バいかも。。。
Slide 12
Slide 12 text
問題点をACTIVESTORAGE::CURRENTATTRIBUTES で解決!
Slide 13
Slide 13 text
DHH 様!
Slide 14
Slide 14 text
No content
Slide 15
Slide 15 text
No content
Slide 16
Slide 16 text
No content
Slide 17
Slide 17 text
なんでこのような機能がRails に追加されましたか? すでにBASECAMP,GITHUB など大きなアプリケーションでこ のパターンが使われていた DEEPLY NESTED, ネスティングが深いコードで毎回パラメータ ーとして渡さなくてもいい 注意点、アプリケーションで最も重要なエンティティのみに使 おう
Slide 18
Slide 18 text
不具合。。。 問題発生!
Slide 19
Slide 19 text
No content
Slide 20
Slide 20 text
使おう!の前にバージョンをご確認 PUMA バージョン5.6.2 以前とRAILS バージョン7.0.2.2 以前で は、レスポンスボディがある一定条件だと閉じられず、これが 情報漏洩を引き起こす可能性があった レスポンスボディが閉じられたら、リセット処理が走るが、閉 じられないのなら、リセット処理も走らず、前のリクエストの データが残る可能性が! この問題は、PUMA のバージョン5.6.2 と4.3.11 、および RAILS のバージョン7.02.2 、6.1.4.6 、6.0.4.6 、5.2.6.2 で修 正されています。 修正されたバージョンにアップグレードするか、提供されたミ ドルウェアを使用して問題を回避できます。
Slide 21
Slide 21 text
Puma の方でどうやって修正されたか?
Slide 22
Slide 22 text
自分のコードでもCurrent を使いたい! まずはCURRENT というモデルを作成
Slide 23
Slide 23 text
No content
Slide 24
Slide 24 text
No content
Slide 25
Slide 25 text
No content
Slide 26
Slide 26 text
テストはどうする?
Slide 27
Slide 27 text
No content
Slide 28
Slide 28 text
No content
Slide 29
Slide 29 text
リクエストスペックはどう書 く?
Slide 30
Slide 30 text
No content
Slide 31
Slide 31 text
何も変更がない!!
Slide 32
Slide 32 text
便利だけど、反対意見もある 有害?
Slide 33
Slide 33 text
Ryan Bigg ー CurrentAttributes は有害である 1 グローバルステート、 コードがわかりにくく なる 2 コードがテストしにく くなる 3 魔法/マジックすぎる 4 明確に意図がわかるコ ードがいい HTTPS://TECHRACHO.BPSINC.JP/HACHI8833/2023_04_26/43810
Slide 34
Slide 34 text
DHH の例
Slide 35
Slide 35 text
No content
Slide 36
Slide 36 text
VS
Slide 37
Slide 37 text
VS
Slide 38
Slide 38 text
HTTPS://EVILMARTIANS.JP ご視聴ありがとうございました!
Slide 39
Slide 39 text
Twitter/X で電話かけたい方へ