rastam’s blog

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

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

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

http://rubyweekly.com/issues/391rubyweekly.com

Highlights

Rails 5.2.0 RC2: The (Hopefully) Last RC Before RailsConf

Rails 5.2.0 RC2 新機能まとめ

  • Active Storage
  • Redis Cache Store
  • HTTP/2 Early Hints
  • Bootsnap
  • CSP 用 DSL
  • Credentials

Managing DB Schema Changes Without Downtime

Discourse がゼロダウンタイムで DB スキーム変更を実現できた秘密。

  • schema_migrations テーブルに git_version などのカラム追加
  • カラム・テーブル削除は migration ではなく seed で
  • migration でカラム・テーブル削除ができないように pg gem をパッチ

デプロイ手順は

  1. migration 実行
  2. 新規 Docker イメージ作成
  3. 旧 Docker インスタンス停止
  4. 新規 Docker インスタンス起動
  5. seed 実行

Browser: A Browser Detection Library

ブラウザー検知 gem。

Rails Jumpstart: A Quick Way to Start New Rails Apps

新規 Rails アプリ作成用テンプレート。

News

RailsConf 2018 Schedule is Live

RailsConf 2018 スケジュール公開。

Tutorial

JSONify your Ruby Translations

DB 内 i18n データ永続化用定番 gem Globalize では、各モデルに紐付いた モデル名_translations テーブルで i18n データを保存。しかし取得時には、JOIN する負荷がかかってしまう。

Mobility gem の JSON・JSONB ストラテジーだと、モデルと同一テーブルの JSON 型カラムに保存することで、JOIN なしで取得できる。

なお Globalize 流ストラテジーなども完備している Mobility は多様性・拡張性抜群。

Better Passwords in Ruby Apps with the Pwned Passwords API

Pwned Passwords API を叩くことで、パスワードが流出しているかどうかの validation を実装する手順。

Quick Tip: Inspecting Ruby Gems

gem の中身を確認する方法 2 つ。

  1. リポジトリgit clone
  2. bundle show のパスに cd

How to Test Logs using RSpec Expectations and StringIO

StringIO を注入することで、ログ出力をテストする手順。

Story

From Rails to Clojure, to Java, then Back to Rails

6 年間の職歴を経て、Rails 2.3 → ClojureJava 8 → Rails 4.2 で開発した経験談

  • Rails 2.3 のモノリスを 40% ぐらいリファクター・改善してから Clojure 屋さんに転職。
  • Clojure は高速 + エンジニアの生産性が良かったが、エンジニアの採用が難しくて事業がなかなか成長できなかった。
  • 意外とリーンな Java 屋さんに転職して、エンジニアの生産性も意外と良かった。何でもかんでも POJO 作るのがちょっとめんどくさかったのにもかかわらず。静的言語のおかげで大規模リファクターができた。
  • Rails 4.2 は使い勝手が 2.3 とはそんなに変わらない割には、アップグレードが辛い。後方互換性の優れている ClojureJava に比べて。
  • いろんな言語の経験はエンジニアリング・マネージャには必須だが、シニア・エンジニア募集案件に応募するには特定言語の専門知識が足りない。

Code

Rails-DB-Interactive: Interactive Database Diagrams for Rails

Rails アプリのモデル図を生成する JavaScript アプリ。