rastam’s blog

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

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

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

rubyweekly.com

Highlights

An Introduction to Concurrency Models in Ruby

Ruby 並行処理まとめ

  • プロセス。多数コア使えるが、fork が重い。
  • スレッド。プロセスより軽量だが、管理が複雑。競合状態防止とかの。
  • EventMachine gem。スレッド管理してくれるが、コールバックが複雑。
  • Fiber。EventMachine のコールバックを隠してくれる。
並行処理方式 サーバ例 バックグラウンドジョブ例
プロセス Unicorn Resque
スレッド Puma Sidekiq
EventMachine Goliath AMQP

Five Ruby Methods You Should Be Using

この 5 メソッド活かそうぜ!

  1. Object#tap
  2. Array#bsearch
  3. Enumerable#flat_map
  4. ブロック付き Array.new
  5. <=>

Some Confusing Features in Ruby

Ruby の紛らわしい 6 機能

  1. [] メソッド。Array にも Hash にも String にも Proc・lambda にも付いてて諸悪の根源だと筆者が主張。
  2. % 演算子剰余演算子にもなれば、文字列のフォーマット演算子にもなる。
  3. Integer#zero? メソッド。== 0 のほうが無難。
  4. $数字 グローバル変数
  5. Time.parse。不正な文字列渡しても、不正な部分だけ Time.now で埋め込んじゃうという時限爆弾。
  6. Delegator

Spree 3.3 Released: A Rails-Based E-Commerce System

OSS の EC サイト用 Rails アプリ Spree 3.3 リリース

Using ActionCable and RethinkDB to Build a Reactive WebSocket App

ActionCable + RethinkDB でスプレッドシート実装。 RethinkDB の ORM として NoBrainer gem 採用。

  • 各ユーザの選択中セルの枠に違う色を付けて Publish
  • セルの中身を永続化して Publish
  • 編集中セルにロックをかけて Publish

Five Quick Active Record Query Tricks

ActiveRecord トリック 5 点

  1. join の条件は scopemerge しよう
  2. join は普段 INNER JOIN になるんだが、ネストすると LEFT OUTER JOIN になることもあるので要注意
  3. EXISTSNOT EXISTS は便利メソッドで
  4. サブクエリは pluck 悪用せずに ActiveRecord に任せよう
  5. to_sqlexplain 活かそう

News

Passenger 5.1.8 Released: Nginx 1.12.1, Webpacker, and Fixes

Passenger 5.1.8 リリース

  • apt-get パッケージがやっとバージョンアップ(1.10.3 以降はできてなかった)
  • webpacker 対応
  • 冗長なログが見やすく

Tutorial

Factories or Fixtures? Give Me Both

Factory と Fixture の力を合わせて外部 API を擬似化。eBay の巨大 XML レスポンスを例に挙げた。XML の Fixture を Factory に読み込み、Hash に変換。

Managing Threads with Queue and SizedQueue

Ruby コアのスレッド間データ通信クラスまとめ。Queue#push でデータを積むと、別スレッドの Queue#pop でそのデータが取得できる。上限付きキューは SizedQueue で。

Adding Token Based Auth to a Rails API with Devise Token Auth

Devise Token Auth gem で Rails APIトークンベース認証を実装する手順。

A Review of the Hanami Web Framework

Hanami のレビュー。

アーキテクチャ

  • Generator 完備
  • Migration 完備
  • Shotgun gem で code reloading 完備
  • モデル層が Entity と Repository に分かれてる
  • コントローラ層は 1 アクション = 1 クラス
  • ビュー層は Template と View に分かれてる

感想

How to Make AJAX Calls in Rails 5.1

Rails 5.1 で AJAX を使う方法 3 通りとそれぞれの導入手順。

  1. rails-ujs(jQuery なし)
  2. jQuery
  3. axios

The === (Case Equality) Operator in Ruby

=== いろいろ

  • クラス・モジュールを被演算子にした場合は kind_of?
  • 正規表現を被演算子にした場合は =~
  • Range を被演算子にした場合はその範囲内
  • Proc を被演算子にした場合は call
  • それ以外のオブジェクトを被演算子にした場合は ==

Tools

Ruby Tests Profiling Toolbox: Tools to Analyze Test Suite Performance

先週にも紹介された TestProf メトリックス計測ツール群。

Code

sinatra-graphql: A Sinatra and GraphQL Starter Kit

clone、カスタマイズ用の Sinatra + GraphQL 骨組みアプリ。Trailblazer、Apollo、React も込み。

tlsh: Trend Micro Locality Sensitive Hash Library

ファジーマッチング用 gem。類似比較で使えるハッシュ値を生成してくれる。

Marginalia: Attach Comments to ActiveRecord's SQL Queries

ActiveRecord ログの SQL にコントローラやアクションなどのコメントを添える gem。Basecamp 作品。

Zammad: A Web-Based Open Source Customer Support System

OSS カスタマーサポート用 Rails アプリ。

Geocoder: A Complete Ruby Geocoding Solution

ジオコーディング用 gem。住所で経度・緯度を算出し、その逆の照合も可能。