u16suzuの blog

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

株式会社スタメンに入社しました

7月1日からスタメンでRailsエンジニアとしてお仕事をしています。

今は、コードベースをキャッチアップしながら、ユーザ様からのお問い合わせ対応、込み入った既存バグの調査と修正、ジュニアなRailsエンジニアのサポート、他エンジニアからのバックエンド困り事相談役をやっています。

2020年4月から約5年間、家からフルリモートで勤務をしていましたが、 ずっと家の中にいることやリモートでのコミュニケーションのみでやる仕事に限界を感じていました。 出社して開発する文化のある名古屋のスタートアップでRDBRailsが使える会社さんを探したところ、スタメンが見つかり運よくご縁があった次第です。

入社してまだ3週間ですが、みなさん優しくて話しやすいので、仕事がしやすいです。 すぐ会話できる、相談できる環境が自分としては一番パフォーマンスが出るので、とても合っている環境だと思っています。 iOSエンジニアの方から相談され、隣で一緒にサーバログを見ながら調査し、課題の解決まで持っていけた時はとても盛り上がりました。嬉しかったです。

オフィスも新しくて綺麗で何よりもデザインをとても気に入っています。 高架下にあるため通過音がしますが、耳栓、ノイキャンヘッドフォンがあれば気になりません。

入社して1ヶ月は出社前提ですが、それ以降はハイブリッド出社になります。 月水金に出社で、火木はリモート勤務可です。 とはいえ、自分はオフィスの方がパフォーマンスが上がるため、家族関連で緊急のことがない限りは出社しようと思います。

子供が小学校2年生になりました。そろそろ手が掛からなくなってきたので、徐々に仕事、プログラミング、コミュニティへのコミットを増やしていこうと思っています。

頑張っていきますので、コミュニティ活動の場でお会いした際にはどうぞよろしくお願いいたします。

弊社では引き続きRailsエンジニアの採用を行なっております。 気になる方はカジュアル面談にお繋ぎしますのでぜひお声がけください。

recruit.stmn.co.jp

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スタッフの皆様本当にお疲れ様でした!