Ruby Weekly #480: 日本語サマリー
Highlights
JIT、MJIT の比較的分かりやすい解説。
- JIT でコードが速くなる一方で、メモリを食うのと、高速化までは時間がかかる
- MJIT は Ruby の現行 JIT 実装(デフォはオフになってる)
- MJIT が導入に至った経緯
- Rails だと重くなる
Ruby 2.7 への不満をこぼした Rubocop のメンテナー。
- たった 3 人の苦情で復活した flip flop 演算子
- numbered parameters など機能追加しすぎ
- revert 済みの
|>
演算子はそもそも Elixir と挙動が違ってて完全に無意味 .:
がボツになったのは残念だが Matz の決断力が良かった- parameter forwarding は大歓迎
- Ruby への機能追加プロセスがカオスで、Ruby の成長を不安定にし、Rubocop などのメンテナーに負担をかけている
Articles & Tutorials
Synvert gem で Rails の非推奨となった finder メソッドを書き換えた話。
Nested API Parameter Validation in Rails with ActiveModel::Validations
API のネストされていた JSON 引数を ActiveModel::Validations
でチェックした話。各 JSON オブジェクトの ActiveModel オブジェクト定義してネスト用共通ロジックを親から継承している。
テスト環境などで ActiveRecord コールバックを無効にした話。attr_accessor で定義したフラグというハックで。
DB への書き込みを一時的に止めてくれる、ActiveRecord 6 の while_preventing_writes
ブロック。DB 全体へのロックのようなもの。弾かれた書き込みは ActiveRecord::StatementInvalid
エラーを投げ返される。
冗長な lambda
や proc
キーワードを書くのをやめて ->
書こうという主張。
- 完結。
- 視覚的に目立つ。
- 複数行の lambda をデフォで
lambda
にする Rubocop ルールには反対。do ... end
のせいで普通のブロックと間違えやすい。
EC2 上 Rails アプリ用 AWS RDS データベース構築手順。
GitHub 脆弱性アラートの仕組み。Gemfile などに新規 gem 追加してコミットするたびに、該当 gem のメタデータを Rubygems から取得するバックグラウンドジョブが走る。それとは別に、米国立 National Vulnerability Database や gem メンテナーの注意書などの情報源を社内で集めている。この情報源をもとにした機械学習モデルが、CVE と gem のマッピングを結び、GitHub 社内リポジトリーに PR を出す。キュレーションチームが PR をレビューしてマージしたら、バックグラウンドジョブがその gem に依存しているリポジトリー宛にアラートを飛ばす。
Code and Tools
Windows でスクショを撮ってくれる gem。
Rails 管理画面フレームワーク。DSL ではなく普通のコントローラなど生成し、共通機能をモジュールで include
。
深層学習用 gem。裏は LibTorch で、API は PyTorch に合わせてる。
rack-mini-profiler: Profiler for Your Rack Apps in Dev or Production
パフォーマンス計測用 gem。
Ruby → JavaScript コンパイラーのパッチリリース。
Opan 用フレームワーク。
Ruby Weekly #479: 日本語サマリー
Highlights
メソッドの引数を全部そのまま他のメソッドに渡せるようになる、Ruby 2.7 の ...
。
Matz の RubyConf 2019 キーノートあらすじ。
- Ruby の第一優先はプログラマーの幸せ。
- Matz は型アノテーション反対派なので、Ruby コアで実装されるのを期待しないほうがいい。どうしても欲しいという人は Sorbet。
- Ruby 3 は来年 12 月リリース予定。
- Ruby 2.7 新機能紹介。
Articles & Tutorials
Rubyfmt コードフォーマッターを Atom で使う手順。
知られざるリテラル。
From ActiveRecord Callbacks to Publish/Subscribe Pattern and Event-driven Design
Wisper gem でコールバックを pub/sub に移行することで ActiveRecord モデルの責務を減らす話。
webpack の precompile を重くする overpacking アンチパターン(packs 配下に application.js 以外のファイルを置くこと)。
raise Exception.new
と raise Exception
が全く同じことの背景にある実装のコードリーディング。
Code and Tools
Strings::Inflection: Convert Between Singular and Plural Forms of English Nouns
英単語の単数形⇆複数形変換用 gem。
ImageProcessing: High-Level Image Processing Wrapper for Libvips and ImageMagick
ImageMagick、Libvips と併用できる画像処理 gem。
ActiveRecord モデルに密結合してないことに拘るステートマシン用 gem。
REST API 用フレームワークの v1.2.5 リリース。
Rack::Cors: Rack Middleware for Handling Cross-Origin Resource Sharing (CORS)
CORS 対策用 Rack ミドルウェアの v1.1.0 リリース。
軽量 HTTP クライアント gem。
Ruby Weekly #478: 日本語サマリー
Highlights
来月リリースされる Ruby 2.7 の最後の preview リリース。
Ruby 2.7 から取り下げられた .:
。重いと訴える記事は先々週の Ruby Weekly にも載ってた。
Rails 6 + Postgres の PK を UUID に移行させる手順。
Articles & Tutorials
dry-rb や Shrine gem で活用されているモジュールビルダーパターンの解説。
[].all?
が true
を返しちゃう GOTCHA。
Rails 6 に追加された insert_all
と upsert_all
。おかげで activerecord-import が不要になる。
アダプターパターンで外部サービスをテストから叩かないようにする方法。
メール開封時のイベントなどで SendGrid のウェブフックから叩かれるエンドポイント実装手順。
Code and Tools
Rust 製 Artichoke VM を RubyConf で発表したスライド。
メンテパッチだけの Rails 5.2.4 リリース。
世界各国の地域情報用 gem。
Ruby Weekly #477: 日本語サマリー
Highlights
Ruby Next: A Way to Transpile Modern Ruby Code to Run on Ruby 2.5 or mruby?
他の Ruby バージョンの機能を使えるようにしてくれるトランスパイラー gem。
Rails Engine 責務の混合を防ぐための RuboCop 集を作った Flexport 社。
Rails 6 Active Record の新機能。
rails db:prepare
=rails db:setup
+rails db:migrate
rails db:seed:replant
=TRUNCATE
+rails db:seed
- 接続先(メイン DB or レプリカ DB)の自動判定
- enum の
not_
スコープ .extract_associated
=.preload
+.map
.annotate
で SQL コメント補足.touch_all
.destroy_by
、.delete_by
=.find_by
+.destroy
/.delete
.where
でも無限Range
使えるようになった.implicit_order_column
Rails 開発者向け Rails 以外 の環境構築手順書集。
Articles & Tutorials
How to Update Counter Caches in Your Rails App Without Active Record Callbacks
ActiveRecord を拡張してくれる hair_trigger gem で SQL TRIGGER
を活かす方法の紹介。
テストカバレッジ 100% ではなく、90% + メンテしやすい雰囲気を目指すべきだ、という簡潔な主張。
Capistrano のカスタムタスク作成方法。SSH でサーバにログインして rails console を立ち上げるタスクを例に。
Code and Tools
ブラウザー検知 gem。
Ruby2D で実装されたテトリス。1 ファイル、200 LOC 未満。
添付ファイル用 gem。
Ruby Trello API: An Implementation of the Trello API for Ruby
Trello API クライアント用 gem。
Ruby Weekly #475: 日本語サマリー
Highlights
フロントエンドアプリ開発用フレームワーク gem。mruby で Ruby を WebAssembly にコンパイル。
The Hidden Cost of The Ruby 2.7 Dot-Colon Method Reference Usage
Ruby 2.7 の .:
が重くて、キャッシュ・メモ化推奨。筆者は軽量化 PR 提出済み。
Rails 6.0.1 マイナーバージョンアップ。
Articles & Tutorials
Persisted Queries in GraphQL: Slim Down Apollo Requests to Your Ruby Application
GraphQL の永続化クエリでリクエスト軽量化する手順。フロントエンドは Apollo GraphQL クライアントで、バックエンドは筆者自作 graphql-ruby-persisted_queries gem。
PostgreSQL + Rails アプリの CI を GitHub Actions だけで実現する設定方法。
Code and Tools
Tabulo: A Terminal Table Generator with a DRY, Column-Based API
CLI 表描画用 gem。
Skunk: Combining Code Quality and Coverage to Calculate a 'Stink' Score
コード品質・カバレッジのスコア計算用 skunk gem の紹介。先週掲載された RubyCritic gem を裏で採用してる。
RSpec 実行結果のグループ別フォーマット用 gem。
未実装で不要な route を洗い出してくれるスクリプト。アクション・ビューの有無で判定。
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 付き。
ジョブの実行順番を保証してくれる非同期処理ツール。