rastam on rails

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

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

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

http://rubyweekly.com/issues/404rubyweekly.com

Highlights

You Can Now Install TruffleRuby via RVM (and ruby-build)

RVM、rbenv でインストールできるようになった TruffleRuby。

Serious Vulnerability Found in Sprockets

Sprockets の脆弱性が判明。production で Rails アセットのコンパイルを有効にしている場合は secrets や環境変数の内容が漏れる恐れがある。

Making Tests Go Faster

テスト高速化対策 2 つ。

  1. RSpec プロファイリングで重いテストを特定し、Factory でのレコード作成を減らす。
  2. MongoDB クエリの自前ロギングで不要なクエリと発行箇所を特定・排除。

Visualize Ruby with Flowcharts

RubyDSL としたフロー図生成ツール紹介。

The Demand for Rails Developers is Still Huge

Rails の需要は未だにあるという、米国募集案件を基にした調査結果。サンフランシスコでは断トツ 1 位。

Articles & Tutorials

Rails CSRF Protection for Single-Page Applications

Rails 制 SPA 向け CSRF 対策。

First Impressions of Elixir, from a Rubyist's Perspective

Elixir に挑戦した Rubyist経験談

  • Elixir への警戒が好奇心に変わった経緯。
  • Elixir を覚えた資料。
  • 1 ヵ月後の印象。

Code & Tools

Rails DateTime Formats

Rails の DateTime フォーマットまとめ。

Maily: A Rails Engine to Preview Outgoing Emails

メール送信前のプレビュー用 Rails Engine。

TensorStream: A Reimplementation of TensorFlow for Ruby

機械学習フレームワーク TesnorFlow を Ruby で書き直した gem。

activerecord-import: Bulk Data Insertion with ActiveRecord

一括 INSERT 用 gem。

MiniSql: A Minimal, Safe SQL Executor for Postgres

PostgreSQLSQL 高速実行用 gem。

RRRSpec: Distributed RSpec Execution Service

RSpec 分散実行用 RRRSpec が最近更新された。

Spreadsheet Architect: Create Spreadsheets from Ruby Objects

ActiveRecord オブジェクトや PORO を ExcelCSV スプレッドシートに変換してくれる gem。

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

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

http://rubyweekly.com/issues/403rubyweekly.com

Highlights

Arel with Wharel: Virtual Rows for Active Record

Arel を書きやすくしてくれる超シンプルな Wharel gem を実装した経緯。APISequel に似ているが、ソースは 31 行しかない!

From ActiveRecord to Diesel (and Rust)

Rust に挑戦した Rubyistシンタックス、パッケージマネージャ、ORM など比較した話。

Adding Automated Speech Recognition for Phone Calls to Rails

Rails + Twilio で音声認識サービスを実装する手順。<Gather> の TwiML でユーザの声を文字列に変換し、指定エンドポイントに転送。

Tutorials

How to Write a Bundler Plugin

Bundler プラグイン開発・適用手順。プラグインでできることは:

Quick Tips for a Practical Rubocop Workflow

Rubocop 活用戦略。

  • オススメの初期設定
  • エディター連携
  • autocorrect 駆使
  • pre-commit フック設置

Simple Shortcuts to Get More Out of Bundler

筆者の便利な Bundler ショートカット集。

  • bundle info
  • gem をエディターで開く bundle open
  • gem 内ソース検索

Using GraphQL with Rails

graphql gem で Rails 上の GraphQL API 実装。

  • Types::QueryType でデータ取得用 API 定義
  • Types::MutationType でデータ書き込み用 API 定義
  • graphql-preload gem で N+1 撲滅
  • 開発環境のブラウザー上 UI でクエリ検証

Quick Tip: Use Beginnings and Ends of Strings in Regular Expressions

正規表現の文頭・文末は ^ $ ではなく \A \z を使う理由。

Code & Tools

Sho: An Experimental 'Post-Framework' View Library

ディレクトリなどのフレームワーク規約に拘束されないビュー用ライブラリ。テンプレートへのマッピング定義用 DSL でビュー描画メソッドを生やす。

Wallaby: A Rails Engine for Managing Data/Admin Interface

管理画面用 Rails Engine。

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

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

http://rubyweekly.com/issues/402rubyweekly.com

Highlights

Ruby 2.6 Preview 2 Released

Ruby 2.6.0-preview2 リリース。

  • JIT 一部最適化
  • RubyVM::AST 新規追加
  • Kernel#yield_selfthen アライアス
  • 無限 Range (1..)
  • など

Stripe is Building a Ruby Type Checker

Stripe 社が RubyKaigi で発表した、開発中の型チェックツール Sorbet

http.rb is Great and Here's Why

筆者お気に入りの HTTP クライアント http.rb の機能紹介、Net::HTTP との比較。

An Analysis of Memory Bloat in Active Record 5.2

ActiveRecord のメモリ肥大化は、データ型変換の遅延評価でオブジェクト作り過ぎているのが原因。

An Initial Ruby 2.6 Preview 2 Benchmark

Ruby 2.6.0-preview2 ベンチマークRuby 2.5.0 より 17.7% 高速化。

Some Favorite Ruby Community Resources

Ruby ポッドキャスト、ブログ、メルマガまとめ。

Tutorials

Examples of Some 'Hidden Jewels' in Ruby's Standard Library

知られざる Ruby 標準ライブラリ。

  • CLI 引数パース用 GetoptLongOptionParser
  • 簡易 KVS DBM, GDBMSDBM
  • オブジェクト永続化用 PStore
  • Observable
  • DRb
  • TSort
  • Math
  • Abbrev
  • Zlib

Interesting Problems: Mondrian

Ryan Davis 先生が自作 graphics gem でモンドリアン絵画風画像を生成してみた話。

Coding Sidekiq Workers the Right Way

Sidekiq ワーカーを書くルール。

  1. ワーカー内にロジック書くな。
  2. 実行時間の長いワーカー書くな。マスター・スレーブのワーカーに分けよう。
  3. ワーカーをディレクトリ別で整理しよう。
  4. スケジューリングは計画的に。
  5. 定期的に実行時間を監視し、必要に応じてリファクター。

Conditional Execution with a DSL in Ruby

条件分岐をコールバックで書く DSL 案。

Ruby's Redo, Retry, and Next Keywords

redo retry next の紹介と比較。

Using Concurrent Ruby in a Rails App

Concurrent RubyConcurrent::Future で並行処理を実装した経験談。スレッド内例外が気付きにくくてバグの原因になったが、ラッパーで対応した。

Rails 5.2 Adds allow_other_host Option to redirect_back Method

Railsredirect_back メソッドに追加された allow_other_host オプションで、外部サイトへの遷移が制御できるようになった。

Code & Tools

Asynchronize: Easily Make Multiple Methods Asynchronous

メソッドを非同期化(別スレッド実行)するマクロを提供してくれる gem。

DeepPluck: Pluck Attributes From Nested Associations

ネスとされたアソシエーションから一括 pluck してハッシュ返してくれる ActiveRecord 拡張 gem。select での自前より高速!

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

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

http://rubyweekly.com/issues/401rubyweekly.com

Highlights

'then' Is Now an Alias for 'yield_self' (in Ruby 2.6)

3 ヶ月もの議論の上で yield_self のアライアス thenRuby 2.6 にマージされた。

JRuby 9.2.0.0 Released

Ruby 2.5 に対応した JRuby 9.2.0.0 リリース。

Spina CMS 1.0: A CMS for Rails Devs

CMSRails Engine。

TestProf: Factory Therapy for Your Ruby Tests

テスト最適化ツールキット TestProf gem で Factory 軽量化。

  1. EventProf で Factory 処理の思いテストを特定。
  2. FactoryProf で階層の深い Factory、使用率の高い Factory を特定。flame graph でも可視化可能。
  3. FactoryDefault で階層の深い Factory のアソシエーションを再利用。
  4. AnyFixture で使用率の高い Factory を fixture に。

9 Ruby Conferences Worth Seeing This Summer

夏の Ruby カンファレンスまとめ。

Tutorials

Railway Oriented Programming in Ruby

dry-transaction gem で鉄道指向プログラミングを実現。

Upgrading Rails 4 Controller Tests to Rails 5

Rails 4 コントローラテストのリクエスト発行メソッドの引数を Rails 5 のキーワード引数に移行する方法。

  1. rails-forward_compatible_controller_tests gem でキーワード引数を Rails 4 にバックポート。
  2. rubocop -a --only Rails/HttpPositionalArguments でキーワード引数に変換。
  3. rails5_xhr_update gem で xhr メソッドを変換。

Active Record's .first and .last May Not Mean What You Think

Active Record の .first .lastcreated_at 順ではなく id 順だよー、という注意書き。

Rails Gaining a Eumerable#index_with Method

Hash のキーを指定する Enumerable#index_by の次に、Hash の値を指定する Enumerable#index_withActiveSupport に追加された。

Running Chrome Headless, Selenium and Capybara Inside GitLab CI and Docker

Docker コンテナ内に動かなくなった Chrome Headless テストを --no-sandbox オプションで実行することで動くようにした話。

Faster JSON Generation using Postgres's JSON Function

重くなりがちな Ruby での JSON 生成を、PostgreSQL に委任することで軽量化。

Quick Tip: Content-Type application/json by Default in Rails 5

Rails APIContent-Type をデフォで application/json にしてくれるミドルウェア

Ruby's Magical 'Enumerable' Module

Enumerable Enumerator で連結リストを実装してみた話。

The Case for 'before_validation' Callback: Complex State Normalization

オブエクトの状態を正規化するなら before_validation 使っていいよ、という主張。

Code & Tools

Stealth: A Framework for Building Conversational Bots

チャットボット用 MVC フレームワーク gem。

Niceql: Colorized SQL Formatting in Ruby

irbSQL 出力をフォーマット、シンタックス・ハイライトしてくれる gem。

29+ Ruby Gems For Building Command Line Programs

CLI 開発用 gem まとめ。

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

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

http://rubyweekly.com/issues/400rubyweekly.com

Highlights

Actionable Tips to Improve Web Performance with Rails

Rails ウェブパフォーマンス向上まとめ。

  • フラグメントキャッシュ
  • カウンターキャッシュ
  • ページキャッシュ
  • etaglast_modified HTTP ヘッダー
  • ActiveStorage
  • HTTP/2、HTTP/2 PUSH
  • gzip ではなく brotli で圧縮
  • Heroku ではなく独自サーバ
  • dns-prefetchprefetchprerenderpreconnect

Pagy: The 'Ultimate' Pagination Ruby Gem

kaminariwill_paginate より遥かに軽いページネーション gem。

Building an API Client Using the Builder Pattern

ビルダーパターンでチェーン可能・イミュータブルな API クライアントを実装した話。

The Performance Impact of Removing OOBGC at GitHub

Aaron Patterson 先生が Github の OOBGC を外したことで CPU 時間を 10% 短縮できた。

Ryan Davis on Asking for Help for Contributing to Ruby

minitestsexp_processorruby_parserhoeflayflog の作成者 Ryan Davis が Patreon 支援者募集中。

RubyGems 2.7.7 Released

RubyGems 2.7.7 リリース。

Do We Need Dependency Injection in Ruby?

依存性の注入のメリットをうまく言葉にできなかった筆者が Test Double 社員の意見を集めた。

  • 依存関係が明確になる
  • モックだとテストが Arrange・Assert・Act パターンから外れちゃう
  • モックはデバッグしづらい
  • Sandi Metz の本読め

Tutorials

Ruby 2.5 Added Lazy Proc Allocation for Block Parameters

Ruby 2.4 以前では、メソッドのブロック引数を内部メソッドに渡すたびに Proc オブジェクトに変換していた。 Ruby 2.5 では、Proc オブジェクトへの変換が遅延評価になり、高速化に繋がった。

Separating Data and Code in Rails Architecture

Root 社の、極端に状態を持たせていない、準関数型に近い Rails アプリの話。

Securing Dependencies for Rails 5.2 Active Storage

ActiveStorage をサポートするようになった Heroku の FFmpeg セキュリティ対策。

  • FFmpeg脆弱性が頻繁に報告されるが、メンテナーが迅速に対応してくれている。
  • Ubuntu のパッケージマネージャは FFmpeg の最新版に追いついていないため、Heroku 独自バイナリーをコンパイルすることに。
  • ActiveStorage に使われていない機能をコンパイルから外すことで、バイナリー軽量化できた。

Monitoring SSL Certificate Expiry with Ruby

SSL 証明書有効期限監視スクリプト

Code & Tools

Introducing Stealth, a Framework for Conversational Voice and Chatbots

チャットボット用 MVC フレームワーク gem。

RoleCore: A Rails Engine Providing Role-Based Access Control

認可用 Rails Engine。CanCanCan 併用可能。

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

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

http://rubyweekly.com/issues/399rubyweekly.com

Highlights

Ruby's New Exception Keyword Arguments

Ruby 2.6 の exception キーワード引数で例外を投げるかどうか指定できるようになる。

Rewriting Deprecated APIs with the 'parser' Gem

deprecated ソースコードparser gem で AST に変換して書き換える話。

Deprecating Paperclip: What This Means to You

ActiveStorage がリリースされたため、Paperclip gem が deprecated になった。

Gotham Ruby Conf 2018: A One Day Ruby Event in NYC on June 16

ニューヨークの GORUCO がいよいよ。

How Phusion Redesigned Passenger's App Error Page

Passenger の development モードのエラー画面のデザインを改善した話。

Tutorials

How to Mitigate DDoS using Rack::Attack

Rack::Attack ミドルウェアで DDoS 防止。

Build an Effective Initial Deployment Pipeline

筆者自慢の初期 CI/CD パイプライン。

push するたびに

  1. test 環境コンテナにデプロイされる
  2. staging 環境で migration が実行される
  3. テストが実行される

テストが通ったコミットを master ブランチに push するたびに

  1. staging 環境コンテナにデプロイされる
  2. production 環境 DB がバックアップされ、staging 環境でダンプされる
  3. staging 環境で migration が実行される

テストが通ったタグを push するたびに

  1. production 環境コンテナにデプロイされる
  2. production 環境 DB がバックアップされる
  3. production 環境で migration が実行される

Securing User Emails in Rails

attr_encrypted gem で DB 内メアドを暗号化し、blind_index gem で検索可能に。

Adding GDPR Compliance to a Rails App

Rails アプリ、ブログの GDPR 対策。

How to Create Charts in a Rails App with Just One Line of Code

chartable gem で .analytics 取得用メソッドを ActiveRecord モデルに生やし、chartkick gem で可視化。

Code & Tools

Discard: Soft Deletes for ActiveRecord Done Right

paranoia gem のメンテナーが新しく作った ActiveRecord 論理削除用 gem。

acts_as_paranoidparanoia gem よりは魔術が少ない:

  • default_scope を生やさない
  • #delete #destroy を上書きせず、新しいインタフェースを生やす
  • dependent: :destroy で関連レコードを削除しない

Ralyxa: A Ruby Framework for Interacting with Amazon Alexa

Amazon Alexa ウェブサービスフレームワーク

aws_public_ips: Fetch All Public IP Addresses Tied to Your AWS Account

AWS アカウントの公開 IP を全て表示してくれる CLI gem。

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

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

http://rubyweekly.com/issues/396rubyweekly.com

Highlights

Top 10 Errors From 1000+ Rails Projects (and How to Avoid Them)

Rails アプリのよくあるエラーと解消方法まとめ。

Ruby's New Infinite Range Syntax

上限無限 Range(例:3..Float::INFINITY)は Ruby 2.6 以降、3.. で書けるようになる。

配列の最後までの #slice でも使える: array[3..]

The Rails Hosting Survey 2018 Results Are Out

2018 年 Ruby 開発者世論調査結果。

The Future of Rails 6: Scalable by Default

RailsConf で発表された Rails 6 方針スライド。

  • スケーリング
  • テスト並列実行
  • 複数 DB

Articles & Tutorials

Direct, Secure Rails Client-Side File Uploads to AWS S3 Buckets

Fog gem で AWS S3 にファイルをアップロードする手順。

Using Singleton Objects as Default Arguments

nil などのデフォ引数をシングルトンにする話。

Rails' Built-In Cache Stores: An Overview

Rails の Cache Store まとめ。

Event Sourcing Made Simple

Kickstarter 社の投資者宛てコンテンツ配信プラットフォーム Drip を Event Sourcing で実装してみた話。

Testing Example Code In Your Jekyll Posts

Jekyll 記事内コードをテストしてくれる jekyll-include_snippet プラグイン紹介。

Rails 5.2's Date#prev_occurring and Date#next_occurring

Rails 5.2 の Date#prev_occurringDate#next_occurring で前後の指定した曜日の日付取得。

Code & Tools

A Nokogiri Cheat Sheet

HTML・XML パース用 Nokogiri gem の API をまとめたチートシート

dotenv: A Gem to Load Environment Variables from '.env'

Rails 5.2 対応になった dotenv gem。

Embedded: Persist Value Objects in Active Record Attributes

バリューオブジェクト ⇄ ActiveRecord マッピング用 gem。ActiveRecordcomposed_of の冗長な configuration を convention で省いてくれたのが売り。

Database Cleaner: Strategies for Cleaning Databases in Ruby

テスト DB をまっさらにしてくれる gem がここ数週間整理されてきた。