Ruby Weekly #375: 日本語サマリー
職場の Slack の #ruby 窓で Ruby Weekly メルマガが毎週配信されます。その中から面白そうなものをピックアップして、日本語で簡単なサマリーを書くようにしています。そのサマリーをここでまとまさせていただきます。くだけた日本語で失礼いたします。
Highlights
Net::HTTP、Typhoeus などの HTTP リクエストを JSON でロギングしてくれる gem。
DHH いろいろ。
- 元々はプログラミングに興味がなかった。
- 高校で運営していたゲームレビューサイトが数千もの読者がいた。
- サイトの機能追加で PHP 覚えた。
- ブログ上の PHP 相談で Jason Fried と知り合い、37Signals 入社。
- 好きなエディターは TextMate。
- 趣味は写真、機械式腕時計、自動車競技、旅行。
- 時間節約の裏技は、依頼をほとんど断ること。
- 仕事は 4〜5 時間集中して、それ以上仕事しない。
Celluloid、Concurrent Ruby のような Worker Pool パターンを TDD で一から実装してみた話。
- ワーカー数上限が指定できる
WorkerPool
- メモリパンク防止用のジョブ数上限が指定できる
SizedQueue
WorkerPool
に注入できるスケジューリングアルゴリズム
Gemfile 内 gem の定期アップグレードを SaaS として提供してる depfu。各 gem のバージョンを上げる試行錯誤を繰り返し、互換性を検証する仕組み。ある日 ActiveSupport のバージョンアップでメモリパンクしちゃった。原因は bundler が依存関係を Array#combination
で掛け合わせてるところ。配列の重複してる様子を排除する PR 出して緩和。
Waterfall gem でコントローラのサービスオブジェクトをロールバック可能なチェーンで連携する活用例 2つ。
コメントは必ずしもコードスメルだとは限らない、という主張。コメントは2種類ある:
Tutorial
プロキシパターン(別名サロゲートパターン)解説。
- 重い処理をラッピングして遅延評価などで時間稼いでくれる活用例。
- 認可層の活用例。
- RPC での活用例。
- メモ化用の活用例。
Octopus gem で Heroku の PostgreSQL 上レプリケーション実装手順。
PostgreSQL の Advisory Lock 解説。テーブルロック・行ロックと違って、DB 層ではなくアプリ層で管理。例えば、バックグラウンドジョブのワーカーだけでロックをかけても、UI からの CRUD 操作ではロックがかからない。
フィーチャーフラグ用 Flipper gem の新機能。
- 初期設定のデフォ
Flipper
クラスメソッドからシングルトンのインスタンスへデリゲートget_all
preload_all
で全フィーチャーフラグ取得- フィーチャーフラグ
import
機能 - redis、ActiveSupport キャッシュ用アダプター追加
- flipper-api gem でフィーチャーフラグを HTTP API に
Hash の デフォ値設定方法。
Hash.new
Hash#default
Hash#default_proc
case
文を Hash でリファクターすることも提案してる。
Rubyist 向け Atom パッケージ、キーボードショートカット、スニペットなど。
3 週間前にリリースされた Faktory バックグラウンドジョブシステムのインストール手順。
Opinion
ちゃんと書かれた describe
文を推薦する RSpec コアチーム方針への反論。メンテされなくなると。なぜならプログラマーがメンテしたいのは書くのが楽しい、カスタムマッチャーを活かした、テストコードを読むだけでもわかる spec。
出力が読みづらいという指摘を覆す例も挙げた。
Code
Rails、Sinatra などから静的コピーを生成してくれる Rack ミドルウェア。
SVG チャート生成ライブラリー Frappé Charts をラップした gem。
Karafka 1.1: Work with the Kafka Streaming Platform from Ruby