Ruby Weekly #474: 日本語サマリー
Highlights
HTTP/2 に対応した HTTP 通信用 gem。
Ruby 2.7 preview 2 のベンチマーク結果、Ruby 2.6 とはパフォーマンスがそんなに変わらない。
Taming Large Rails Applications with Private ActiveRecord Models
ActiveRecord モデルを private
にしたことでインタフェースを最小限に抑えた Grunt 社。モデルをモジュールの中に納めて private_constant
で封印。外向けインタフェースはモジュールで実装。
Articles & Tutorials
zip_tricks gem で巨大 ZIP ファイルを生成し、サーバのディスクに書き出さずにクライアントに直接ストリーミングする方法。あと、ヘッダーをうまく設定することで、ブラウザーの挙動をコントロールする方法。
Rails が採用されている 9 業界。
- 観光(Airbnb、Couchsurfing)
- 広報(Crazy Egg、BBDO、Accenture)
- SNS(ASKfm、We Heart It、Goodreads)
- ソフトウェア開発(GitHub、Zendesk、Microsoft Yammer)
- 人事(Fiverr、Helpling、Yellow Pages)
- EC(Shopify、Groupon、Nedap)
- 金融(Bloomberg、Kickstarter、Fundera)
- 娯楽(Netflix、Hulu、Twitch)
- 不動産(Spacelist、Prologis)
Code and Tools
静的解析でコード品質を評価してくれる RubyCritic gem の v4.2.0 リリース。
full_request_logger: Make Full Request Logs Accessible Via Web UI
リクエストログをブラウザー上で表示してくれる、Basecamp 作 gem。
API のドキュメンテーション用サイトを生成してくれる Middleman アプリ。
Invisible: Override Methods While Maintaining Their Original Visibility
private
・protected
・public
スコープを変えずにオーバーライドできるようにしてくれる gem。
Hashie 4.0: Classes and Mixins That Make Hashes More Powerful
Hash
のデータ型制御、文字列キーでもシンボルキーでも参照できるように拡張してくれる gem。
Ruby Weekly #473: 日本語サマリー
Highlights
[1, 2, 3].each_with_object(arg).map(&:my_method)
で my_method
に arg
を渡す裏技解説。
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
Gemfile に追加しなかった gem を手元で使う手順。
- Gemfile を読み込む手元用 Gemfile.private 作成。
BUNDLE_GEMFILE
環境変数で Gemfile.private 指定。- spring 設定。
- puma-dev、pow 設定。
ActiveSupport::Deprecation.warn
で deprecation する方法。
Rails 6 にマージされた action-cable-testing gem の機能紹介。
Code and Tools
command_line: An Easier Way Execute Command Line Applications
CLI コマンド実行用 gem。stdin、stdout、終了ステータス用 DSL 付き。
ジョブの実行順番を保証してくれる非同期処理ツール。
Ruby Weekly #471: 日本語サマリー
Highlights
Ruby 2.7 to Deprecate Automatic Conversion of a Hash to Keyword Arguments
method({ k: 1 })
のハッシュ引数が method(k: 1)
キーワード引数として評価されるのは Ruby 2.7 で deprecated になった。Ruby 3 では ArgumentError
など発生するようになる。**
で明示的に変換する必要が生じる method(**{ k: 1 })
RuboCop メンテナー作 Minitest スタイルガイド。
OSS EC サイト Spree v4.0 リリース。Rails 6 対応するようになった。
ロンドンのアンカンファレンス。カンファレンスと違って、トークはなく、参加者間のディスカッションというフォーマットらしい。
Articles & Tutorials
ActionView リンクをフィッシングから守ってくれるヘルパー。rel="nofollow"
、rel="noopener"
属性を付けることで Tabnabbing 脆弱性回避。
GDPR 遵守のユーザデータ物理削除戦略。dependent: :destroy
漏れなどを防ぐために、テストで物理削除前後の各テーブルのレコード数を比較している Monolist 社。
Code and Tools
今までなかった RuboCop の Minitest 用拡張。
will_paginate 3.2: A Pagination library for Rails, Sinatra, and More
Ruby 2.7、Rails 6 対応の will_paginate v3.2 リリース。
並列実行用 parallel gem。
Ruby Weekly #470: 日本語サマリー
Highlights
Ruby 2.7 の IRB にシンタックスハイライトが実装された。
Ruby 2.6.5、2.5.7、2.4.9 リリース。インジェクション脆弱封鎖パッチあり。
1 ヶ月前にリリースされたばかりの Sidekiq 6 はパフォーマンスが 10%〜15% も向上。
Articles & Tutorials
Using Ruby 2.7 Experimental Features in Production: Pattern Matching and Numbered Block Args
Ruby 2.7 の(実験的)新機能を試してみた話。
case ... in
パターンマッチング- ブロック引数の番号指定
Exosuit という、Heroku っぽい EC2 インスタンス管理用 CLI ツールの紹介。
Rails の CI パイプラインを GitHub Actions βで実装してみた話。
- CircleCI より重い。
- 現時点ではキューがなくてどのジョブも即時実行。ジョブを複数定義することで並列実行。
- 本番リリース後、外部 CI が減らせるのを筆者が楽しみにしてる。
Introducing RuboCop to Legacy Projects: Some TODOs and TODON'Ts
レガシーコードへの RuboCop 導入時に rubocop --auto-gen-config
を実行するのが良くないという主張。
- 違反しているコードを例外として扱ってしまう。統一性がなくなる。
- 違反の多いコップは一部完全に無効化されちゃう。新規コードもチェックされなくなっちゃう。
Rails 6 の PendingMigrationError
発生時には、ブラウザー上のボタンから migration が実行できちゃう。これは ActiveSupport::ActionableError
で実装されたもので、ブラウザーから解消可能なエラーを任意で作れるようになる。
Code and Tools
PDF 生成だけでなく、編集までできる gem。
GitHub 社内プロファイリングツールを OSS 化したもの。
Ruby Weekly 編集長が 8 年前の CodeBrawl コンペで優勝した簡易テストフレームワーク。Ruby 2.0 の refinements を活かすように最近改修した。
wkhtmltopdf
をラッピングした HTML→PDF 変換 gem。
請求書 PDF 生成 gem のメジャーバージョンアップ。
Ruby Weekly #469: 日本語サマリー
Highlights
FriendlyId: Human-Friendly Slugs and Permalinks for Active Record
ActiveRecord のスラグやパーマリンク生成用 gem。
米移民・関税執行局(ICE)と契約を結んだ Chef 社。ICE の人権問題に反対した chef-sugar gem (2000 万 DL)のメンテナーが gem を yank した。ユーザがデプロイできなくなり、Chef 社が gem をフォークして著作権メタデータを改ざんしたが、コミュニティからバッシング受けて元に戻した。その後、Chef 社が所有権を RubyGems に主張し、chef-sugar の他、chef-api、community-zero、stove gem を差し押さえた。
Puma マイナーバージョンアップ。
Articles & Tutorials
For Organizing Rails Projects, 'Domain Objects are Good and Service Objects are Bad'
サービスオブジェクトは隠れ手続き型アンチパターンで、よりオブジェクト指向なドメインオブジェクトにするべきだという主張。
DHH 作 geared_pagination gem の紹介とコードリーディング。無限スクロール UI などのページネーションのページ毎件数を動的に増やしてくれる。
Rails 6 Adds add_foreign_key & remove_foreign_key for SQLite3
SQLite 3 の FK 追加・削除用 add_foreign_key
、remove_foreign_key
が Rails 6 に追加された。
Code and Tools
公式 Elasticsearch クライアントをラッピングした ORM。
軽量 ERB エンジン。メンテされなくなった Erubis のフォーク。
childprocess: Cross-Platform Library for Managing Child Processes
子プロセス起動・操作用 gem。Unix、Windows、JRuby 対応。
.zip ファイル処理用 gem。
Ruby Weekly #465: 日本語サマリー
Highlights
ダミーデータを生成してくれる faker gem のメジャーバージョンアップ。キーワード引数に変わった。
Articles & Tutorials
**
演算子の用例集。Hash#merge
としても使える、しかも Hash#merge
より速い。
How to Store Large JSON Documents in Postgres with the Rails Attributes API
Postgres の BINARY
型カラムに巨大 JSON を保存するために、ActiveRecord の attribute
マクロで独自データ型を定義した話。
遅延評価の require
をやってくれる Ruby コアの autoload
紹介。Rails 6 の Zeitwerk はこの autoload
を裏で採用してる。
curl
をフル活用するための練習問題集。
Rails + Webpacker の Heroku へのデプロイを高速化してくれる Yarn プラグイン clean-webpack-plugin 紹介。
絵文字で書いた Ruby コードや gem 紹介。
ネストされた配列の引数は、strong params の一番最後に定義しないと無視されちゃう gotcha。
秒の切り上げ・切り捨てをやってくれる Ruby 2.7 の Time#ceil
と Time#floor
。
Code and Tools
Rein: Postgres Database Constraints Made Easy for ActiveRecord
Postgres のデータ完全性制約(FK、一意性など)を migration で設定できるようにしてくれる gem。
InvoicePrinter 2.0 Released: A Way to Quickly Create PDF Invoices
請求書 PDF 生成用 gem のメジャーバージョンアップ。
メモリリークを起す gem を検知してくれる bundler プラグイン。
Stripe の Ruby ライブラリーのメジャーバージョナップ。
Ruby Weekly #464: 日本語サマリー
Highlights
待望の Rails 6.0 リリース。
- Action Mailbox
- Action Text
- 複数 DB サポート
- テスト並列実行
- Zeitwerk
悪質コードの埋め込まれた rest-client gem の v1.6.13 が yank された。Gemfile.lock の中で使っていないことを確認しましょう。
Jekyll メジャーバージョンアップ。
- Ruby 2.4.0 以上
- ビルド高速化
- Sass 処理高速化
- Pygments、RedCarpet、RDiscount サポート終了
Sinatra パッチバージョンアップ。
git マイナーバージョンアップ。git checkout
の 2 つの用途を明確な 2 コマンドに分けた。
git switch
でブランチ切り替えgit restore
で未コミットの修正を破棄する
Articles & Tutorials
- 再現方法特定。
binding.pry
張ってデバッグ。bundle show
で gem 内に張る。- バグ修正。
Active Storage のコードリーディング。
Code and Tools
Ruby 製ポン。Dragon Ruby Game Toolkit での実装例。
RailsAdmin 2.0: An Engine That Provides a Backend Admin Interface
管理画面用 Rails エンジン。
Redis PubSub や Kafka に移行しやすい PubSub 思考 Ruby を書くための gem。
nonschema_migrations: Separate Schema From Data Migrations in Your Rails Apps
DB データの migration 用 gem。