Ruby Weekly #363: 日本語サマリー
職場の Slack の #ruby 窓で Ruby Weekly メルマガが毎週配信されます。その中から面白そうなものをピックアップして、日本語で簡単なサマリーを書くようにしています。そのサマリーをここでまとまさせていただきます。くだけた日本語で失礼いたします。
Highlights
Ruby 並行処理まとめ
- プロセス。多数コア使えるが、fork が重い。
- スレッド。プロセスより軽量だが、管理が複雑。競合状態防止とかの。
- EventMachine gem。スレッド管理してくれるが、コールバックが複雑。
- Fiber。EventMachine のコールバックを隠してくれる。
並行処理方式 | サーバ例 | バックグラウンドジョブ例 |
---|---|---|
プロセス | Unicorn | Resque |
スレッド | Puma | Sidekiq |
EventMachine | Goliath | AMQP |
この 5 メソッド活かそうぜ!
Object#tap
Array#bsearch
Enumerable#flat_map
- ブロック付き
Array.new
<=>
Ruby の紛らわしい 6 機能
[]
メソッド。Array にも Hash にも String にも Proc・lambda にも付いてて諸悪の根源だと筆者が主張。%
演算子。剰余演算子にもなれば、文字列のフォーマット演算子にもなる。Integer#zero?
メソッド。== 0
のほうが無難。$数字
グローバル変数。Time.parse
。不正な文字列渡しても、不正な部分だけTime.now
で埋め込んじゃうという時限爆弾。Delegator
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
ActiveRecord トリック 5 点
join
の条件はscope
をmerge
しようjoin
は普段INNER JOIN
になるんだが、ネストするとLEFT OUTER JOIN
になることもあるので要注意EXISTS
、NOT EXISTS
は便利メソッドで- サブクエリは
pluck
悪用せずに ActiveRecord に任せよう to_sql
、explain
活かそう
News
Passenger 5.1.8 Released: Nginx 1.12.1, Webpacker, and Fixes
Passenger 5.1.8 リリース
- apt-get パッケージがやっとバージョンアップ(1.10.3 以降はできてなかった)
- webpacker 対応
- 冗長なログが見やすく
Tutorial
Factory と Fixture の力を合わせて外部 API を擬似化。eBay の巨大 XML レスポンスを例に挙げた。XML の Fixture を Factory に読み込み、Hash に変換。
Ruby コアのスレッド間データ通信クラスまとめ。Queue#push
でデータを積むと、別スレッドの Queue#pop
でそのデータが取得できる。上限付きキューは SizedQueue
で。
Adding Token Based Auth to a Rails API with Devise Token Auth
Devise Token Auth gem で Rails API のトークンベース認証を実装する手順。
Hanami のレビュー。
- Generator 完備
- Migration 完備
- Shotgun gem で code reloading 完備
- モデル層が Entity と Repository に分かれてる
- コントローラ層は 1 アクション = 1 クラス
- ビュー層は Template と View に分かれてる
感想
- 😄 アーキテクチャ構造が整理整頓
- 😢 ドキュメンテーション不足
- 😢
db:seeds
がない - 😢
belongs_to
has_one
がない(先週発表したように v1.1.0β1 ではリリース済み)
Rails 5.1 で AJAX を使う方法 3 通りとそれぞれの導入手順。
===
いろいろ
- クラス・モジュールを被演算子にした場合は
kind_of?
- 正規表現を被演算子にした場合は
=~
Range
を被演算子にした場合はその範囲内Proc
を被演算子にした場合はcall
- それ以外のオブジェクトを被演算子にした場合は
==
Tools
Ruby Tests Profiling Toolbox: Tools to Analyze Test Suite Performance
先週にも紹介された TestProf メトリックス計測ツール群。
Code
clone、カスタマイズ用の Sinatra + GraphQL 骨組みアプリ。Trailblazer、Apollo、React も込み。
ファジーマッチング用 gem。類似比較で使えるハッシュ値を生成してくれる。
ActiveRecord ログの SQL にコントローラやアクションなどのコメントを添える gem。Basecamp 作品。
ジオコーディング用 gem。住所で経度・緯度を算出し、その逆の照合も可能。