1. tanaken on Rails
  2. #004: Rails Console, VideoAn..
2024-01-27 14:31

#004: Rails Console, VideoAnalyzer, NestedAttributes

00:07
はい、こんにちは、tanaken on Railsです。
はい、2024年1月27日土曜日の15時です。
はい、今週もやっていきます、第4回のtanaken on Railsです。
はい、今週のThis Week in Railsは、3つのプリキュアが紹介されておりました。
今回は3つとも読んでいきたいと思います。
はい、時間がかかりそうなのでサクサクやっていきます。
はい、1つ目、Add Customized Prompt for Rails Consoleというプリクエストですね。
レールタイズに関する変更です。
で、そうそうレールタイズってそういえば、何だっけっていう、
レールタイズって発音がレールタイズで合ってるのか、あんまり自信ないんですけど、
線路の下に敷いている板のことをレールタイズって言うみたいですね。
はい、レールズ、Debianのレールズにはレールタイズというライブラリーがあると。
このプリクエストでは、レールズコンソールに関して現在のレールズ演舞が表示されるようになったと。
具体的には、デベロップメント環境では、
dev-001みたいな感じでレールズコンソールの表示が出ると。
テスト環境だとテスト、プロダクション環境だと頭文字4つ、プロットですね。
あと独自のレールズ演舞の場合は、その環境の名前がそのまま出るという感じになりますと。
Devとテストは緑色で、プロダクションプロットは赤色で表示されるというので、
見た目で今どの環境をいじっているのかというのが分かるようというようなことかと思います。
独自のレールズ演舞を使った場合は、カラーの変更はなくなると。
デフォルトのターミナルなりコマンドラインツールのデフォルトのカラーがそのまま出るという感じになるようですね。
独自のレールズ演舞の場合は、コードを読んだ限りだとデフォルトの変更はなさそうだと思ったんですけど、
もし独自の環境の場合でもカラーを指定できるようなのがあれば、後で訂正をいただければ嬉しいなと思います。
というのが1個目でした。
03:01
サクサクいきます。2個目。
2個目がFixed Rotation Detection for HDR Videosというプルリクエストですね。
こちらはアクティブレコードに関する変更です。
動画データを分析する仕組みというのがレールズにはあるんですよね。
アクティブストレージコロンコロンアナライザーコロンコロンビデオアナライザーというクラスかながあると。
このビデオアナライザーを使うことで、動画データの画面、映像の幅と高さが分かるのと、
あとその動画の秒数が分かる。
あとは動画が回転されている場合の回転の角度、90度とか180度とかというのが分かる。
あとは、あと3つ。
アスペクト比も分かるというのと、音声があるかないかというトゥーフォルスで分かるのと、
映像があるかないかというのが分かると。
なので動画データを、そういった幅とか高さとか秒数、角度とかが分析できるクラスだというのがあります。
これがビデオアナライザー。
今回のプレリクエストでは、このビデオアナライザーを使ったときに動画の回転角度が機体通りに抽出できない場合があるというのを発見したので直しましたというプレリクエストになっています。
具体的には、iPhoneのポートレートモードで撮影した動画。
具体的なサイズでいうと、1920×1080のサイズの動画を90度回転させて、その動画ファイルをビデオアナライザーで分析したと。
そうすると、なぜか90度回転という情報が失われて、でも回転後のサイズになっちゃっているので、
もともと1920×1080だったのが、ひっくり返って左右逆転して、
1080×1920というサイズの無回転の動画であるという分析結果になっちゃったよと。
で、なんでだろうというところで、動画ファイルのメタデータ、メタデータみたいなものにサイドデータ、
サイドデータというものがあるようです。
サイドデータにはいくつかのタイプがあるみたいで、
その中でも回転角度はディスプレイマトリックスというタイプのサイドデータを使うことで、
回転角度が分かるというものらしいんですよね。
だけれども、既存の修正前のロジックでは、このサイドデータが種類が、タイプがいくつかあるのに、
06:02
一番最初にサイドデータの配列かな、みたいなものに入っている一番最初のデータを持ってきて、
その中で回転角度があるかどうかというのを調べてあったら、
回転角度が90度回転してましたよとか、180度でしたよみたいなのを出しているというロジックになっていました。
今回の修正では、ちゃんとサイドデータのタイプというのを調べた上で、
つまり今回のディスプレイマトリックスというタイプのものを特定した上で、
そのサイドデータの回転角度、ローテーションかな、があるかどうかというのを調べて、
回転の角度を分析すると、抽出、特定するというような実装に変更しています。
今回検証に使われたiPhoneのポートレートモードの動画というのは、
サイドデータのタイプが一番最初に、サイドデータのリストの中で一番最初に、
DOVI Configuration Recordというタイプのサイドデータが一番最初にあると。
既存のロジックは一番最初のサイドデータを使っちゃっていたので、
このローテーションという回転角度の値が、そういうバリューがないよというのを検証しました。
というので、無回転というふうに判定しちゃってたということですね。
レイルズの修正、もちろんレイルズのコミュニケーションなのでレイルズの修正なんですけど、
知らないことがあるもんだなと。
動画ファイルのサイドデータみたいな話も今回初めて知ったので、
そういうのを見つけて調べて修正してくださっている人がいるんだなというのがありがたい話ですね。
アクティブストレージの修正でした。
最後3つ目です。
3つ目は、Consistently Raise an Argument Error when Passing an Invalid Argument to a Nested Attributes Association Writerというタイトルです。
これ日本語訳すると、ネストされた関連付けの属性に対して書き込みをするときに、
無効な引数を渡した場合、一貫してアーギュメントエラーが発生するようにしました。
これはアクティブレコードに関する変更です。
前提として、Accept to Nested Attributes Forというメソッドを使った場合の話になっています。
Accept to Nested Attributes Forというメソッドは、
親のモデルを経由して関連モデルのレコードを保存できるという機能ですね。
09:07
このAccept to Nested Attributes Forというメソッドに、
その属性の名前を引数で渡すと、
その属性を親モデルを作成とか更新とかするときに、
親モデルにひも付いたる関連モデルを同時に更新とか作成とかできると、
そんな感じの機能になっております。
具体的な例をRailsのAPIのドキュメントから持ってくると、
Bookというクラスがありますと、
アクティブレコードを継承したBookというクラスが定義されていて、
BookがHasOneAuthor、著者ですね。
一人の著者を持っていますというのと、
BookがHasManyPages、複数のページを持ってますよという関連があると。
Accept Nested Attributes Forでオーサーとページ数を指定してあると。
なのでBookを登録すると同時に、
オーサーアトリビューツというキーワードで、
オーサーの情報を同時に渡すと、
Bookを作ると同時にオーサーを作るとか、
ページの情報も同じですね。
ページアトリビューツという形で渡すと、
ページを作ることができるというような感じになっております。
今回のプレリクエストの修正は何かというと、
今回の例でいうとオーサーとかページとか、
そういったものに無効な引数を渡すと、
オーサーだったらハッシュ、
例えばオーサーのネーム、
ネーム太郎とか、
ページズだったらページズアトリビュートに、
配列で渡すのかな、ページズアトリビュートだったら。
ページズアトリビュートだったら。
配列で、例えばページのタイトル、
タイトルがサンプルですとかっていうので、
属性なんだろうな、引数を渡すんですよね。
無効な引数を渡したときにエラーが発生するんですけど、
複数な関連、はずめにの関連で指定されている属性、
今回でいうとページズ、
ブックはずめにページズのページに、
無効な引数を渡した場合、
この場合はちゃんとアーギュメントエラーが発生して、
12:03
分かりやすいねと、渡した引数が悪かったんだなと、
いうのがちゃんと発生するんだけれども、
ハズワンオーサー、単一な関連、
今回の言うとブックハズワンオーサーのオーサーに関して、
オーサーアトリビューツに不正な引数を渡すと、
アーギュメントエラーではなくて、
違うエラーが出ていると。
例えばオーサーアトリビューツに本来だったらハッシュで、
例えばネームとか、
ハッシュネーム太郎とか、
青年がバースデー1900何年みたいなのを渡す、
例えばネームとかバースデーとかがオーサーにあればですけど、
みたいな形でハッシュで渡さなきゃいけないんですけど、
それは例えば文字列、ストリングで渡したよとかって場合は、
そのストリングに対して必要なメソッドがありませんよ、
みたいなノーメソッドエラーが出ているとか、
本当はアーギュメントエラー、引数が正しくないですよというのを
エラーを出してほしい、そっちのほうが分かりやすいんですけど、
なんか違う、期待にそぐわないエラーが発生していますよということがありました。
なので、ハズメニューのときはいいんだけど、
ハズワンのときに期待するアーギュメントエラーが発生しないという問題があったよと。
今回の修正によって、ハズワン、単一な関連の場合でも
アーギュメントエラーが発生するように修正をしましたよというお話で、
一貫性のあるエラーが、一貫性もあるし、
アーギュメントエラー、引数のエラーなんだからアーギュメントエラー出してよということですね。
分かりやすいエラーになって嬉しいなというお話でございました。
よし、3つ紹介することができました。
今日はこんなところかな。
1月ももう終わりということで、
基本レール図4回やってきたんで、引き続き2月以降もやっていきたいと思います。
今回はこれにておしまいとします。バイバイ。
14:31

コメント

スクロール