Ruby Weekly #376: 日本語サマリー
職場の Slack の #ruby 窓で Ruby Weekly メルマガが毎週配信されます。その中から面白そうなものをピックアップして、日本語で簡単なサマリーを書くようにしています。そのサマリーをここでまとまさせていただきます。くだけた日本語で失礼いたします。
Highlights
Pathname
を Rust で書き換えて 3 割高速化した FasterPath gem 作成者が Rust に挑んだのを振り返った。
- 最初は FFI 経由で実装してみたが、メモリを解放するコストなどあって、結局ピュア Rust 実装のほうが効果的だった。
- Rust の Ruby 言語拡張 ruru と Helix はあるが、より安定な ruru にした。
- Rust はまだ日が浅くて、ruru も Helix も 1.0 になってないので要注意。
Amazon API Gateway では Ruby SDK(API クライアント gem)を生成できるようになった!AWS IAM 認証込み(カスタム認証も可)。
Rails のセッションデータをクッキーで保存している場合、ブラウザのサイズ上限を超えたら
- モダンなブラウザではクッキーがまるごと破棄され、ログイン状態を維持できないバグ発生。
- IE や iOS の Safari では Secure、HttpOnly、SameSite などのディレクティブが切り捨てられ、XSS 脆弱性にもなりかねない。
Rails、Rack はサイズをチェックしてくれるが、ディレクティブまでは考慮できてない。筆者が暫定対応として Rack::Protection::MaximumCookie gem 作成。
依存 gem と JavaScript ライブラリの脆弱性をアラートしてくれるようになった GitHub。
News
Rubyhack カンファレンスの CFP 開始。
Tutorial
.
..
を除外した ls -a
の結果を返してくれる Ruby 2.5 の Dir.children
Dir.each_child
。
リリース前の ActiveStorage で画像アップロード機能を実装する手順。
カスタムフォーム作成用 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 + 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
RubyTapas 売上低迷と健康保険の負担で RubyConf 2017 に参加できなくなるところだった Avdi Grimm 先生。結局コミュニティからの寄付で参加した。感動と感謝の気持を記事で書き落とした。
Tools
dbmgr: CLI Tool to Back Up, Restore, and Provision Dev Databases
開発環境 DB バックアップ・復元用 CLI ツール。
Code
ActiveRecord スキーマ取得用 gem。