u16suzuの blog

日々学んだことのメモブログです。

Vueの開発ツールについて

Vue の開発ツールの今昔について本で読んだのでまとめておきます。

Vue CLI

古いほう。内部的には Webpack を使って実行可能ファイルに変換している。 この変換処理のパフォーマンスが悪く問題になっていた。

Vite (ヴィートと発音)

フランス語ではやいという意味。 新しい方。基本的にこっちを使う。 ECMAScript のモジュール機能を使うことで実行ファイルの生成を高速化した。 Vue3 からデフォルトに組み込まれるようになった。 この Vite ベースなのが「create-vue」。

Mongoid gem の test の実行方法

ソースはこちら : https://github.com/mongodb/mongoid/tree/master/spec#running-mongoid-tests

$ git clone git@github.com:mongodb/mongoid.git

$ cd mongoid
$ git submodule init
$ git submodule update

# MongoDB を起動する
# 起動に失敗する場合は /tmp/mdb を作り直すとよい
$ mkdir /tmp/mdb
$ mongod --dbpath /tmp/mdb

# MongoDBが起動してるかチェック
$ ps aux | grep mongo
u16suzu          30089   0.1  0.5 411874576  76624 s000  S+    7:06PM   0:00.94 mongod --dbpath /tmp/mdb

# testを実行する. 以下で全てのテストが走る
# 失敗するときは bundle update を実行すればok
$ rake

# テスト単体を実行したい場合は以下でOK
$ be rspec ./spec/mongoid/association/macros_spec.rb:186
# MongoDBが too many open file エラーで死ぬ場合がある
$ ulimit -n 10000

mongoid の any_of と or の違い

any_of は、前の条件をそのまま残して、その後に or 条件で挿入してくれる。 or は、前の条件も全部ひっくるめた or 条件を生成する。

コード例

実験したバージョン

[57] pry(main)> Mongoid::VERSION
=> "7.3.5"
> User.where(age: 33).any_of({name: "hoge"}, {tel: "123"}).selector
=> {"age"=>33, "$or"=>[{"n"=>"hoge"}, {"t"=>"123"}]}

> User.where(age: 33).or({name: "hoge"}, {tel: "123"}).selector
=> {"$or"=>[{"age"=>33}, {"n"=>"hoge"}, {"t"=>"123"}]}

ドキュメントより

  • any_of

    Adds a disjunction of the arguments as an additional constraint to the criteria already existing in the receiver.

レシーバにすでに存在する criteria に、追加の制約 として引数の論理和を追加します。

  • or

    Creates a disjunction using $or from the existing criteria in the receiver and the provided arguments. This behavior (receiver becoming one of the disjunction operands) matches ActiveRecord's or behavior. Use any_of to add a disjunction of the arguments as an additional constraint to the criteria already existing in the receiver.

$or を使用して、レシーバ側の既存の criteria と指定された引数から論理和を作成します。 この動作 (レシーバーが論理和オペランドの 1 つになる) は、ActiveRecord の or の挙動と一致します。 レシーバ側にすでに存在する条件に対する追加の制約として引数の論理和を追加したい場合は any_of を使います。

mongoid の any_of と or の違い

any_of は、前の条件をそのまま残して、その後に or 条件で挿入してくれる。 or は、前の条件も全部ひっくるめた or 条件を生成する。

[54] pry(main)> User.where(age: 33).any_of( {name: "hoge"}  ,  {tel: "123"} )
=> #<Mongoid::Criteria
  selector: {"age"=>33, "$or"=>[{"n"=>"hoge"}, {"t"=>"123"}]}
  options:  {}
  class:    User
  embedded: false>

[55] pry(main)> User.where(age: 33).or( {name: "hoge"}  ,  {tel: "123"} )
=> #<Mongoid::Criteria
  selector: {"$or"=>[{"age"=>33}, {"n"=>"hoge"}, {"t"=>"123"}]}
  options:  {}
  class:    User
  embedded: false>

ドキュメントより

  • any_of

    Adds a disjunction of the arguments as an additional constraint to the criteria already existing in the receiver. レシーバにすでに存在する criteria に、追加の制約 として引数の論理和を追加します。

  • or Creates a disjunction using $or from the existing criteria in the receiver and the provided arguments. This behavior (receiver becoming one of the disjunction operands) matches ActiveRecord's or behavior. Use any_of to add a disjunction of the arguments as an additional constraint to the criteria already existing in the receiver.
    $or を使用して、レシーバ側の既存の criteria と指定された引数から論理和を作成します。 この動作 (レシーバーが論理和オペランドの 1 つになる) は、ActiveRecord の or の挙動と一致します。 レシーバ側にすでに存在する条件に対する追加の制約として引数の論理和を追加したい場合は any_of を使います。

RubyKaigi2023に参加してきた&Ruby東海のRe:bootに手を挙げた

5月11~13日に長野県松本市で開催されたRubyKaigi2023に参加してきた。 今回、一番注目していたセッションは sue445 さんのN+1をrubocopで見つけて修復までやってしまおうという発表でした。 今現職でのメインはMongoDBなのですが、今回の発表で使っているライブラリは対応していなかった残念。

speakerdeck.com

Official partyで名古屋から来ている方とお友達になったり、その流れで翌日Ruby東海をやっておられた松本さん(@Dominion525さん)にご相談をして、Ruby東海のRe:bootをさせていただくことにしました。3年前にcovid-9の影響で東京から家族と共に名古屋に引っ越してきて、なんやかんやあり、お仕事にも慣れて落ち着いてきた所で、仕事外の時間と空間でコードを書いたり、プログラムについておしゃべりする場が欲しくて、一晩考えて手を上げました。

松本市はコンパクトで美しい良い街でした。徒歩で行ける範囲におしゃれなカフェや、雑貨屋さん、美味しいお寿司やさんがありとても観光しやすい街でした。何よりも標高が高く、海もないため湿気がなくカラッとしていて涼しいです。東北生まれにはありがたい。

来年は沖縄開催となります。とても楽しみです。最後にRubyKaigi2023スタッフの皆様本当にお疲れ様でした!

今日読んだもの

github.com

rubocopのcopを全て有効にしています。 そのままだと全て落ちてしまうので、全てのRubyファイルの先頭に # rubocop:todo all をつけてチェックをしないようにしています。 あとは個別のファイルごとにrubocopに対応して # rubocop:todo all を削除していけば良いとのこと。

github.com

システムのread/write権限を持つユーザがmongodbのシステムコレクションのデータを変更できる件を指摘、修正しています。

今日かいたもの

github.com

WIPでmongoidにPRを出してみた。しかし、evergreenで許可を得ないとパッチを出せないみたいで止まっている。