rastam’s blog

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

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

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

http://rubyweekly.com/issues/376rubyweekly.com

Highlights

Improving Ruby Performance with Rust

Pathname を Rust で書き換えて 3 割高速化した FasterPath gem 作成者が Rust に挑んだのを振り返った。

  • 最初は FFI 経由で実装してみたが、メモリを解放するコストなどあって、結局ピュア Rust 実装のほうが効果的だった。
  • Rust の Ruby 言語拡張 ruru と Helix はあるが、より安定な ruru にした。
  • Rust はまだ日が浅くて、ruru も Helix も 1.0 になってないので要注意。

Amazon API Gateway Can Now Generate Ruby SDKs

Amazon API Gateway では Ruby SDKAPI クライアント gem)を生成できるようになった!AWS IAM 認証込み(カスタム認証も可)。

Session-Only Cookie Corruption in Ruby Web Apps

Rails のセッションデータをクッキーで保存している場合、ブラウザのサイズ上限を超えたら

  • モダンなブラウザではクッキーがまるごと破棄され、ログイン状態を維持できないバグ発生。
  • IEiOSSafari では Secure、HttpOnly、SameSite などのディレクティブが切り捨てられ、XSS 脆弱性にもなりかねない。

Rails、Rack はサイズをチェックしてくれるが、ディレクティブまでは考慮できてない。筆者が暫定対応として Rack::Protection::MaximumCookie gem 作成。

GitHub Introduces Security Alerts for Ruby Projects

依存 gem と JavaScript ライブラリの脆弱性をアラートしてくれるようになった GitHub

DuckRails: Quickly and Dynamically Mock API Endpoints

API のモックを作るための Rails アプリ。

News

Rubyhack Conference (Salt Lake City, May 3-4, 2018)

Rubyhack カンファレンスの CFP 開始。

Tutorial

Ruby 2.5's Dir.children and Dir.each_child

. .. を除外した ls -a の結果を返してくれる Ruby 2.5 の Dir.children Dir.each_child

Using ActiveStorage Today (Prior to the Rails 5.2 Release)

リリース前の ActiveStorage で画像アップロード機能を実装する手順。

Better Rails Performance with JSON Patch

カスタムフォーム作成用 FormAPI は不特定多数のフィールドを PostgreSQL の jsonb カラムで保存。フィールド数が多いと重くなってたが、JSON Patch 標準で差分だけサーバに送るようにした。差分を当てるには hana gem 採用。

How to Receive & Respond to Text Messages with Hanami & Twilio

Hanami + Twilio で SMS 送受信アプリ実装手順。

Migrating 'has_and_belongs_to_many' Associations to Rails 4+

Rails 4 HABTM 移行した話。HABTM テーブルのデフォ命名が変わったため、join_table: オプションで指定する必要があったりする。新規命名に従ってないテーブルを検知してくれるスクリプトも作った。

Docker + Rails + System Tests with Headless Chrome

Docker + Rails + Headless Chrome システムテストを実装した話。

google_translate_diff: Using Google's Translate API More Efficiently

Google 翻訳 API 料金節約施策を google_translate_diff gem としてリリースした Evil Martians 社。原文をテキストと HTML マークアップに分解して、翻訳済みテキストをキャッシュすることで、Google 翻訳 API の二重呼び出しを塞ぐ。自社費用は 6 割減。

Story

Some Thoughts and Feelings on RubyConf 2017

RubyTapas 売上低迷と健康保険の負担で RubyConf 2017 に参加できなくなるところだった Avdi Grimm 先生。結局コミュニティからの寄付で参加した。感動と感謝の気持を記事で書き落とした。

Tools

dbmgr: CLI Tool to Back Up, Restore, and Provision Dev Databases

開発環境 DB バックアップ・復元用 CLI ツール。

Code

ModelProbe: Schema Introspection for ActiveModel

ActiveRecord スキーマ取得用 gem。