ActiveModel::Serializersでリソースに応じて動的にSerializerを切り替える

この記事は ZOZOテクノロジーズその2 Advent Calendar 2018 - Qiita 13日目の記事です。

今回はActiveModel::Serializers(AMS)の便利メソッドを紹介します。 github.com

AMSを使ってjsonシリアライズ実装をしていたのですが、以下のような非ActiveRecordオブジェクトのシリアライズ
動的にSerializerを切り替えたい場面で困った事がありました。

続きを読む

Homebridge on Docker on RaspberryPiとNatureRemoで自宅IoT環境の改善

この記事は ZOZOテクノロジーズ Advent Calendar 2018 - Qiita 10日目の記事です。

2年ほどラズパイ上でHomebridgeの運用をしていましたが、新型NatureRemoの発売に伴い構成を見直すことにしました。 takanamito.hateblo.jp

新型NatureRemoはIRKitと違い、温度・湿度・照度が取れるのでお部屋モニタリングが捗ります。

続きを読む

Aurora MySQLのローカルストレージ不足で事故ったログ

日次でDB内のとあるテーブルのデータ全件をBigQueryに同期するバッチがあって
RDS for MySQLからデータをselectしていたが、先日Aurora MySQL(5.6.10)に移行した直後から急にバッチがこけはじめた。

原因調査

バッチは使用しているMySQLクライアントの設定値(3600秒)に従ってタイムアウトし落ちていた。

バッチの実行時間帯のCloud Watchメトリクスを確認してみると
AuroraのCPU使用率が30分間ほど平常値から外れて高くなっていた。

しかしバッチを実行しているEC2のネットワークインプットメトリックは特に変動がなく、Auroraからselectした結果を受け取れてなさそうなことも同時にわかった。

DBへの接続がタイムアウトするまでに1時間かかっているのに、selectによるCPU負荷が30分程度しか上昇していないので
クエリが何らかの理由で異常終了している可能性を疑い始める。

続きを読む

Netflix製のjsonシリアライザgem fast_jsonapiを試す

先日OpenAPIのスキーマからRubyのクラスを自動生成するgemを作りました。

OpenAPIのschema定義からRubyのクラスを生成するgem「openapi2ruby」をつくりました - Start Today Technologies TECH BLOG

このgemを作って自動生成しようとしたのがActiveModel::Serializer(AMS)のシリアライザで
他にも自動生成できるものがないか調べていたときに、ちょっと前に話題になったNetflixのgemを見つけたので使ってみることに。

github.com

なんでも

serialization time is at least 25 times faster than Active Model Serializers on up to current benchmark of 1000 records.

らしい。速い。

続きを読む

ふるさと納税で届いたシマアジを刺身とだし茶漬けにして食べました

こないだのスーパーセールで買ったふるさと納税シマアジが届きました。

美味しんぼ 4話 「活きた魚」でおなじみのシマアジ
この回を見て以来、シマアジを見ると食べずにはいられない体になってしまった。

続きを読む

誕生日から年齢を計算するhappybirthday gemをリリースしました

happybirthday | RubyGems.org | your community gem host

使い方は以下の通り

require 'happybirthday'

birthday = Happybirthday.born_on('2000-01-01')
birthday.age.years_old
# => 18
続きを読む