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 で電話かけたい方へ