00:06
こんにちは、たなけんです。2014年2月3日、土曜日の昼です。第5回、tanaken on Railsの収録を始めます。
今週のThis Week in Railsでは、4つのプルリクエストが紹介されていました。
ここでは、この4つすべて、さくっとお話ししていこうと思います。
では、まず1つ目。タイトルが、DeprecatePassingNilAsModelArgInsteadOfRaisingArgumentErrorというタイトルでございます。
アクション病に関する変更です。
formwithというメソッドがありますね。
皆さん、使ったことあるかと思います。僕も大変お世話になっております。
このformwithというメソッドには、キーワード引数モデルというものがあります。
このキーワード引数モデルのデフォルトの値は、nilでした。
このデフォルトの値が、最近フォルスに変更されています。
最近というのは、2023年11月のプルリクエストですね。
このプルリクエストは、HandleNilFormWithModelArgumentというタイトルで、
このプルリクエストは何かというと、モデルにnilという値を渡した場合に、
場合によっては、アクションコントローラーパラメータミッシングエラーだったり、
アクションコントローラールーティングエラーが発生することがあるよと、
これ使い方の問題だと思うんですけど、そういうことがあるよっていうのを言ってます。
それ分かりにくいというか、モデルにnilを許容する意味はあるんでしたっけみたいな話を
このプルリクエストはしてて、
モデルがnilっておかしいケースなんじゃないっていうことを言ってますね。
なんでデフォルトの値はフォルスにした方が取り回しがいいんじゃないかみたいなことを
ざっくり言うと言って、そういう修正をしてます。
モデルにnilが渡ってきた場合に、アーギュメントエラーを発生させるように修正をしているというのが、
この2023年11月のプルリクエストです。
今回の2024年2月のプルリクエストのプルリクエストは、
アーギュメントエラーをいきなり出すんじゃなくて、
一旦非推奨の警告メッセージ、ワーニングを出した方がいいんじゃないかっていうので、
03:02
そういう修正をしています。
アーギュメントエラーを出すっていう修正をしちゃうと、
これは破壊的な変更にあたるよねと。
このformwithメソッドのモデル引数に、
あえてnilを渡すっていう実装をしている人がいるかもしれないですよねっていうことだと思うんですね。
nilを渡しても別に何にもエラーが出ないケースもあったわけで、
おそらくだけど、モデルにnilを渡したこと、
意図的に渡したことは僕は多分ないんで分からないですけど、
動作確認すればよかったか。
多分nil渡してもエラーにならないケースもあるんじゃろう、おそらく。
おそらくだけど。
なのでnilを渡しているアプリケーションもあるかもしれんということだと思うんですね。
なので一旦、
Layersのバージョン7.1.2の段階では、
非推奨の警告だけ出しておいて、
その後7.1.3に上げるときに、
アーギュメントエラーを出すという修正にしたらいいんじゃないかということを言ってますね。
ごめん、7.1.3じゃない、ごめんなさい。
7.2の段階では非推奨。
今は7.1だからね。
Layersのバージョン7.2、次の出す7.2では非推奨の警告にしておいて、
7.3になったらアーギュメントエラーを出すというふうにしたらいいんじゃないかというのをやっているリクエストです。
というのが1個目でした。
2個目、タイトルがSkip CSS When Creating APIsというタイトルですね。
これはレールタイズに関する変更です。
レールズニューするとき、APIモードを指定してレールズニューできるんですけど、
そのときにCSSのファイルは作らないようにしましたということですね。
APIモードであればCSSいらんよねということでしょうね。
というのが2つ目、これはサクッと。
続いて3つ目、タイトルがAddRowCountFieldToSQL.ActiveRecordNotificationというタイトルですね。
これは何かと言いますと、アクティブレコードに関する変更です。
アクティブレコードにはコネクションアダプターズコロンコロンアブストラクトアダプターというクラスがあります。
このアブストラクトアダプターというクラスは何なのかというと、
06:04
アクティブレコードが様々なデータベースシステムをサポートするために使う抽象化のクラスです。
このアブストラクトアダプターの中にはログメソッドというものがあります。
ログメソッドは何かというと、SQL、クエリの実行だったりトランザクションの開始終了とか、
そういったデータベースのやり取りに関する情報をログに記録するために出力、
ログに記録されるために呼び出されるメソッドです。
このメソッドは例えばデータドックとかのAPMツールと呼ばれるもの、
アプリケーションパフォーマンスマネジメントツールですね、
と呼ばれるものにデータを送る際にも利用されたりしてますよね。
このログメソッドに関する修正をしてます。
今回のプルリクエストではこのメソッドの出力にクエリで取得したレコードの件数を追加すると。
このローカウントというフィールドでレコードの件数を記録するようにしていると。
なので例えばさっきのデータドックとかにクエリで取得したレコードの件数の情報、
5件なのか10件なのか100件なのか1万件なのかみたいな数字も渡せるようになるので、
そうするとすごい大量のデータを取得しているようなクエリはどれなんだみたいなのが分かるようになると。
そうしたら便利そうだなという感じがしますね。というのが3つ目の話でした。
最後4つ目。タイトルがAllow Encryption Without Compressionというものです。
こちらもアクティブレコードに関する変更です。
アクティブレコードの中にEncryption://Encryptorというクラスがあります。
これは何かというと暗号化とか複号化のAPIを提供してくれるクラスなんですけど、
例えばアクティブレコードを検証したモデル、例えばユーザーモデルみたいなものがあったとして、
そいつにEncryptというメソッドで第1引数に暗号化するフィールドの名前、
例えばこの例、実際にReadMeに書かれている例なのでそのまま使うんですけど、
09:03
ユーザーのネームを暗号化すると。それが第1引数にネームを渡して、
第2引数というかキーワード引数 Encryptorというキーワード引数に今回のアクティブレコードを
Encryption Encryptor Newという形でそのEncryptorクラスのインスタンスを渡すみたいなことができると。
そうすると今回の例だとユーザーモデルのネームフィールドはそのEncryptor暗号化クラスを使って
暗号化だったり複合化ができるっていうようなことらしいです。
ちょっと僕は使ったことないんで、あんまりまだイメージはできてないんですけど、そういうのがあると。
今回のプレリクエストではこの暗号化クラスで暗号化する際に圧縮するかどうかというフラグをオプションで渡せるようになったと。
そのEncryptorクラス.newというインスタンスを作るときに引数でコンプレス、トゥルー、フォルスみたいなのを渡せるようになったと。
コンプレス、フォルスを渡した場合には圧縮をしないということができるようになりました。
圧縮を回避したいケースとしては次の2点が挙げられていました。
1つ目は既に圧縮済みのケース。
2つ目は暗号化された値のエントロピーに関する情報が漏れないようにしたいケースということが紹介されてたんですけど、
正直なところ自分はあんまり暗号化とか圧縮とかエントロピーとか正直わからんって感じで何を言ってるんじゃみたいな感じがあります。
既に暗号化済みの場合に暗号化をスキップしたいみたいなのは何となく言ってることは何となくわかる気がしたんですけど、
エントロピーに関する情報が漏れないようにしたいっていうのはよくわからなかったです正直。
暗号化に関する。
暗号化、エントロピーっていうのは何なのかはさっきちょろっと調べたんですけど、
なんかデータの複雑さみたいなもの、暗号化したときのデータの複雑さみたいな話だったようですが、
あんまりよくわからないのでまたどっかで別途学びたいなという気持ちだけ宣言しておきます。
そんな感じでサクッと4件のプレリクエストを紹介しました。
大体どのクラス、どのアクションビューなのか、アクティブレコードなのか、レール体制なのか、
12:01
どこに関する変更なのかっていうのが分かって、どういう変更があったのかっていうのが追えると、
何となくこういう開発が進んでるんだなっていうのが分かったら面白いですね。
というのと、あと前回この田中オンレールズで話したときに、
どれだっけな、どれかね、アクティブストレージに関する変更、
あれだ、動画の分析、ビデオアナライザーについて話をしたときに、
アクティブストレージに関する変更ですって、僕は小ノートにも書いてあってそれを読んだつもりだったんだけど、
聞いてみたらアクティブレコードに関する変更ですって発言していて、完全に言い間違いなんで、
お気づきになられた方は言い間違えたんだなと思ってくれればと思います。
小ノートにも言い間違えましたっていうコメントを書いておきました。
小ノートって呼んでるのは、スクラップボックスに自分がメモしたものを、
リンクを毎回概要欄に貼ってるんで、それのことを言っています。
はい、という感じでしたね。
よし、では13分ぐらいしゃべったのかな。
よし、じゃあこのあたりで今週のたなきゃんレールズを終わりにしたいと思います。
ではまた、バイバイ。