rastam on rails

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

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

rubyweekly.com

Highlights

HTTPX: A Ruby HTTP Library 'for Tomorrow'

HTTP/2 に対応した HTTP 通信用 gem。

A Quick Speed Update on Ruby 2.7 Preview 2

Ruby 2.7 preview 2 のベンチマーク結果、Ruby 2.6 とはパフォーマンスがそんなに変わらない。

Taming Large Rails Applications with Private ActiveRecord Models

ActiveRecord モデルを private にしたことでインタフェースを最小限に抑えた Grunt 社。モデルをモジュールの中に納めて private_constant で封印。外向けインタフェースはモジュールで実装。

Articles & Tutorials

Streaming Large ZIP Files in Rails

zip_tricks gem で巨大 ZIP ファイルを生成し、サーバのディスクに書き出さずにクライアントに直接ストリーミングする方法。あと、ヘッダーをうまく設定することで、ブラウザーの挙動をコントロールする方法。

9 Industries Where Flagship Companies Choose Ruby on Rails

Rails が採用されている 9 業界。

  1. 観光(AirbnbCouchsurfing
  2. 広報(Crazy EggBBDOAccenture
  3. SNSASKfmWe Heart ItGoodreads
  4. ソフトウェア開発(GitHubZendeskMicrosoft Yammer
  5. 人事(FiverrHelplingYellow Pages
  6. EC(ShopifyGrouponNedap
  7. 金融(BloombergKickstarterFundera
  8. 娯楽(NetflixHuluTwitch
  9. 不動産(SpacelistPrologis

Code and Tools

RubyCritic 4.2.0: Now With SimpleCov Support

静的解析でコード品質を評価してくれる RubyCritic gem の v4.2.0 リリース。

full_request_logger: Make Full Request Logs Accessible Via Web UI

リクエストログをブラウザー上で表示してくれる、Basecamp 作 gem。

Slate: Beautiful Static Documentation for Your API

APIドキュメンテーション用サイトを生成してくれる Middleman アプリ。

Invisible: Override Methods While Maintaining Their Original Visibility

privateprotectedpublic スコープを変えずにオーバーライドできるようにしてくれる gem。

Hashie 4.0: Classes and Mixins That Make Hashes More Powerful

Hash のデータ型制御、文字列キーでもシンボルキーでも参照できるように拡張してくれる gem。

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

rubyweekly.com

Highlights

Ruby 2.7.0 Preview 2 Released

Ruby 2.7.0 Preview 2 リリース。

  • メモリをデフラグしてくれる GC
  • パターンマッチング
  • 複数行編集可能な irb
  • ハッシュ→キーワード引数自動変換の deprecation

Fun with each_with_object and Other Enumerator Adventures

[1, 2, 3].each_with_object(arg).map(&:my_method)my_methodarg を渡す裏技解説。

The Annual Fukuoka Ruby Award Competition is Back

10/9〜12/11 開催の フクオカ Ruby 大賞募集。

Rails 6.0 New Framework Defaults: What They Do and How to Safely Uncomment Them

Rails 6 バージョンアップ時の rails app:update で生成される新規フラグの解説。

Articles & Tutorials

Loading Additional Ruby Gems in Development

Gemfile に追加しなかった gem を手元で使う手順。

  1. Gemfile を読み込む手元用 Gemfile.private 作成。
  2. BUNDLE_GEMFILE 環境変数で Gemfile.private 指定。
  3. spring 設定。
  4. puma-dev、pow 設定。

Why to Use Active Support in Rails for Deprecation Messages

ActiveSupport::Deprecation.warn で deprecation する方法。

The Tools Rails 6 Introduced for Action Cable Testing.

Rails 6 にマージされた action-cable-testing gem の機能紹介。

Code and Tools

command_line: An Easier Way Execute Command Line Applications

CLI コマンド実行用 gem。stdin、stdout、終了ステータス用 DSL 付き。

Lowkiq: Ordered Background Jobs Processing

ジョブの実行順番を保証してくれる非同期処理ツール。

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

rubyweekly.com

Highlights

Ruby 2.7 to Deprecate Automatic Conversion of a Hash to Keyword Arguments

method({ k: 1 }) のハッシュ引数が method(k: 1) キーワード引数として評価されるのは Ruby 2.7 で deprecated になった。Ruby 3 では ArgumentError など発生するようになる。** で明示的に変換する必要が生じる method(**{ k: 1 })

The Minitest Style Guide

RuboCop メンテナー作 Minitest スタイルガイド。

Spree 4.0: The Rails-Based Ecommerce System

OSS EC サイト Spree v4.0 リリース。Rails 6 対応するようになった。

London Ruby Unconference 2019 on October 19

ロンドンのアンカンファレンス。カンファレンスと違って、トークはなく、参加者間のディスカッションというフォーマットらしい。

Articles & Tutorials

Save Your Links From Phishers

ActionView リンクをフィッシングから守ってくれるヘルパー。rel="nofollow"rel="noopener" 属性を付けることで Tabnabbing 脆弱性回避。

Fully Deleting User Data

GDPR 遵守のユーザデータ物理削除戦略。dependent: :destroy 漏れなどを防ぐために、テストで物理削除前後の各テーブルのレコード数を比較している Monolist 社

Code and Tools

RuboCop Meets Minitest

今までなかった RuboCop の Minitest 用拡張。

will_paginate 3.2: A Pagination library for Rails, Sinatra, and More

Ruby 2.7、Rails 6 対応の will_paginate v3.2 リリース。

Parallel: Parallel Processing Made Simple and Fast

並列実行用 parallel gem。

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

rubyweekly.com

Highlights

What's New in IRB in Ruby 2.7?

Ruby 2.7 の IRBシンタックスハイライトが実装された。

Ruby 2.6.5 Released (and 2.5.7, and 2.4.9)

Ruby 2.6.5、2.5.7、2.4.9 リリース。インジェクション脆弱封鎖パッチあり。

Sidekiq 6.0.1 Should Be '10-15% Faster'?

1 ヶ月前にリリースされたばかりの Sidekiq 6 はパフォーマンスが 10%〜15% も向上。

Articles & Tutorials

Using Ruby 2.7 Experimental Features in Production: Pattern Matching and Numbered Block Args

Ruby 2.7 の(実験的)新機能を試してみた話。

  • case ... in パターンマッチング
  • ブロック引数の番号指定

How I Wrote a Ruby Program to Manage EC2 Instances for Me

Exosuit という、Heroku っぽい EC2 インスタンス管理用 CLI ツールの紹介。

Building a Rails CI Pipeline with GitHub Actions

Rails の CI パイプラインを GitHub Actions βで実装してみた話。

  • CircleCI より重い。
  • 現時点ではキューがなくてどのジョブも即時実行。ジョブを複数定義することで並列実行。
  • 本番リリース後、外部 CI が減らせるのを筆者が楽しみにしてる。

Introducing RuboCop to Legacy Projects: Some TODOs and TODON'Ts

レガシーコードへの RuboCop 導入時に rubocop --auto-gen-config を実行するのが良くないという主張。

  • 違反しているコードを例外として扱ってしまう。統一性がなくなる。
  • 違反の多いコップは一部完全に無効化されちゃう。新規コードもチェックされなくなっちゃう。

Rails 6's Support for 'Actionable' Error Pages

Rails 6 の PendingMigrationError 発生時には、ブラウザー上のボタンから migration が実行できちゃう。これは ActiveSupport::ActionableError で実装されたもので、ブラウザーから解消可能なエラーを任意で作れるようになる。

Code and Tools

HexaPDF 0.10.0: PDF Generation and Manipulation in Ruby

PDF 生成だけでなく、編集までできる gem。

Peek: Take a 'Peek' Into Your Rails Applications

GitHub 社内プロファイリングツールを OSS 化したもの。

TestRocker: The Simplest Inline Ruby Testing Library

Ruby Weekly 編集長が 8 年前の CodeBrawl コンペで優勝した簡易テストフレームワークRuby 2.0 の refinements を活かすように最近改修した。

Wicked PDF: PDF Generation for Rails Apps

wkhtmltopdf をラッピングした HTML→PDF 変換 gem。

InvoicePrinter 2.0: Generate PDF Invoices from Ruby

請求書 PDF 生成 gem のメジャーバージョンアップ。

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

rubyweekly.com

Highlights

FriendlyId: Human-Friendly Slugs and Permalinks for Active Record

ActiveRecord のスラグやパーマリンク生成用 gem。

Chef's Contract with ICE Causes Gem Yanking Controversy

米移民・関税執行局(ICE)と契約を結んだ Chef 社。ICE の人権問題に反対した chef-sugar gem (2000 万 DL)のメンテナーが gem を yank した。ユーザがデプロイできなくなり、Chef 社が gem をフォークして著作権メタデータを改ざんしたが、コミュニティからバッシング受けて元に戻した。その後、Chef 社が所有権を RubyGems に主張し、chef-sugar の他、chef-apicommunity-zerostove gem を差し押さえた。

Puma 4.2 Released: A Rack Web Server Built for Concurrency

Puma マイナーバージョンアップ。

Articles & Tutorials

For Organizing Rails Projects, 'Domain Objects are Good and Service Objects are Bad'

サービスオブジェクトは隠れ手続き型アンチパターンで、よりオブジェクト指向ドメインオブジェクトにするべきだという主張。

Behind-the-Scenes of 'Geared Pagination' in Rails

DHH 作 geared_pagination gem の紹介とコードリーディング。無限スクロール UI などのページネーションのページ毎件数を動的に増やしてくれる。

Rails 6 Adds add_foreign_key & remove_foreign_key for SQLite3

SQLite 3 の FK 追加・削除用 add_foreign_keyremove_foreign_keyRails 6 に追加された。

Code and Tools

Chewy: A High-Level Elasticsearch Framework

公式 Elasticsearch クライアントをラッピングした ORM。

Erubi: A Small, Alternative ERB Implementation

軽量 ERB エンジン。メンテされなくなった Erubis のフォーク。

childprocess: Cross-Platform Library for Managing Child Processes

子プロセス起動・操作用 gem。UnixWindowsJRuby 対応。

Rubyzip: A Library for Working with .zip Files

.zip ファイル処理用 gem。

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

rubyweekly.com

Highlights

Faker 2 Released: A Library for Generating Fake Data

ダミーデータを生成してくれる faker gem のメジャーバージョンアップ。キーワード引数に変わった。

Ruby 2.6.4, 2.5.6, and 2.4.7 Released

RDoc の jQuery 脆弱性対策リリース。

Articles & Tutorials

A Double Splat (**) Operator Cheatsheet

** 演算子の用例集。Hash#merge としても使える、しかも Hash#merge より速い。

How to Store Large JSON Documents in Postgres with the Rails Attributes API

Postgres の BINARY 型カラムに巨大 JSON を保存するために、ActiveRecordattribute マクロで独自データ型を定義した話。

What is Module Autoloading in Ruby?

遅延評価の require をやってくれる Ruby コアの autoload 紹介。Rails 6 の Zeitwerk はこの autoload を裏で採用してる。

Exercises for curl Users

curl をフル活用するための練習問題集。

Faster Heroku Deploys with Rails and Webpacker

Rails + Webpacker の Heroku へのデプロイを高速化してくれる Yarn プラグイン clean-webpack-plugin 紹介。

Emoji Driven Development in Ruby

絵文字で書いた Ruby コードや gem 紹介。

Permitting Nested Arrays using Strong Params in Rails

ネストされた配列の引数は、strong params の一番最後に定義しないと無視されちゃう gotcha。

Ruby 2.7 Adds Time#ceil and Time#floor Methods

秒の切り上げ・切り捨てをやってくれる Ruby 2.7 の Time#ceilTime#floor

Code and Tools

Rein: Postgres Database Constraints Made Easy for ActiveRecord

Postgres のデータ完全性制約(FK、一意性など)を migration で設定できるようにしてくれる gem。

InvoicePrinter 2.0 Released: A Way to Quickly Create PDF Invoices

請求書 PDF 生成用 gem のメジャーバージョンアップ。

Bundler-Leak: Find Known Memory Leaks in Your Dependencies

メモリリークを起す gem を検知してくれる bundler プラグイン

A Ruby Wrapper Around the Google Places API

Google Places API クライアント gem。

Stripe Ruby Library 5: Use Stripe from Ruby

Stripe の Ruby ライブラリーのメジャーバージョナップ。

XGBoost and LightGBM Come to Ruby

機械学習ライブラリー XGBoostLightGBM はそれぞれ gem 化された。

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

rubyweekly.com

Highlights

Rails 6.0: Yes, It's a Big One!

待望の Rails 6.0 リリース。

  • Action Mailbox
  • Action Text
  • 複数 DB サポート
  • テスト並列実行
  • Zeitwerk

rest-client and Other Gems Yanked Due to Malicious Code

悪質コードの埋め込まれた rest-client gem の v1.6.13 が yank された。Gemfile.lock の中で使っていないことを確認しましょう。

Jekyll 4.0.0 Released

Jekyll メジャーバージョンアップ。

  • Ruby 2.4.0 以上
  • ビルド高速化
  • Sass 処理高速化
  • Pygments、RedCarpet、RDiscount サポート終了

Sinatra 2.0.6 Released

Sinatra パッチバージョンアップ。

Highlights from Git 2.23: New Alternatives for git checkout

git マイナーバージョンアップ。git checkout の 2 つの用途を明確な 2 コマンドに分けた。

  • git switch でブランチ切り替え
  • git restore で未コミットの修正を破棄する

Articles & Tutorials

A Ruby Gem Debugging Strategy

pry で gem をデバッグする戦略。

  1. 再現方法特定。
  2. binding.pry 張ってデバッグbundle show で gem 内に張る。
  3. バグ修正。

Active Storage File Upload Behind The Scenes

Active Storage のコードリーディング。

Code and Tools

Pong Written in 160 Lines of Ruby

Ruby 製ポン。Dragon Ruby Game Toolkit での実装例。

RailsAdmin 2.0: An Engine That Provides a Backend Admin Interface

管理画面用 Rails エンジン。

Rocketman: Event-Based/Pub-Sub Code in Ruby

Redis PubSub や Kafka に移行しやすい PubSub 思考 Ruby を書くための gem。

nonschema_migrations: Separate Schema From Data Migrations in Your Rails Apps

DB データの migration 用 gem。