rastam’s blog

東京在住のマレーシア人 Rubyist

Ruby Weekly #459: 日本語サマリー

rubyweekly.com

Highlights

regexp-examples: Generate Strings That Match a Given Regular Expression

正規表現に一致する文字列を生成する gem。Regexp#examples #random_example メソッドを生やす。

Goodbye ActiveRecord!

Rails モノリスを ROM マイクロサービスに分解した Aircall 社が ActiveRecord と ROM を比較した記事。

  • ActiveRecord の多岐に渡る責務 vs ROM の明確に分けた責務
  • ActiveRecord の疑問はググり放題 vs ほとんど ROM フォーラムで聞くことが多い

Lefthook, Crystalball, and Git Magic for a Smooth Development Experience

開発効率化案いろいろ。

  • lefthook で git hook 管理・チームと共有。push 前にテストを実行するフック登録。
  • crystallball で修正した差分のテストのみに絞る。
  • checkout 時に足りてない gem を自動的に bundle install するフック登録。
  • checkout 時に migration を自動的に実行するフック登録。

Articles & Tutorials

How We Migrated To Turbolinks Without Breaking JavaScript

メンテされなくなった PJAX を Turbolinks に移行した Honeybadger 社の注意点。

  • Turbolinks は SPA なので、遷移するたびに、ロードしたものをアンロードする必要がある
  • 破壊的リクエストを発行するたびにキャッシュをクリアする必要がある
  • 遷移した時点の DOM がその状態のままでキャッシュされるから、またそのページに戻ったら状態が初期化されてない覚悟を
  • <body> 内 JS を全部削除しないと、遷移するたびに実行されちゃう
  • 外部ライブラリを JS モジュールでインポートすること
  • デプロイを跨いだ遷移は古い JS・CSS に依存したままなので、 data-turbolinks-track 属性で強制リロード

Using strftime in a Rails View is a Mistake

Rails ビューで Date Time#strftime を直接呼ぶのをやめようという主張。 %Y-%m-%d 表記が読みにくいから。 #to_s(:symbol) で書こうと。 :symbolRails デフォのものからも選べれば、 Date::DATE_FORMATS[:symbol] `Time::DATE_FORMATS[:symbol] で独自定義もできる。

Minimum Viable Example of Calling Rust From Ruby without a Gem

RSpec コアチームの Sam Phippen 先生が gem なしで Rust を Ruby から呼んだ話。

Adding devise_token_auth to An Existing Rails App

既存 Rails アプリに devise_token_auth gem を導入する手順。

Rails 6 Adds ActiveRecord::Relation#annotate

SQL コメントを書く ActiveRecord::Relation#annotateRails 6 に登場。

Debugging MySQL Lock Errors in Rails Apps

Rails での Mysql2::Error: Lock wait timeout exceeded; try restarting transaction エラーの原因を突き止めた話。

50 秒以上かかるトランザクションがあるときに発生するエラーだが、そのトランザクションがどこにあるのかが謎。 ActiveRecord::Base.transaction のモンキーパッチで 50 秒以上かかるトランザクションをログに書き込むことで、犯人の正体が暴けた。トランザクション内でメールを送信する処理だった(非同期で送信してなかった)。

Dynamic Image Resizing with Ruby and the Serverless Framework

S3 上画像のサムネなどを Serverless フレームワークで生成する手順。Lambda 関数は Ruby、画像処理は MiniMagick gem で。

Code and Tools

Montrose 0.10: A Library for Defining Recurring Events

定期イベントを表すオブジェクト用 gem。オブジェクトをシリアライズすることで永続化できる。

Wasmer: A Ruby Library to Run WebAssembly Binaries

WebAssembly 実行用 gem。

Ahoy Email: Email Analytics for Rails

メールアナリティックス用 gem。送信・開封・クリック履歴、UTM タグ付けなどの機能付き。

Transproc: Transform Ruby Objects in Functional Style

proc を関数型っぽく書く gem。

A Bare Bones Starter Project for Sinatra Apps

Sinatra アプリの初期プロジェクト。clone して拡張していくもの。

pg_search: Build ActiveRecord Named Scopes using Postgres's Full Text Search

PostgreSQL 全文検索の複雑な SQLscope を生やしてくれる gem。なお Solr が提供してくれる機能もいくつか実装してる。 ü などの発音区別符号を無視する機能とか。