rastam on rails

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

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

rubyweekly.com

Highlights

JIT and Ruby's MJIT

JIT、MJIT の比較的分かりやすい解説。

  • JIT でコードが速くなる一方で、メモリを食うのと、高速化までは時間がかかる
  • MJIT は Ruby の現行 JIT 実装(デフォはオフになってる)
  • MJIT が導入に至った経緯
  • Rails だと重くなる

Ruby, Where Do We Go Now?

Ruby 2.7 への不満をこぼした Rubocop のメンテナー。

  • たった 3 人の苦情で復活した flip flop 演算子
  • numbered parameters など機能追加しすぎ
  • revert 済みの |> 演算子はそもそも Elixir と挙動が違ってて完全に無意味
  • .: がボツになったのは残念だが Matz の決断力が良かった
  • parameter forwarding は大歓迎
  • Ruby への機能追加プロセスがカオスで、Ruby の成長を不安定にし、Rubocop などのメンテナーに負担をかけている

An Epic Collection of Ruby One Liners

巨大な Ruby ワンライナー集。

Articles & Tutorials

Decimating Deprecated Finders

Synvert gem で Rails の非推奨となった finder メソッドを書き換えた話。

Nested API Parameter Validation in Rails with ActiveModel::Validations

API のネストされていた JSON 引数を ActiveModel::Validations でチェックした話。各 JSON オブジェクトの ActiveModel オブジェクト定義してネスト用共通ロジックを親から継承している。

Working Around ActiveRecord Callbacks

テスト環境などで ActiveRecord コールバックを無効にした話。attr_accessor で定義したフラグというハックで。

Rails 6 Adds Ability to Block Writes to A Database

DB への書き込みを一時的に止めてくれる、ActiveRecord 6 の while_preventing_writes ブロック。DB 全体へのロックのようなもの。弾かれた書き込みは ActiveRecord::StatementInvalid エラーを投げ返される。

The Case for Stabby Lambda Notation

冗長な lambdaproc キーワードを書くのをやめて -> 書こうという主張。

  • 完結。
  • 視覚的に目立つ。
  • 複数行の lambda をデフォで lambda にする Rubocop ルールには反対。do ... end のせいで普通のブロックと間違えやすい。

How to Set Up an AWS RDS Database for Rails

EC2 上 Rails アプリ用 AWS RDS データベース構築手順。

Behind The Scenes of GitHub's Vulnerability Alerts

GitHub 脆弱性アラートの仕組み。Gemfile などに新規 gem 追加してコミットするたびに、該当 gem のメタデータRubygems から取得するバックグラウンドジョブが走る。それとは別に、米国立 National Vulnerability Database や gem メンテナーの注意書などの情報源を社内で集めている。この情報源をもとにした機械学習モデルが、CVE と gem のマッピングを結び、GitHub 社内リポジトリーに PR を出す。キュレーションチームが PR をレビューしてマージしたら、バックグラウンドジョブがその gem に依存しているリポジトリー宛にアラートを飛ばす。

Code and Tools

Win32::Screenshot: Capture Screenshots on Windows from Ruby

Windows でスクショを撮ってくれる gem。

Godmin 2.0: An Admin Framework for Rails 4

Rails 管理画面フレームワークDSL ではなく普通のコントローラなど生成し、共通機能をモジュールで include

Torch-rb: Deep Learning for Ruby, Powered by LibTorch

深層学習用 gem。裏は LibTorch で、APIPyTorch に合わせてる。

rack-mini-profiler: Profiler for Your Rack Apps in Dev or Production

パフォーマンス計測用 gem。

Opal 1.0.1: The Ruby to JavaScript Compiler

RubyJavaScript コンパイラーのパッチリリース。

Snabberb: A Simple Component View Framework for Opal

Opan 用フレームワーク

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

rubyweekly.com

Highlights

Ruby 2.7 Adds Shorthand Syntax for Argument Forwarding

メソッドの引数を全部そのまま他のメソッドに渡せるようになる、Ruby 2.7 の ...

Main Takeaways From Matz's RubyConf 2019 Keynote

Matz の RubyConf 2019 キーノートあらすじ。

  • Ruby の第一優先はプログラマーの幸せ。
  • Matz は型アノテーション反対派なので、Ruby コアで実装されるのを期待しないほうがいい。どうしても欲しいという人は Sorbet。
  • Ruby 3 は来年 12 月リリース予定。
  • Ruby 2.7 新機能紹介。

Articles & Tutorials

Using Rubyfmt with Atom

Rubyfmt コードフォーマッターを Atom で使う手順。

Ruby Literals You May Not Know

知られざるリテラル

  • 分数用 Rationalr
  • 複素数Complexi
  • 文字列用 %
  • char 用 ?
  • 無限 Range..

From ActiveRecord Callbacks to Publish/Subscribe Pattern and Event-driven Design

Wisper gem でコールバックを pub/sub に移行することで ActiveRecord モデルの責務を減らす話。

Overpacking.. A Common Webpacker Mistake

webpack の precompile を重くする overpacking アンチパターン(packs 配下に application.js 以外のファイルを置くこと)。

raise Exception.new or raise Exception? They're The Same

raise Exception.newraise Exception が全く同じことの背景にある実装のコードリーディング。

Code and Tools

Strings::Inflection: Convert Between Singular and Plural Forms of English Nouns

英単語の単数形⇆複数形変換用 gem。

ImageProcessing: High-Level Image Processing Wrapper for Libvips and ImageMagick

ImageMagick、Libvips と併用できる画像処理 gem。

Statesman: A State Machine Library

ActiveRecord モデルに密結合してないことに拘るステートマシン用 gem。

Grape: An Opinionated Framework for Creating REST-like APIs

REST APIフレームワークの v1.2.5 リリース。

ProgressBar: A Progress Bar for Your Terminal Apps

CLI プログレスバー描画用 gem。

Rack::Cors: Rack Middleware for Handling Cross-Origin Resource Sharing (CORS)

CORS 対策用 Rack ミドルウェアの v1.1.0 リリース。

excon 0.70.0: A Fast, Simple HTTP 1.1 Client for Ruby

軽量 HTTP クライアント gem。

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

rubyweekly.com

Highlights

Ruby 2.7.0 Preview 3 Released

来月リリースされる Ruby 2.7 の最後の preview リリース。

The .: Syntax For Referencing Methods Is Cancelled

Ruby 2.7 から取り下げられた .:。重いと訴える記事は先々週の Ruby Weekly にも載ってた。

Using UUIDs in Rails 6 with Postgres and ActiveRecord

Rails 6 + Postgres の PK を UUID に移行させる手順。

Articles & Tutorials

Configurable Ruby Modules: The Module Builder Pattern

dry-rbShrine gem で活用されているモジュールビルダーパターンの解説。

Some Surprising Behaviour of Empty Arrays

[].all?true を返しちゃう GOTCHA。

Bulk Inserting Records in Rails 6

Rails 6 に追加された insert_allupsert_all。おかげで activerecord-import が不要になる。

Faking External Services in Tests with Adapters

アダプターパターンで外部サービスをテストから叩かないようにする方法。

Track Email Statuses in Rails with SendGrid

メール開封時のイベントなどで SendGrid のウェブフックから叩かれるエンドポイント実装手順。

Code and Tools

Artichoke: A Ruby Made with Rust

Rust 製 Artichoke VM を RubyConf で発表したスライド。

Rails 5.2.4 Released

メンテパッチだけの Rails 5.2.4 リリース。

Carmen: A Repository of Geographic Regions for Ruby

世界各国の地域情報用 gem。

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

rubyweekly.com

Highlights

Ruby Next: A Way to Transpile Modern Ruby Code to Run on Ruby 2.5 or mruby?

他の Ruby バージョンの機能を使えるようにしてくれるトランスパイラー gem。

Isolating Rails Engines with RuboCop

Rails Engine 責務の混合を防ぐための RuboCop 集を作った Flexport 社。

10 New Things in Active Record (in Rails 6)

Rails 6 Active Record の新機能。

  1. rails db:prepare = rails db:setup + rails db:migrate
  2. rails db:seed:replant = TRUNCATE + rails db:seed
  3. 接続先(メイン DB or レプリカ DB)の自動判定
  4. enumnot_ スコープ
  5. .extract_associated = .preload + .map
  6. .annotateSQL コメント補足
  7. .touch_all
  8. .destroy_by.delete_by = .find_by + .destroy/.delete
  9. .where でも無限 Range 使えるようになった
  10. .implicit_order_column

Rails 6: The Missing Developer Setup Guide

Rails 開発者向け Rails 以外 の環境構築手順書集。

Articles & Tutorials

How to Update Counter Caches in Your Rails App Without Active Record Callbacks

ActiveRecord を拡張してくれる hair_trigger gem で SQL TRIGGER を活かす方法の紹介。

How I Approach Test Coverage Metrics

テストカバレッジ 100% ではなく、90% + メンテしやすい雰囲気を目指すべきだ、という簡潔な主張。

Working with Capistrano: Tasks, Roles, and Variables

Capistrano のカスタムタスク作成方法。SSH でサーバにログインして rails console を立ち上げるタスクを例に。

Code and Tools

Browser: A Browser Detection Library

ブラウザー検知 gem。

A Tetris Game Powered by Ruby2D

Ruby2D で実装されたテトリス。1 ファイル、200 LOC 未満。

Chatwoot: Simple, Open Source Live Chat Software

チャット用 OSS Rails アプリ。

Shrine 3.1: The File Attachment Toolkit for Ruby Webapps

添付ファイル用 gem。

Ruby Trello API: An Implementation of the Trello API for Ruby

Trello API クライアント用 gem。

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

rubyweekly.com

Highlights

Prism: Build Frontend Web Apps with Ruby and WebAssembly

フロントエンドアプリ開発フレームワーク gem。mruby で Ruby を WebAssembly にコンパイル

The Hidden Cost of The Ruby 2.7 Dot-Colon Method Reference Usage

Ruby 2.7 の .: が重くて、キャッシュ・メモ化推奨。筆者は軽量化 PR 提出済み。

Rails 6.0.1 Released

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

Articles & Tutorials

Persisted Queries in GraphQL: Slim Down Apollo Requests to Your Ruby Application

GraphQL の永続化クエリでリクエスト軽量化する手順。フロントエンドは Apollo GraphQL クライアントで、バックエンドは筆者自作 graphql-ruby-persisted_queries gem。

Use GitHub Actions for Rails CI with Postgres

PostgreSQL + Rails アプリの CI を GitHub Actions だけで実現する設定方法。

Code and Tools

Tabulo: A Terminal Table Generator with a DRY, Column-Based API

CLI 表描画用 gem。

Skunk: Combining Code Quality and Coverage to Calculate a 'Stink' Score

コード品質・カバレッジのスコア計算用 skunk gem の紹介。先週掲載された RubyCritic gem を裏で採用してる。

rspec-tap-formatters: TAP Formatters for RSpec 3

RSpec 実行結果のグループ別フォーマット用 gem。

How to Find the Unused Routes of a Large Rails App

未実装で不要な route を洗い出してくれるスクリプト。アクション・ビューの有無で判定。

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

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