1. tanaken on Rails
  2. #026: immutable cache header..
2024-06-29 12:59

#026: immutable cache header, local assigns in view template, ActiveStorage::Service::MirrorService

00:01
第26回のtanaken on Railsです。
今日は、箱根湯本の喫茶店において、マイエンというお店で収録しています。
なので、周りの音楽とか声とかが入っているかもしれないんですけど、そんな感じでやっております。
今週もTCRTMailsから3つのプリリクエストをピックアップしたいと思います。
1つ目が、Support Immutable Directive in Cache Controllerというプリリクエストですね。
こちらは、チームパックに関する変更です。
Cacheコントロールヘッダーのイミュータブルディレクティブがサポートされたというやつですね。
イミュータブルディレクティブというのは何かというと、
Cacheコントロールのヘッダーのオプションみたいな感じかな。
ちょっともう一回見よう。
そんな感じです。
イミュータブルディレクティブは特定のリソースが将来変更されないよということをブラウザに伝える時に使用されるものです。
これによってそのリソースが一度キャッシュされた後、もう一度検証したり再取得したりとか、
ダウンロードするというのが不要になるので、パフォーマンスが上がるというやつですね。
キャッシュの有効期限が切れない間であれば、もちろん再取得とか不要になるので、
今は無駄がなくなるという感じですね。
ただ、頻繁に更新するようなキャッシュの場合は、
イミュータブルは使えない、それはそうですね。
使わない方がいいですよと。
基本、一度書き込んだら書き換えることはないものという感じですね。
なので適切に活用してパフォーマンスを上げていきたいなという感じですね。
二つ目のプレビューリクエストに行きます。
二つ目は、Also pass local assigns to select local templatesというやつですね。
こちらはアクション流に関する変更です。
03:00
ViewTemplateの変数を受け渡す場合のお話ですね。
前提知識として、ローカル図に関してお話します。
レールズガイドにも、レイアウトとレンダリングという章に、章的ページにローカル変数を渡すという説明があります。
それを参考に、よくある例を1個示してみたいと思います。
例えば、新規登録のページ、Bookというリソースがパリにあるとして、
新規登録のページを作ると、new.html.erbでViewTemplateを管理している場合の話ですね。
今回の例は、ローカル変数、ローカル図自体は別にERBじゃなくても使えるんですけど、
ハムルとかスリムとか、その系統のViewTemplateでももちろん使えるんですけど、
さておき、new.html.erbで、
例えば、newbookというタイトルで、
レンダーパーシャル、フォーム、ハンマー、ローカル図、
同じ中括弧のブック、コロン、インスタンス変数、アットマーク、ブック、
ローカル図というキーワード引数で、
ブックにインスタンス変数のブックを渡していると。
フォームというパーシャルを、ViewTemplateをレンダリングするよという感じですね。
フォームのViewTemplateのほうに、
newbookという名前の評価弧変数で、
さっきのインスタンス変数のブックを渡せるという感じ。
フォーム.html.erbでは、
そのブックという変数を使ってフォームを設定したりできますよということですね。
こんな感じで使うかなと思います。
このローカル図自体は2022年くらいに実装されていて、
プルリクエストのリンクをショーの中に貼っています。
そっちも見てほしいんですけど、
このローカル図というのが実装される前は、
必ずローカルアサインズという、
ローカルアサインズかぎ括弧でシンボル、
例えばさっきの例だと、
ブックとかを指定して、
06:02
ローカルアサインズかぎ括弧シンボルのブックとかで値を取得するみたいな、
そういう仕組みしかなかったんですけど、
このローカル図が実装されたことで、
そういう変数の定義になったり、
テンプレートに渡す変数の定義が楽になったり、
デフォルトの引数を渡せるようになったり。
例えば別の例で、
ローカル図括弧タイトルを渡したいというときに、
デフォルトタイトルをタイトルにストリングで指定しておけば、
タイトルが空のときはデフォルトタイトルというのが渡ってくるよというような、
そういう実装が簡単にできるようになったと思います。
今まではローカルアサインズっていうのを使って、
もし空だったら、
フォルシーなものだったらデフォルトタイトルにするみたいな、
実装が個別に必要だったんですけど、
デフォルト引数渡せるようになって便利になった、
みたいなのがこのローカル図なんですよね。
今回送るリクエストは何をしたかというと、
このローカル図に関してちょっと課題があったので、
修正するという、
新しい手段を提供するというようなことをやっています。
何を言ってるかというと、
このローカル図で、
さっきの例だと例えばブックとか渡したんですけど、
ローカル図にクラス、
C-L-A-S-Sですね。
クラスっていう値というか、
キーワードで渡したりとか、
例えばifとかっていうキーワードで渡すってことはできるんですけど、
それを参照しようとすると、
クラスとかifとかはもうRubyの予約語なので、
テンポレートの中でクラスって書いたときに、
予約語の方を多分参照されちゃうのかな。
試してないですけど、
エラーにならないか。
書き換え終わっちゃうとかかな。
っていう感じだと思います。
多刀勝ちになっちゃうキーワードです。
でもこの予約語を書き換えようとしたら、
エラーになるのかな。
多分。
どうなんだろう。
参照しようとしたときはどうなるんだろうね。
みたいな問題があった。
すみません。試してないですけど。
エラーにならないか。
これまでもローカルアサインズを使って、
ローカルアサインズを書き換えるクラスとかって、
やることで参照していたとか。
そういう手段はあったんだけど、
それだとローカルアサインズだと、
説明したようなローカル図で指定したデフォルト値っていうのが取得できないと。
ローカルアサインズはあくまで、
アサインされてたらその後やがてるけど、
09:01
アサインされてなければニルになるのかなと思って。
っていう感じなので、
ローカル図で指定したデフォルト値っていうのは使えないと。
それは困るよっていう話だったんですよね。
で、なんで今回のプリリクエストでは、
このプリリクエストの実装後は、
binding.localvariable.getを使うことで、
例えば予約語として定義されたクラスとか、
ifとかっていう変数の値を参照できるようになったよ。
そういうことみたいですね。
これ試してみたいな。
これ絵なんだろうな、何年だろうな、もともと。
ローカルアサインズを使って参照してたっていうような話があったので、
これ困り事としてはデフォルト値が取れなくなるのが困ってたということだったので、
localvariable.getで取れるようになってくるんだねと。
そういう話ですね。
最後3つ目。
Improved Performance in Active Storage Service Mirror Serviceというやつです。
こちらはアクティブストレージに関する変更ですね。
アクティブストレージコロンコロンサービス、コロンコロンサービス、
ミラーサービスというクラスがあります。
このクラスは複数のストレージサービスに対して、
同時にファイルを保存することができるという機能ですね。
ファイルの状況性を担保したりとか、
異なるストレージサービスを併用したい場合に役立つようと。
そういう機能です。
レイルズガイドにもアクティブストレージの説明の中で、
ミラーサービスという説明があって、
これによると、
ミラーサービスはプロダクション環境でサービス間の一方期で、
一時的に利用するための機能です。
新しいサービスへのミラーリングを監視し、
既存のファイルを古いサービスから新しいサービスにコピーしてから、
新しいサービスに全面的に移行できるというふうに書いてあります。
あくまでストレージサービスを、
あるAというストレージサービスからBというストレージサービスに移行するという、
その移行期間の際に利用することを想定された機能というふうに説明されていますね。
そうなんだと知らなかったですね。
ずっとバックアップのために使うというような使い方、
別にしてもいいと思うんですけど、
そういう使い方ではなくて、
あくまで一時的にミラーリングというか、
同じ複数のストレージサービスに保存すると。
12:01
そういう機能のようです。
このプレビューキャストでは何をやっているかというと、
ミラーサービスの処理が並立化されていなかったということで、
スレッドプログラミングをして、
ミラーサービスの内部の処理を並立化することで、
パフォーマンスの向上を行っているということですね。
そんな感じでございます。
今日は3つプロリクエストを紹介しました。
こういう感じで外でしゃべりながら撮るというのは慣れたものになってきましたね。
よしよし、じゃあこんなところで今日はここまでにしようと思います。
ではまた来週。バイバイ。
12:59

Comments

Scroll