rastam on rails

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

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

rubyweekly.com

Highlights

Ruby 3.0.2 Released (plus 2.7.4 and 2.6.8)

Security Fix あり。バージョンアップしましょう。

Understanding Factory Bot Syntax by Coding Your Own Factory Bot

オレオレ FactoryBot を実装してみることで FactoryBot の仕組みを理解する。deepL で翻訳できる記事もあれば、おまけに動画もある。

動画は TDD で実装してるスクリーンキャスト。TDD に興味がある人や、英語リスニングに自信がある人はぜひ。

Articles & Tutorials

The Shortest Path to Get Set Up with Automated Accessibility Testing in Rails

RSpec + axe gem で a11y テストを自動化した実装例アプリ。

Under The Hood of the includes Method in Rails

includes vs preload vs eager_load

Code & Tools

Fisk: A Pure Ruby x86-64 Assembler

ActiveRecord のメンテナーの tenderlove 先生が Ruby で実装したアセンブラー。

Heroku Database Connection Calculator

Heroku の必要な DB コネクション数を計算してくれるツール。

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

rubyweekly.com

Highlights

The History of RSpec

RSpec 作成者が gem の経歴を振り返った。

  • 2001 年に TDD を教えてた仕事がそもそものきっかけ。
  • XUnit 表記は分かりづらかった(actual・expected 引数の順番が直感的じゃなかった)から、授業で使える DSL 作った。
  • Bob Martin 先生の名言「Testing is about specification not verification」をもとに RSpec と名付けた。
  • 実務では Test::Unit 使うべきだと信じてたから gem 化しなかった。
  • RubyConf 2005 にやっと gem としてリリースしてみた。意外とバズった。
  • 2006 年に David Chelimsky 先生がコントリビューターとして参戦。

Articles & Tutorials

The Five Rules of Simple RSpec Tests

RSpec のベストプラクティス集。

Some Useful Active Support Features You May Not Have Heard Of

知られざる ActiveSupport 便利機能。

  • Callbacks
  • Configurable
  • CurrentAttributes
  • MessageVerifier
  • MessageEncryptor

Start With High-Level Tests

TDD の際は高レベルテストから書け、というアドバイス

Three Ways To Avoid Duplicate Sidekiq Jobs

多数 Sidekiq ジョブの同時実行防止方法。

  • フラグで制御
  • キューにジョブが積まれてるか確認。
  • Sidekiq Enterprise に課金して sidekiq_options(unique_for:) 設定
  • sidekiq-unique-jobs gem(一部 Lua 言語で実装されてる)

ActiveJob の場合は

Top Ten git Tips and Tricks

役に立つ git 裏技。

  • 空コミット
  • ログを読みやすくする
  • 不要なローカルブランチを捨てる
  • git rebase などでうっかり消したコミット復元
  • 部分的 git add
  • git bisect 自動化

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

rubyweekly.com

Highlights

(Some of) What's Cooking in Rails 7

Rails 7 実装中機能。気になったのは:

  • 画像が全部デフォで lazy ロードするように設定できる
  • has_one :through アソシエーションも buildcreate できる
  • ActiveRecord カラム暗号化

Building a Component Library in Rails with Storybook

View Component を Storybook でプレビューする話。view_component_storybook gem で。

Basecamp's Employee Speech Policy Controversy

Basecamp 社内騒動。あれ以来は社員 1/3 退職しちゃった。

A 'trick' for Speeding up bundle install

MAKE="make --jobs $(sysctl -n hw.ncpu)" 環境変数を付けると、bundle install 並列実行で高速化できるらしい。

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

rubyweekly.com

Highlights

How to Build An App, Get Acquired by GitHub, Buy An App Back From GitHub and Then Sell It Again

Speaker Deck の経歴。

  • Ruby + ImageMagick で実装。
  • RubyConf で GitHub CEO に出会った。
  • GitHub に買収され、作成者が GitHub 社員となった。
  • GitHub では、(作成者に)メンテされてたが、あまり成長してなかった。
  • 作成者が GitHub から買収する決意をした。
  • GitHub は即刻、作成者が提案した値段よりも 90% 安く売ってくれた。なぜかというと、Microsoft 買収の話が決まってた。SlideShare を商品にしてる Microsoft に Speaker Deck を殺されたくなかったから。
  • 作成者は広告収入で運用費を一部賄ったが、コロナで広告収入 0。
  • 有料機能実装で初月から黒字化。
  • Box OutFlipper Cloud と同時に運営するのがストレスとなったから、Speaker Deck を売ることにした。

Articles & Tutorials

A VCR + WebMock "Hello World" Tutorial

VCR ようわからん人向けチュートリアル

Rails 7 Enables Scoping to Apply to All Queries

ActiveRecord.scoping メソッド知らなかった。

Code and Tools

Reform 2.6.0: Form Objects Decoupled From Models

フォームオブジェクトに特化した gem。nested attributes もいい感じにやってくれるらしい。

wt_activerecord_index_spy: Report Missing Database Indexes

あったほうがいいインデックスを検知してくれる gem。

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

rubyweekly.com

Highlights

Bringing Encrypted Attributes to Active Record Models

Rails に DB データ暗号化 PR が上がってる。Hey から抽出したものなので、近々マージされるのを期待できるかも?

Articles & Tutorials

Boring Breadcrumbs for Rails

gem なく、poro だけでパンクズ作る方法。綺麗な実装だと思った。

Rails: How to Reduce Friction at the Authorization Layer

Flipper Cloud が pundit の上に DSL 設けて認可周りを DRY にした話。

  • resourceful じゃなくなったのが気になる。God オブジェクトの Policy の責務がデカくなるのでは?
  • Response オブジェクトは特に意義なし。

ちょっとやりすぎ感はあったが、Flipper Cloud 独自のニーズには合ってるかも?今度 pundit 周りで悩んでたら、この記事見返すといいかも。

Nested Forms in Rails

細かい 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: 日本語サマリー

rubyweekly.com

Highlights

The Hidden Gems of Ruby's irb

$ irb
irb(main):001:0> IRB.send :easter_egg

実行すると面白いことが起きる。

Rails Design Patterns: The Big Picture

rails アプリでよく使うデザパタ。皆さんの大好きなサービスクラスとかフォームオブジェクトとかデコレータとか

Articles & Tutorials

Building a Redis-Based Rate Limiter

API の rate limit を超えないための仕組みを実装した話。〇〇秒後に expire するロックのレコードを Redis に登録することで。

オブジェクトの責務は綺麗に切り分けてるが、sleep しちゃってるのが気になる。キューとかに積んだほうがシンプルだろう。非同期でも OK であれば。

Simplifying Tests by Extracting Side-Effects

依存注入でテストのセットアップをシンプルにする話。

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

rubyweekly.com

Highlights

Adornable: A Way to Use Decorators on Ruby Methods

自分が認識してるデコレータとはかけ離れすぎていて使い道が見えない。

Articles & Tutorials

3 Tips to Tune Your VCR in Tests

不要な 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 ヘルパー。