Ruby Weekly #487: 日本語サマリー
Highlights
O 記法の解説。
エラー処理の歴史と、モナドの実装例。
実装例は
- Dry::Monads のブロック表記で初期実装。
- do 表記にリファクター。
- 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 を記事内で羅列
Heroku みたいなデプロイができる、セルフホスティングの Rails 6 アプリを Dokku で構築する手順。
破壊的な migration を 2 段階でデプロイすることを怠った失敗談。
rename_column
migration をコードレビューで見落としてしまった。- その上に、長時間の migration をマージしてしまった。
- デプロイ中に migration が走っている 10 分もの間に、rename されたカラムを参照しているコードがエラってしまい、数百人ものユーザがログインできなくなった。
今後の未然防止策
- migration があった場合はレビューを催促する CI スクリプト設置
db/**/**
の CODEOWNER をデータチームで設定。DB ファイルを触るコミットが入ったらデータチーム宛に通知が飛ぶように。- strong_migrations 検討中。
Ruby 2.7 の deprecation を Sentry に飛ばしてくれる、コア Ruby の Warning
モジュールのオーバーライド。
このオーバーライドを楽にしてくれる ruby-warning gem は 2 週間前の Ruby Weekly で紹介されている。
Rails with Jason ポッドキャストの Jason Swett 先生が基本的に書いているテストは
- モデルの単体テスト
- 受け入れテスト(feature spec)
書かないテストは
- controller spec、request spec。コントローラのコードは最低限に抑えるべきだから。
- view spec、routing spec。feature spec でカバーできてるから。
proc
よりも lambda
を使うべきだという主張。
- 引数間違えたら
lambda
がエラーを投げてくれる。 lambda
内のreturn
は外部ブロックをreturn
しない。lambda
の見た目はメソッドに似てて、誤解を招かない。
Active Admin の DSL のソースを潜った結果、instance_exec
と method_missing
を知り得たエンジニアの話。
Ombu Labs 社全プロダクトの UI を統一させるために、スタイルガイドと CSS を Rails engine として gem 化した話。
Code and Tools
クラスの依存関係グラフを描画してくれる gem。
読みやすい API で終了ステータスを返してくれる gem。
Counter Culture: 'Turbo-Charged' Counter Caches for Rails Apps
Rails の counter_cache
カラムを提供してくれる gem。Rails と違うのは
- アソシエーションを直接結んでるモデルだけでなく、そのさらに先のモデルのキャッシュカラムも作れる。
- レコード数だけでなく、任意の集計もキャッシュできる。
- など。
git コマンドを呼ぶ DSL を提供してくれる gem。
OctoLinker: Links Together What Belongs Together in GitHub Repos
GitHub 上コードの require
や include
文を該当ソースファイルへのリンクに変換してくれるブラウザー拡張。
ParallelTests: 2 CPUs = 2x Testing Speed for RSpec, Test::Unit and Cucumber
テスト並列実行用 gem。