rastam’s blog

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

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

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

http://rubyweekly.com/issues/411rubyweekly.com

Highlights

Visualizing Ruby Execution

Ruby コードのロジックをフロー図に変換してくれる VisualizeRuby gem。

Changing the Way Ruby Creates Objects

.new メソッドをオーバーライドしてみた話。

  • #initialize 前にシングルトンクラスに対してモジュールを include
  • #allocate で子クラスにも include されるように。

Finding Where STDOUT/STDERR Debug Messages Are Coming From

Discourse デバッグ中の Sam Saffron 先生が STDERR モンキーパッチでエラー発生元を出力させた話。

Rails 5.2.1 Released

Rails 5.2.1 リリース!

How to Use Bundler in a Single-File Ruby Script

require 'bundler/inline'gemfile ブロックだけで、単独ファイルの Ruby スクリプトでも Bundler 使えちゃう。

First Beta of Hanami 1.3 Released

Hanami v1.3.0.beta1 リリース。v1.3.0 は 10 月リリース予定。

  • RSpec がデフォになった

Articles & Tutorials

Designing Services with dry-rb

dry-rb でサービスクラス実装。

  • Dry::Initializer で注入する依存性定義。
  • Dry::Validation で注入した依存性のルール定義。
  • Dry::MonadsSuccess Failure オブジェクトを返す。

Ruby 2.6's Dir#each_child and Dir#children Instance Methods

Ruby 2.5 の Dir.each_child Dir.children に該当する Dir#each_child Dir#children インスタンスメソッドが Ruby 2.6 で登場。

Improving Partial Loading Performance

partial パフォーマンス向上方法 2 つ。

  • bullet で N+1 クエリ検知・撲滅。
  • ビューからの SQL 発行を検知してくれる自前 concern。

How Can I Use Ruby 2.6 JIT?

JIT の紹介。

  • JIT とは、Ruby 稼働中によく呼ばれるメソッドの特定・コンパイル
    • メモリが倍ぐらいかかっちゃう
    • コンパイル完了までは重い
  • 今までの JIT 実装
    • JVMコンパイルを先にやるせいで、起動が重い
    • Rubinius などの JIT がいろいろ提案されてきたが、起動速度とメモリのせいで却下
  • 許容範囲内の保守性・起動速度・メモリを誇る MJIT は、いよいよ Ruby 2.6 で登場。
    • 稼働中にバックグラウンドで少しずつコンパイルすることで、起動は速くなるが、高速化するまでは時間がかかる
    • 現時点 Rails は重くなるだけ
    • MJIT はデフォ無効

Back to the Primitive. Testing with Simplicity

テストの期待値は、ヘルパーなどの戻り値ではなく、プリミティブにしようという主張。

Code & Tools

Paraspec: Parallel RSpec Test Runner

RSpec テスト並列実行用 gem。ファイル単位だけではなく spec 単位でも分散できる。

Groupdate: Group Temporal Data with Active Record, Simply

ActiveRecord や Enumerable を年、月、日付、曜日、時間などでグループしてくれる gem。

Xcode::Install: A Ruby Tool to Install and Update Xcode Versions

XCode 最新バージョンをインストールしてくれる CLI 用 gem。

TTY::Screen: Cross-Platform Terminal Screen Size Detection

ターミナルのサイズを検知してくれる gem。

capybara-screenshot: Automatically Save Screen Shots When a Capybara Scenario Fails

Capybara テストが落ちたらスクショを保存してくれる gem。