Ruby Weekly #459: 日本語サマリー
Highlights
regexp-examples: Generate Strings That Match a Given Regular Expression
正規表現に一致する文字列を生成する gem。Regexp
に #examples
#random_example
メソッドを生やす。
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
メンテされなくなった PJAX を Turbolinks に移行した Honeybadger 社の注意点。
- Turbolinks は SPA なので、遷移するたびに、ロードしたものをアンロードする必要がある
- 破壊的リクエストを発行するたびにキャッシュをクリアする必要がある
- 遷移した時点の DOM がその状態のままでキャッシュされるから、またそのページに戻ったら状態が初期化されてない覚悟を
<body>
内 JS を全部削除しないと、遷移するたびに実行されちゃう- 外部ライブラリを JS モジュールでインポートすること
- デプロイを跨いだ遷移は古い JS・CSS に依存したままなので、
data-turbolinks-track
属性で強制リロード
Rails ビューで Date
Time
の #strftime
を直接呼ぶのをやめようという主張。 %Y-%m-%d
表記が読みにくいから。 #to_s(:symbol)
で書こうと。 :symbol
は Rails デフォのものからも選べれば、 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 から呼んだ話。
既存 Rails アプリに devise_token_auth gem を導入する手順。
SQL コメントを書く ActiveRecord::Relation#annotate
が Rails 6 に登場。
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
定期イベントを表すオブジェクト用 gem。オブジェクトをシリアライズすることで永続化できる。
WebAssembly 実行用 gem。
メールアナリティックス用 gem。送信・開封・クリック履歴、UTM タグ付けなどの機能付き。
proc を関数型っぽく書く gem。
Sinatra アプリの初期プロジェクト。clone して拡張していくもの。
pg_search: Build ActiveRecord Named Scopes using Postgres's Full Text Search
PostgreSQL 全文検索の複雑な SQL 用 scope
を生やしてくれる gem。なお Solr が提供してくれる機能もいくつか実装してる。 ü
などの発音区別符号を無視する機能とか。