Ruby Weekly #544: 日本語サマリー
Highlights
Rails に DB データ暗号化 PR が上がってる。Hey から抽出したものなので、近々マージされるのを期待できるかも?
Articles & Tutorials
gem なく、poro だけでパンクズ作る方法。綺麗な実装だと思った。
Flipper Cloud が pundit の上に DSL 設けて認可周りを DRY にした話。
- resourceful じゃなくなったのが気になる。God オブジェクトの Policy の責務がデカくなるのでは?
- Response オブジェクトは特に意義なし。
ちょっとやりすぎ感はあったが、Flipper Cloud 独自のニーズには合ってるかも?今度 pundit 周りで悩んでたら、この記事見返すといいかも。
細かい gotcha の多い nested forms 用の神チートシート。今度 nested forms 実装したら絶対役に立ちそう。
Sharing Common Code Between Rails Controllers with the Scoped Concern Pattern
Basecamp が nested resources で使ってる controller concerns の Scoped パターン。
Ruby Weekly #541: 日本語サマリー
Highlights
$ irb irb(main):001:0> IRB.send :easter_egg
実行すると面白いことが起きる。
rails アプリでよく使うデザパタ。皆さんの大好きなサービスクラスとかフォームオブジェクトとかデコレータとか
Articles & Tutorials
API の rate limit を超えないための仕組みを実装した話。〇〇秒後に expire するロックのレコードを Redis に登録することで。
オブジェクトの責務は綺麗に切り分けてるが、sleep しちゃってるのが気になる。キューとかに積んだほうがシンプルだろう。非同期でも OK であれば。
依存注入でテストのセットアップをシンプルにする話。
Ruby Weekly #540: 日本語サマリー
Highlights
自分が認識してるデコレータとはかけ離れすぎていて使い道が見えない。
Articles & Tutorials
不要な cassette を特定しやすくしてくれる vcr 設定。これ設定してみたいかも。
Don't Wrap Instance Variables in attr_reader Unless Necessary
外から呼ばなくていいインスタンス変数は attr_reader
つけなくていい、というのは賛成する派ですね。
Tip: Use Rails' link_to_unless_current for Your Navigation Links
表示中画面 以外 のリンクを張ってくれる link_to_unless_current
ヘルパー。
Ruby Weekly #507: 日本語サマリー
Highlights
Building GitHub-Style 'Hovercards' with Stimulus and HTML-Over-The-Wire
Stimulus で Hovercard 機能実装手順。
- ビューに
data
属性埋め込む - どんな Hovercard でも取得できる汎用化 Stimulus コントローラ実装。
- Rails コントローラ・ビュー実装。
- Hovercard 吹き出しの尻尾を CSS で実装。
Factory Bot 6.0: A Library for Setting Up Ruby Objects as Test Data
enum
用 traits_for_enum
機能が追加された Factory Bot。
Rails セキュリティパッチ。
静的ウェブページをクローリングする場合
SPA などの動的ウェブページは、Kimurai フレームワーク + Selenium Chrome。
AWS の SDK v2 は 2021 年 11 月サポート終了。
Articles & Tutorials
PostgreSQL での JOIN テーブル作成。
- HABTM、
create_join_table
migration は非推奨。PK なしの拡張しづらいテーブルを作ってしまうから。 - 複合インデックス 1 つだけで十分。
Enumerable#select
+ Enumerable#map
= Ruby 2.7 の Enumerable#filter_map
。
メンテされなくなった apartment gem から activerecord-multi-tenant に移行する手順。おまけに Carrierwave 添付画像の移行手順。
処理失敗時の再実行方法まとめ。
retry
キーワード- retriable gem
- Sidekiq や Resque の retry 設定
- 各ツールの独自エラー処理
CockroachDB の ActiveRecord アダプター。
7 つの CRUD アクション以外のアクションを生やすと、名詞_動詞
のキモいパスヘルパーができてしまう。ネストしたリソース切ろというヒントでもある。
Code and Tools
配列や ActiveRecord オブジェクトから CSV を生成してくれる gem。
EBNF パース用 gem。
Ruby Weekly #505: 日本語サマリー
Highlights
サーバに特化した Fullstaq Ruby に移行した mkdev 社。メモリ使用率はそんなに変わってないが、激しく変動してたのが安定になった。アラート閾値超えなくなった。
米黒人暴行死の騒動で RuboCop 改名案の issue が挙がった。ユーザへの影響と工数が見合わないなどの理由を挙げたメンテナーは issue を閉じたが、その後も炎上した挙句、issue をロックすることに余儀なくされた。
GitHub アカウントを持っているなら誰でも投稿できる Ruby コミュニティブログ。Ruby Weekly のネタもここから。
テスト並列実行用 gem。
Articles & Tutorials
メタプロの使い道まとめ。
- モンキーパッチ
- マクロ
- DSL
- シングルトンクラス
- 動的メソッド定義
Refinement 解説。
- モンキーパッチより影響範囲が限られてる
- スコープは同一ファイル内 or 同一モジュール内 or 同一クラス内
JavaScript をほとんど書いてない ActionCable アプリを CableReady で実装した話。チャンネル定義が唯一の JS ファイル。
Code and Tools
シンタックスを必要最低限に抑えたテストフレームワーク gem。
Rails + Sidekiq + Puma + PostgreSQL + nginx 用 Ansible プレイブック。
redis クライアント用 gem。
正規表現パース用 gem。
Active Record SQL Server Adapter 6.0: The SQL Server Adapter for Rails
ActiveRecord の SQL Server アダプター用 gem。
XML 生成用 gem。
Amazing Print 1.2: Pretty Print Your Ruby Objects with Style
インデント・色付き出力で puts してくれる gem。
タスクを依存順に実行してくれるワークフローエンジン gem。並列実行できるタスクは並列実行。
Ruby Weekly #503: 日本語サマリー
Highlights
Rubocop ユーザ調査結果。多くは
- シングルコーテーション使う
- 1 行 120 文字まで
- 配列・ハッシュ末尾に
,
付けない and
or
を一切使わない!!
を boolean 変換だけで使う- ハッシュ内にスペースを空ける
Kernel
系メソッドは()
を使わないCyclomaticComplexity
cop が役に立つ- Rubocop のデフォ設定がまあまあ満足
大量の ActiveRecord を高速削除してくれる gem。
Rust で gem を作る手順。
Articles & Tutorials
同一レコードの多重 SELECT を減らす方法解説。ActiveRecord::Associations::Association#target
を設定することで lazy load を阻止する。
From 25 Minutes to 7 Minutes: Improving the Performance of a Rails CI Pipeline
Gusto 社の CI 高速化戦略。
- flaky テストを skip して担当者に解消してもらった
- RSpec デフォに戻した(テスト順番ランダム化、Rails の autoloader 採用、テスト間依存断絶)
- 2 分以上かかるテストを skip して担当者に軽量化してもらった
- 各テストの実行時間を DB に保存して knapsack gem で均等に並列実行
JWT トークンなどとして使える、Rails 6.1 の signed_id
。
Rails バージョンアップの 2 戦略のメリデメ比較。
- 新規バージョン用ブランチ
- デュアルブート
筆者はデュアルブート推奨。
メモ化の解説。
マルチテナント実装方法 3 通りの比較。
- テナント識別用 FK
- テナントごとに専用テーブル作成
- テナントごとに専用 DB 作成
Code and Tools
pry-rescue: Start a Pry Session Whenever Something Goes Wrong
例外発生時に pry で入るための gem。
DynamoDB 用 ORM gem。
webmention-client-ruby: A Ruby Gem for Sending Webmention Notifications
ウェブメンション送信用 gem。
PostgreSQL 監視用ダッシュボード。
Ruby Weekly #501: 日本語サマリー
Highlights
RubyGems は TruffleRuby でもテストが全て通るようになった。他に全部通ってるのは MRI だけ。JRuby でもテストしてるが、一部スキップせざるを得ない。
Rails 6 が Webpacker になったのにもかかわらず Sprockets を維持してる理由。Webpacker が JS 経由で CSS・画像をインポートしてるのがキモイから。
Articles & Tutorials
RubyFann gem でニューラルネットワークを実装した話。
SHA-256 暗号化の各工程をアニメーションで表現する CLI。そして各工程の説明が README に載ってる。
- webdrivers gem はプラットフォームに合ったブラウザーの WebDriver を特定して用意してくれる。
- MiniTest から Capybara ヘルパーを呼ぶ。
- Capybara は selenium-webdriver を呼ぶ。
- selenium-webdriver は、webdrivers gem が特定したブラウザーの WebDriver を WebDriver プロトコールで呼ぶ。
- WebDriver がブラウザーを操作する。
ブラウザー | WebDriver |
---|---|
Chrome | chromedriver |
Firefox | geckodriver |
MS Edge | edgedriver |
Safari | safaridriver |
マルチスレッドで DB を叩いたら発生する ActiveRecord::ConnectionTimeoutError
の解消法。
- 終了したスレッドが connection を解放してくれないから、最後に
ActiveRecord::Base.clear_active_connections!
呼ぶこと。 - pool が足りるように
ワーカー数 * (スレッド数 + 1)
で設定。
docker コンテナ内のシステムテストをホストのブラウザで実行させる手順。筆者の Avdi Grimm 先生でも調べるのが大変だったらしい。
- webdrivers gem 削除。
- テストサーバノポート固定化。
- Capybara サーバ用環境変数を docker-compose.yml で設定。
- Capybara サーバ用環境変数を使うように test_helper.rb 設定。
ApplicationSystemTestCase
が remote ブラウザーを使うように設定。- ホストに chromedriver インストール・起動。
- docker コンテナ内でテスト実行。
Upgrading a Trivial Rails App from Ruby 2.3 to 2.7 and from Rails 4.2 to 6.0
簡易 Rails アプリを Ruby 2.3→2.7、Rails 4.2→6.0 にアップグレードした話。
- Ruby 2.3.1→2.3.8→2.4.10→2.5.8→2.6.3 のアップグレードは順調。
- Rails 4 から一気に 5.2 にアップグレードしたら痛い目に会った。4→5.0→5.1→5.2 のように、マイナーバージョンごとに deprecation 解消していくことがオススメ。
- Rails 6 へのアップグレードは、sqlite gem だけ追加する必要があった。
Code and Tools
暴走したシェルコマンドのせいで非同期ジョブのキューが停滞してしまった John Nunemaker 先生。posix-spawn gem に移行することでタイムアウトさせるようにできた。
Foreman だと pry への入力が見れない問題を解消してくれる pry-remote gem。