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 付き。
ジョブの実行順番を保証してくれる非同期処理ツール。
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。