1. tanaken on Rails
  2. #030: Hash#except, attribute..
2024-07-28 07:25

#030: Hash#except, attribute_writer_missing, filter_parameters

00:00
はい、こんにちは。第30回のtanaken on Railsです。
今週も、This Week in Railsから3つのプレリクエストを紹介します。
1つ目、DropHashExceptCoreExtension。
こちらは、アクティブサポートに関する変更です。
アクティブサポートには、Rubyのハッシュクラスを拡張して、
インスタンスメソッドとして、exceptメソッドが実装されています。
このプレリクエストでは、そのexceptメソッドを削除するという対応をしています。
理由は、Rails 8.0系では、Ruby 3.1以降が対象となること。
かつ、このexceptメソッドは、Rubyの3.1でハッシュクラスに組み込みとして実装されているため、
アクティブサポートで拡張する必要がなくなったということですね。
なので、このexceptメソッドは必要ないので削除するという対応をしています。
ちなみに、exceptびっくりメソッド、破壊的なメソッドのほうは、
引き続きアクティブサポートに実装されていて、
Rubyの組み込みのほうには実装がないので、
びっくりマークのついているメソッドのほうは、
アクティブサポートに残っているというところでございますね。
続いて2つ目。
introduceActiveModel__AttributeAssignmentSharpAttributeWriterMissing
こちらはアクティブモデルに関する変更です。
アトリビュートライターミッシングというメソッドが実装されました。
近いメソッドとして、アトリビュートミッシングというメソッドがすでにありますね。
これは参照するときに、存在しないアトリビュートを参照したときの取り回しをするメソッドですが、
今回のアトリビュートライターミッシングは書き込み時の場合に対応したものですね。
具体例は次のとおりです。
例えばトライアングルというクラスがあるとしましょう。
クラストライアングル。
そのトライアングルクラスの中でincludeActiveModel__AttributeAssignmentをインクルードしており、
アトリビュートアクセッサーでadjacentとoppositeかな。
ちょっと発音があれですけど、adjacentというアトリビュートアクセッサー。
これは底辺という意味ですね。
ちょっとこれググったんですけど。
三角形の底辺は数学的にadjacentって読むみたいですね。
あとはoppositeかな、opposite、こいつは高さ。
03:02
三角形の高さを数学的にはoppositeというふうに言うみたいですね。
この2つのアトリビュートアクセッサーがあるトライアングルというクラスがあると。
このトライアングルクラスの中でattributeWriterMissingというメソッドを書いてあげて、
第一引数がname、第二引数がvalueという形で読んであげて、
レールズロガーワーニングでtriedToAssignToNoneアトリビュート、
知らないアトリビュートにアサインしようとしているよというようなログを出すというような実装をしてますね。
例えばトライアングルクラスを入して、
トライアングルという変数に入れたとしましょうと。
トライアングル.AssignAttributes。
トライアングルにアトリビュートをアサインするぞ。
で、引数でheight10、高さ10みたいな値をアサインするよというふうに渡してみると、
heightというアトリビュートは定義されていないので、
書き込みのアトリビュートとして定義されていないので、
さっき出してたログ、
triedToAssignToUnknownAttributeHeightという感じで、
そういうログが出るよと。
意図しないアトリビュートへのアサインを検知して何か取り回しをしたいというときに便利だねということですね。
続いて最後。
AddCVV&CVC as Default Parameters to Filter Out in New Apps。
レールタイズに関する変更です。
フィルタパラメーターズのデフォルトにCVVとCVCが追加されました。
フィルタパラメーターズについては過去のエピソードでも取り上げていますね。
第8回のエピソードで取り上げています。
フィルタパラメーターズはその名の通りなんですけど、
ログに出力したくないパラメーターをフィルターで除外するという用途で使います。
CVVはCard Verification Value、CVCはCard Verification Codeということで、
クレジットカードのセキュリティコードのことですね。
不正利用を防止するためのコード、バリューということで、
マスターカードではCVC、ビザカードではCVV、あるいはCV2というふうに呼ばれるものですね。
06:01
セキュリティコードです。
セキュリティコードもログには出したくないですよね。
なので、であれば最初からフィルタパラメーターに追加しておけばいいじゃんと、
そういうプレリクエストですね。
こちらのプレリクエストは新しいレールズアプリケーションを作るときの
デフォルトの値を変更するという対応なので、
既存のアプリケーションには特に影響はありません。
既存のアプリケーションでもCVVとかCVCとかを
フィルタパラメーターに追加しておくといいんじゃないかなという感じですかね。
この辺のCVVとかCVCとかは、
例えば外部のクレジットカード決済システムを使うとき、
例えばストライプとかそういうのを使うときにも
CVVとかCVCとかがパラメーターとして渡してくださいみたいな感じで
多分指定されることもよくあると思うので、
よく一般的に使われる言葉ですよね。
略語ではありますけど。
なのでそういうのはデフォルトのパラメーターに
使っちゃっていいんじゃんというので、
そういう対応になっているという感じでございますね。
ということで今回も3つのプレリクエストを紹介しました。
こんなところで今週の田中絵音レビューズは終わりにしたいと思います。
ではまた来週。バイバイ。
07:25

Comments

Scroll