Ruby Weekly #406: 日本語サマリー
職場の Slack 窓で Ruby Weekly メルマガが毎週配信されます。その中から面白そうなものをピックアップして、日本語で簡単なサマリーを書くようにしています。そのサマリーをここでまとまさせていただきます。くだけた日本語で失礼いたします。
http://rubyweekly.com/issues/406rubyweekly.com
Highlights
Graal JIT 上に JRuby を動かす手順とパフォーマンスの比較。
Ruby メモリ制御用環境変数の解説。おまけにアプリの最適な環境変数設定を記録してくれる EnvMem gem の紹介。
OSS Rails アプリ 12 個のパフォーマンスを調査した論文。ORM、DB 設計、アプリ設計などの問題点種別で集計。
条件達成判定メソッドをルールオブジェクトとして抽出しようと提案した Avdi Grimm 先生。
Shopify を支えているインフラの進化。
- 社内各システムの稼働率、SSL 証明書有効性、脆弱性有無など一望できる ServicesDB という Rails アプリ
- 巨大 MySQL DB → 出店者別シャード → 出店者別ポッド(個別 MySQL DB + Redis + Memcache + cron)
- jQuery + prototype.js → Batman.js の SPA → 生 JS → React + TypeScript
- GraphQL
- Buildkite で 10 万テスト並列実行
- ShipIt で継続的デプロイ
- オンラインメンテで 100 以上ものシャードを非同期で
db:migrate
Covered: An Experimental Coverage Tool Using Ruby 2.6 Features
カバー率計算用 gem。Ruby 2.6 の RubyVM::AST.parse
を駆使することで、今まで計算できなかったテンプレートまで計算できるようになった。
Articles & Tutorials
Rails API のドキュメンテーションを API Blueprint 形式で作成、実際の API との整合性を Dredd でテスト。
Ruby 2.6 の無限 Range
0..
。0..nil
でも書ける。
パフォーマンス的には、Fast JSON API + Oj が最も速い組み合わせ。
Visualizing and Optimizing JS Bundle Size in Rails/Webpacker Apps
webpack-bundle-analyzer で webpack の bundler の構成を可視化し、不要なものを webpack 設定から外す方法。
筆者のサービスオブジェクト関連ルール。
- public メソッドは 1 個のみ。SRP 守るように。
.new
は明示的に呼ぶこと。引数は DI のみ。- インスタンス変数を設定するのは
#initialize
のみ。 - private メソッドから他の private メソッドを呼ぶな。深い階層は読みづらい。
- ローカル変数は遠慮せず。
- ループではサービスオブジェクトのインスタンスを再利用しよう。
- 戻り値はバリューオブジェクト。
- モナド使おう。
- 必要に応じて、上記ルール破って良い。
カスタム例外の使いこなし方。
モダン Rails (Turbolinks + Stimulus + SJR)で脱 SPA。SPA の複雑さなどの問題点とそれぞれを解決するモダン Rails 機能。
Rails 5.2 の ActiveSupport::Cache::Store#write_multi
のおかげで複数キーを一括で書き込めるようになった。
非同期でメールを送信している Reflektive 社。メールの数が多くなると発送が遅くなってしまった DelayedJob から、高速かつ監視しやすい Sidekiq に移行した話。
Code & Tools
線形回帰用 gem。
Sym: A CLI and Ruby API to Encrypt and Decrypt Sensitive Data
secret などの暗号化・復号化 CLI 用 gem。
WIP: Promote Webpacker to the Default JavaScript Compiler for Rails 6
Webpacker をデフォにしようとしている DHH のプルリクエスト。
プロジェクト管理ツール Rails アプリ。
cache_with_locale: Automatically Add Locale to Your Cache Keys