1. tanaken on Rails
  2. #027: encrypts, Rack 3, ETag
2024-07-07 09:12

#027: encrypts, Rack 3, ETag

サマリー

Railsのプレリクエストでは、Active RecordのCompressorオプション、Rack 3 Streaming、ETagの優先度に関する変更が紹介されています。

00:00
こんにちは、tanaken on Railsです。第27回の収録を始めます。
This Week in Railsから、3つのプレリクエストを紹介いたします。
Active RecordのCompressorオプションの変更
1つ目、Introduce Compressor Option to Active Record://Encryption://Encryptor。
こちらは、アクティブレコードに関する変更です。
エンクリプトメソッドで圧縮アルゴリズムを指定できるようになりました。
例えば、モジュールを定義します。
あるモジュール、モジュール名がZSTDコンプレッサーという名前のモジュールを定義しましょう。
そのモジュールの中で、デフレイトメソッド、クラスメソッド、モジュールのセルフメソッドで
デフレイトというメソッドとインフレイトというメソッドを定義しています。
実装の中身を置いておいて、ZSTDコンプレッサーというものがモジュールがあるとしましょう。
アクティブレコードを検証した、例えばユーザーモデル、ユーザークラスがあるとして
ユーザークラスの中でエンクリプトメソッドを呼んで
例えば、Encrypt Name, Compressor, ZSTD Compressorという形で
今、ユーザーのネームというアトリビュートに
圧縮アルゴリズムとしてZSTDコンプレッサーモジュールを指定したと
そういうことができるようになりましたという話ですね。
このエンクリプトメソッドに関しては
過去のTanaken On Railsでも紹介しています。
第何回だったかしら、すみません、調べようと思って
メモしようと思っていたのに忘れちゃった。
第何回かしら。内容としては
アクティブレコードコロンコロンエンクリプション
コロンコロンエンクリプターというクラスについて紹介しているもので
モデルのアトリビュートを暗号化するおよび複号化する
そういうときに使うエンクリプトというメソッドがありますよという紹介をしました。
過去の回ではエンクリプツメソッドで
エンクリプター暗号化処理を指定するんですけど
エンクリプターを初期化するんですよね。
エンクリプターのインスタンスを入手して何か初期化するんですけど
そのときにコンプレッサートゥルーフォルスという形で
コンプレッサートゥルーフォルスというオプションで
トゥルーフォルスを渡して圧縮するかしないかを選べるようになったよと
そんなプレリクエストの紹介をしたんですよね。
それの発展的な話で今回のプレリクエストでは
圧縮のアルゴリズムを選ぶことができるようになったよということですね。
独自の圧縮のアルゴリズム、圧縮のモジュールを実装しておいて
コンプレッサーに指定すると
その独自の直時実装の圧縮アルゴリズムを利用できるようになるということですね。
そんな変更が1点目でした。
続いて2点目。
Rack 3 Streamingとの統合、ETagの優先度変更
Utilize Rack 3 Streamingというプレリクエストです。
こちらはアクションコントローラーに関する変更です。
アクションコントローラーコロンコロンストリーミングというモジュールがあります。
Railsにおいて通常ビューのレンダリングを行うとき
まずはテンプレートがレンダリングされて
その後レイアウトがレンダリングされて
レイアウトを含む全ての表示が準備されたら
クライアントにレスポンスを返すというのが
普通のRailsのレンダリングです。
それと比較してストリーミング配信という英語ですよね
ストリーミングではまず先にレイアウトをレンダリングして
その後必要な処理に応じて
テンプレートの各部分をレンダリングするというような形になっていて
通常とは逆の順番で
通常は各テンプレートがレンダリングされた後レイアウトなんだけど
ストリーミングの場合はその逆
レイアウトがレンダリングされた後各テンプレートがレンダリングされるというような順番になると
このストリーミングはRailsで大規模なデータセットを扱う場合とか
長時間かかる処理をレンダリングしなければならないというときに有用ですと言っています
例えば何がしかのコントローラーにダッシュボードアクションみたいなものがあるとしましょうと
ダッシュボードという名前からも察する通り
いろんな情報を出さなければならぬというケースがあるでしょう
例えば全ての文書の投稿を取ってくるとか
全てのページの情報を取ってくるとか
全ての記事の情報を取ってくるとか
投稿とかページとか記事とか似てるような概念ですけど
そんなあらゆる情報を取ってくるでレンダリングしなきゃいけないというようなときに
先にレイアウトだけレンダリングして
レンダーストリーミングトゥルーっていうオプション
ストリーミングトゥルーというオプションを指定すると
ストリーミングモードになるという感じみたいですね
僕は使ったことないがあったんですけど
そういうのがあるらしいですと
なのでレイアウトだけ表示されて
中身コンテンツの部分がレンダリング中はぐるぐるなってて
で全ての情報が整ったら
中身のぐるぐるなってた部分が埋まっていくみたいな
なんかそんな感じなんですかね
想像するに
ちょっとやってみたいなと思いますけどね
で何かというと今回の変更では
Lack 3を導入というかバージョン上がったことによって
Rails側の実装がちょっと薄くなったよということを言ってます
これまでのRailsでは
アクションコントローラーコロンコロンストリーミングというモジュールで
ストリーミングに関する処理を実装してましたと
だけれども今回Lack 3で
ストリーミングに関する機能が強化されて増えた
このおかげでこのストリーミングモジュール内での
一部の実装が不要になって
Lackにお任せできるという形になったよと
なのでそのLack 3で使えるようになった機能を
使う形に書き換えられていますというようなお話でございます
最後3つ目
Prefer ETag over Last Modified for Fresh When and Stale
According to the HTTP Specificationというプレリクエストです
こちらはアクションパックに関する変更でございます
HTTPヘッダーにETagとLast Modifiedが両方設定されている場合に
RFC 7232の使用に従って
ETagが優先されるようにしましょうと
そういう変更です
この変更はConfig.ActionDispatch.StrictFreshnessという
設定がトゥルーの場合に有効になります
過去のRailsのバージョンとの互換性を維持するために
デフォルトではフォルスに設定されるようになっています
ただRails 8K以降 新たにRailsプロジェクトを立ち上げるときには
デフォルトの値はトゥルーに設定されているので
ETagとLast Modifiedが両方あったら
ETagが優先されるというようになりますよということらしいですね
HTTPのRFCの使用にちゃんと従ってやっていきましょうということみたいですね
そんなところで3つ紹介いたしました
では こんなところで第27回のたなきゃんオンライル図
終わりにしたいと思います
では また来週バイバイ
09:12

コメント

スクロール