rastam on rails

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

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

rubyweekly.com

Highlights

Exploring Big-O Notation with Ruby

O 記法の解説。

Error Handling with Monads in Ruby

エラー処理の歴史と、モナドの実装例。

  1. 最初は GOTO で。
  2. GOTO が追いづらくなってたから、エラーを表す戻り値を返す関数や、エラー状態を表すグローバル変数に。
  3. 例外誕生。
  4. 例外は制御構造として悪用されるようになり、モナド誕生

実装例は

  1. Dry::Monads のブロック表記で初期実装。
  2. do 表記にリファクター。
  3. ActiveRecord など外部リソースへの呼び出し箇所を Try でラッピング。

Articles & Tutorials

How to Pass Arguments to Methods in Ruby and How It Affects Their Arity

メソッド引数まとめ。

  • hoge(**args) 不特定多数の引数。
  • hoge(*) 不特定多数だが使われない引数。
  • hoge(**nil) キーワード引数がない宣言(Ruby 2.7 以降)
  • 各種引数の arity を記事内で羅列

Deploying a Rails 6 App with Dokku

Heroku みたいなデプロイができる、セルフホスティングRails 6 アプリを Dokku で構築する手順。

Backward-Compatible Database Migrations

破壊的な migration を 2 段階でデプロイすることを怠った失敗談。

  1. rename_column migration をコードレビューで見落としてしまった。
  2. その上に、長時間の migration をマージしてしまった。
  3. デプロイ中に migration が走っている 10 分もの間に、rename されたカラムを参照しているコードがエラってしまい、数百人ものユーザがログインできなくなった。

今後の未然防止策

  • migration があった場合はレビューを催促する CI スクリプト設置
  • db/**/**CODEOWNER をデータチームで設定。DB ファイルを触るコミットが入ったらデータチーム宛に通知が飛ぶように。
  • strong_migrations 検討中。

Handling and Customizing Ruby 2.7 Deprecation Warnings

Ruby 2.7 の deprecation を Sentry に飛ばしてくれる、コア RubyWarning モジュールのオーバーライド。

このオーバーライドを楽にしてくれる ruby-warning gem は 2 週間前の Ruby Weekly で紹介されている。

What Kinds of Rails Tests I Write and What Kinds I Don't

Rails with Jason ポッドキャストの Jason Swett 先生が基本的に書いているテストは

書かないテストは

  • controller spec、request spec。コントローラのコードは最低限に抑えるべきだから。
  • view spec、routing spec。feature spec でカバーできてるから。

Lambdas Are Better Than Procs

proc よりも lambda を使うべきだという主張。

  • 引数間違えたら lambda がエラーを投げてくれる。
  • lambda 内の return は外部ブロックを return しない。
  • lambda の見た目はメソッドに似てて、誤解を招かない。

Pay No Attention: Behind the Magic of Ruby DSLs

Active AdminDSL のソースを潜った結果、instance_execmethod_missing を知り得たエンジニアの話。

Gemifying Your Style Guide to DRY Your CSS

Ombu Labs 社全プロダクトの UI を統一させるために、スタイルガイドと CSSRails engine として gem 化した話。

Code and Tools

ruby_detective: Investigating Your Ruby Code Dependencies

クラスの依存関係グラフを描画してくれる gem。

tty-exit: Human-Friendly Terminal Exit Codes

読みやすい API で終了ステータスを返してくれる gem。

Counter Culture: 'Turbo-Charged' Counter Caches for Rails Apps

Railscounter_cache カラムを提供してくれる gem。Rails と違うのは

  • アソシエーションを直接結んでるモデルだけでなく、そのさらに先のモデルのキャッシュカラムも作れる。
  • レコード数だけでなく、任意の集計もキャッシュできる。
  • など。

Ruby/Git: A git Wrapper for Use from Ruby

git コマンドを呼ぶ DSL を提供してくれる gem。

OctoLinker: Links Together What Belongs Together in GitHub Repos

GitHub 上コードの requireinclude 文を該当ソースファイルへのリンクに変換してくれるブラウザー拡張。

ParallelTests: 2 CPUs = 2x Testing Speed for RSpec, Test::Unit and Cucumber

テスト並列実行用 gem。