rastam’s blog

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

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

職場の Slack の #ruby 窓で Ruby Weekly メルマガが毎週配信されます。その中から面白そうなものをピックアップして、日本語で簡単なサマリーを書くようにしています。そのサマリーをここでまとまさせていただきます。くだけた日本語で失礼いたします。

http://rubyweekly.com/issues/375rubyweekly.com

Highlights

Sniffer: Log and Analyze Outgoing HTTP Requests

Net::HTTP、Typhoeus などの HTTP リクエストを JSON でロギングしてくれる gem。

How David Heinemeier Hansson, Creator of Rails, Works

DHH いろいろ。

  • 元々はプログラミングに興味がなかった。
  • 高校で運営していたゲームレビューサイトが数千もの読者がいた。
  • サイトの機能追加で PHP 覚えた。
  • ブログ上の PHP 相談で Jason Fried と知り合い、37Signals 入社。
  • 好きなエディターは TextMate
  • 趣味は写真、機械式腕時計、自動車競技、旅行。
  • 時間節約の裏技は、依頼をほとんど断ること。
  • 仕事は 4〜5 時間集中して、それ以上仕事しない。

Implementing a Worker Pool in Ruby

Celluloid、Concurrent Ruby のような Worker Pool パターンを TDD で一から実装してみた話。

  • ワーカー数上限が指定できる WorkerPool
  • メモリパンク防止用のジョブ数上限が指定できる SizedQueue
  • WorkerPool に注入できるスケジューリングアルゴリズム

How We Trick Bundler and Cause Interesting Bugs

Gemfile 内 gem の定期アップグレードを SaaS として提供してる depfu。各 gem のバージョンを上げる試行錯誤を繰り返し、互換性を検証する仕組み。ある日 ActiveSupport のバージョンアップでメモリパンクしちゃった。原因は bundler が依存関係を Array#combination で掛け合わせてるところ。配列の重複してる様子を排除する PR 出して緩和。

Clear Up Controllers and Models with the Waterfall Gem

Waterfall gem でコントローラのサービスオブジェクトをロールバック可能なチェーンで連携する活用例 2つ。

Are Comments A Code Smell? It Depends

コメントは必ずしもコードスメルだとは限らない、という主張。コメントは2種類ある:

  1. コードが何をしてるかの説明
  2. コードが何で必要かの説明
    • 書くべき

Tutorial

The Proxy Pattern in Ruby

プロキシパターン(別名サロゲートパターン)解説。

  • 重い処理をラッピングして遅延評価などで時間稼いでくれる活用例。
  • 認可層の活用例。
  • RPC での活用例。
  • メモ化用の活用例。

Using Vue.js with Rails

Rails アプリへの Vue.js 導入手順。

Postgres Primary/Replica Replication on Heroku with Rails

Octopus gem で Heroku の PostgreSQLレプリケーション実装手順。

Using Postgres's Advisory Locks from Ruby

PostgreSQL の Advisory Lock 解説。テーブルロック・行ロックと違って、DB 層ではなくアプリ層で管理。例えば、バックグラウンドジョブのワーカーだけでロックをかけても、UI からの CRUD 操作ではロックがかからない。

  • ロック作成、確保、解除
  • トランザクションロック vs セッションロック
  • ロック管理用 Ruby モジュール実装例

Flippin' Features at Runtime

フィーチャーフラグ用 Flipper gem の新機能。

  • 初期設定のデフォ
  • Flipper クラスメソッドからシングルトンのインスタンスへデリゲート
  • get_all preload_all で全フィーチャーフラグ取得
  • フィーチャーフラグ import 機能
  • redis、ActiveSupport キャッシュ用アダプター追加
  • flipper-api gem でフィーチャーフラグを HTTP API

Refactoring with Hash Defaults

Hash の デフォ値設定方法。

  • Hash.new
  • Hash#default
  • Hash#default_proc

case 文を Hash でリファクターすることも提案してる。

Atom Tricks, Plugins and Shortcuts for Ruby Developers

Rubyist 向け Atom パッケージ、キーボードショートカット、スニペットなど。

Getting Started with Faktory

3 週間前にリリースされた Faktory バックグラウンドジョブシステムのインストール手順。

Opinion

On Sustainable Testing

ちゃんと書かれた describe 文を推薦する RSpec コアチーム方針への反論。メンテされなくなると。なぜならプログラマーがメンテしたいのは書くのが楽しい、カスタムマッチャーを活かした、テストコードを読むだけでもわかる spec。

出力が読みづらいという指摘を覆す例も挙げた。

Code

Rackula: Generate A Static Site from any Rack Middleware

RailsSinatra などから静的コピーを生成してくれる Rack ミドルウェア

frappe_charts: Generate Frappé Charts from Your Rails Apps

SVG チャート生成ライブラリー Frappé Charts をラップした gem。

Karafka 1.1: Work with the Kafka Streaming Platform from Ruby

Kafka + Ruby アプリ用 MVC フレームワーク Karafka 1.1.0 リリース。