Ruby Weekly #400: 日本語サマリー
職場の Slack 窓で Ruby Weekly メルマガが毎週配信されます。その中から面白そうなものをピックアップして、日本語で簡単なサマリーを書くようにしています。そのサマリーをここでまとまさせていただきます。くだけた日本語で失礼いたします。
http://rubyweekly.com/issues/400rubyweekly.com
Highlights
Rails ウェブパフォーマンス向上まとめ。
- フラグメントキャッシュ
- カウンターキャッシュ
- ページキャッシュ
etag
、last_modified
HTTP ヘッダー- ActiveStorage
- HTTP/2、HTTP/2 PUSH
- gzip ではなく brotli で圧縮
- Heroku ではなく独自サーバ
dns-prefetch
、prefetch
、prerender
、preconnect
kaminari、will_paginate より遥かに軽いページネーション gem。
ビルダーパターンでチェーン可能・イミュータブルな API クライアントを実装した話。
Aaron Patterson 先生が Github の OOBGC を外したことで CPU 時間を 10% 短縮できた。
minitest、sexp_processor、ruby_parser、hoe、flay、flog の作成者 Ryan Davis が Patreon 支援者募集中。
RubyGems 2.7.7 リリース。
依存性の注入のメリットをうまく言葉にできなかった筆者が Test Double 社員の意見を集めた。
- 依存関係が明確になる
- モックだとテストが Arrange・Assert・Act パターンから外れちゃう
- モックはデバッグしづらい
- Sandi Metz の本読め
Tutorials
Ruby 2.4 以前では、メソッドのブロック引数を内部メソッドに渡すたびに Proc
オブジェクトに変換していた。
Ruby 2.5 では、Proc
オブジェクトへの変換が遅延評価になり、高速化に繋がった。
Root 社の、極端に状態を持たせていない、準関数型に近い Rails アプリの話。
ActiveStorage をサポートするようになった Heroku の FFmpeg セキュリティ対策。
- FFmpeg は脆弱性が頻繁に報告されるが、メンテナーが迅速に対応してくれている。
- Ubuntu のパッケージマネージャは FFmpeg の最新版に追いついていないため、Heroku 独自バイナリーをコンパイルすることに。
- ActiveStorage に使われていない機能をコンパイルから外すことで、バイナリー軽量化できた。
Code & Tools
Introducing Stealth, a Framework for Conversational Voice and Chatbots
RoleCore: A Rails Engine Providing Role-Based Access Control
Ruby Weekly #399: 日本語サマリー
職場の Slack 窓で Ruby Weekly メルマガが毎週配信されます。その中から面白そうなものをピックアップして、日本語で簡単なサマリーを書くようにしています。そのサマリーをここでまとまさせていただきます。くだけた日本語で失礼いたします。
http://rubyweekly.com/issues/399rubyweekly.com
Highlights
Ruby 2.6 の exception
キーワード引数で例外を投げるかどうか指定できるようになる。
deprecated ソースコードを parser gem で AST に変換して書き換える話。
ActiveStorage がリリースされたため、Paperclip gem が deprecated になった。
Gotham Ruby Conf 2018: A One Day Ruby Event in NYC on June 16
ニューヨークの GORUCO がいよいよ。
Passenger の development モードのエラー画面のデザインを改善した話。
Tutorials
Rack::Attack ミドルウェアで DDoS 防止。
筆者自慢の初期 CI/CD パイプライン。
push するたびに
- test 環境コンテナにデプロイされる
- staging 環境で migration が実行される
- テストが実行される
テストが通ったコミットを master ブランチに push するたびに
- staging 環境コンテナにデプロイされる
- production 環境 DB がバックアップされ、staging 環境でダンプされる
- staging 環境で migration が実行される
テストが通ったタグを push するたびに
- production 環境コンテナにデプロイされる
- production 環境 DB がバックアップされる
- production 環境で migration が実行される
attr_encrypted gem で DB 内メアドを暗号化し、blind_index gem で検索可能に。
Rails アプリ、ブログの GDPR 対策。
- Nginx ログロテ、IP 匿名化
- Rails ログ匿名化
- Google Analytics IP 匿名化
- 利用規約、承諾チェックボックス追加
- 既存ユーザに利用規約承諾メール送信
How to Create Charts in a Rails App with Just One Line of Code
chartable gem で .analytics
取得用メソッドを ActiveRecord モデルに生やし、chartkick gem で可視化。
Code & Tools
paranoia gem のメンテナーが新しく作った ActiveRecord 論理削除用 gem。
acts_as_paranoid、paranoia gem よりは魔術が少ない:
default_scope
を生やさない#delete
#destroy
を上書きせず、新しいインタフェースを生やすdependent: :destroy
で関連レコードを削除しない
aws_public_ips: Fetch All Public IP Addresses Tied to Your AWS Account
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 アプリのよくあるエラーと解消方法まとめ。
上限無限 Range
(例:3..Float::INFINITY
)は Ruby 2.6 以降、3..
で書けるようになる。
配列の最後までの #slice
でも使える: array[3..]
RailsConf で発表された Rails 6 方針スライド。
- スケーリング
- テスト並列実行
- 複数 DB
Articles & Tutorials
Direct, Secure Rails Client-Side File Uploads to AWS S3 Buckets
Fog gem で AWS S3 にファイルをアップロードする手順。
nil
などのデフォ引数をシングルトンにする話。
Rails の Cache Store まとめ。
Kickstarter 社の投資者宛てコンテンツ配信プラットフォーム Drip を Event Sourcing で実装してみた話。
Jekyll 記事内コードをテストしてくれる jekyll-include_snippet プラグイン紹介。
Rails 5.2 の Date#prev_occurring
、Date#next_occurring
で前後の指定した曜日の日付取得。
Code & Tools
HTML・XML パース用 Nokogiri gem の API をまとめたチートシート。
Rails 5.2 対応になった dotenv gem。
バリューオブジェクト ⇄ ActiveRecord マッピング用 gem。ActiveRecord の composed_of
の冗長な configuration を convention で省いてくれたのが売り。
テスト DB をまっさらにしてくれる gem がここ数週間整理されてきた。
Ruby Weekly #395: 日本語サマリー
職場の Slack の #ruby 窓で Ruby Weekly メルマガが毎週配信されます。その中から面白そうなものをピックアップして、日本語で簡単なサマリーを書くようにしています。そのサマリーをここでまとまさせていただきます。くだけた日本語で失礼いたします。
http://rubyweekly.com/issues/395rubyweekly.com
Highlights
例外発生時にスタックトレースなど吐かずに無言で終了してたスレッドは、Rails 2.5 移行デフォで吐くようになった。
実験的な高パフォーマンス TruffleRuby がベースにしてる GraalVM。
NGINX Unit 1.0: An App Server That Supports Ruby (and Others)
NGINX のアプリサーバ NGINX Unit v1.0 リリース。
Sequel、Roda のメンテナー Jeremy Evans 先生がカリフォルニア州監査局で 12 年も働いた経験を語ったスライド。
- 政府機関発注の IT システムはほとんど高コストの巨大 SAP システムだが、カリフォルニア州監査局は低コストの小規模 Ruby ウェブアプリ
- アプリが 3 つある:
- 局員管理などの局内処理用イントラネットサイト
- 入局試験や応募者評価用の採用サイト
- 監査完了後の政府機関への改善案の遂行までのワークフロー管理サイト
- セキュリティ第一
Tutorials
Full Text Searching Linux Man Pages with Elasticsearch and Ruby
Linux の man
ページの ElasticSearch 検索機能実装手順。
ボットや検索エンジンのクローラーが発生させたエラーを is_crawler gem で抑える方法。エラーログのノイズなどを減らすように。
実験的なパターンマッチング gem。
2 年も前に Ruby 2.3 で導入された機能の振り返り。
&.
Hash#dig
、Array#dig
kill -9
などしたら、SignalException
を rescue
していても、処理が終わる前に強制終了してしまう。ちゃんと処理するには Signal.trap
が必要。
漢字フラッシュカードゲームの正解判定ロジックを「求めるな、命じよ」パターンでリファクターした話。
メンテされなくなった state_machine gem から aasm gem に移行した手順。
Code & Tools
WordPress ブログの RSS フィード取得用 gem。
ActionPolicy: Authorization Framework for Ruby and Rails Apps
Ruby、Rails アプリ向け認可フレームワーク gem。Pundit の物足りないところを補ってくれるらしい。
JSONAPI::Consumer: ActiveModel-Compliant Framework for Consuming JSON API Services
JSON 型 API クライアント gem。インタフェースは ActiveModel 同等。
kms_encrypted: Simple, Secure Key Management for attr_encrypted
attr_encrypted gem がキー管理までやってくれないので、この gem が KMS 方式で管理してくれる。Amazon KMS、Google KMS 対応。
Rails ビューの partial を AJAX で非同期ロード、レンダー高速化してくれる gem。
Ruby Weekly #394: 日本語サマリー
職場の Slack の #ruby 窓で Ruby Weekly メルマガが毎週配信されます。その中から面白そうなものをピックアップして、日本語で簡単なサマリーを書くようにしています。そのサマリーをここでまとまさせていただきます。くだけた日本語で失礼いたします。
http://rubyweekly.com/issues/394rubyweekly.com
Highlights
Rails 5.2 リリース!Basecamp、Shopify で絶賛稼働中。
- Active Storage
- Redis Cache Store
- HTTP/2 Early Hints
- Bootsnap
- CSP 用 DSL
- Credentials
- Webpack 3.0 対応
行カバーレッジのみ分析していた Coverage
クラスは、Ruby 2.5 でメソッド、ブランチのカバレッジまで分析してくれるようになった。
A Dive into Ruby CVE-2017-17405: Identifying a Vulnerability in Ruby's FTP Implementation
Net::FTP
が裏で呼んでいた libcurl 脆弱性の解説。
Heroku から安いクラウドに移行する手順。Heroku の便利な devops ツールは Dokku に。
Google 製の gperftools スイートの tcmalloc で Ruby の malloc プロファイリング。SVG の図で可視化までしてくれる。
Hanami 1.2.0 リリース!
- HTTP/2 Early Hints
- UJS
- REPL 付きの開発環境エラーページ
- CLI フック
- 外部 gem から操作可能なプロエクトレベルの Rack ミドルウェア
Hanami::Repository
でカスタムの書き込みコマンドが定義可能に
Articles & Opinion
Launchy gem + binding.pry
で Capybara のテストをデバッグする便利ヘルパー。
Twilio で Rails アプリ発 SMS 通知機能実装。
面白いと思ったのはそもそもの課題。ニューヨークは道路掃除のため、駐車が許可されている路上スペースが定期的に変わる。変わったタイミングの通知が欲しかったらしい。車を移動させて罰金から逃れるように。
migration のバージョン番号を補完してくれる .bash_profile 用スクリプト。
意外と Rails だった 5 サイト。
複雑な WebSocket しかないと思われがちリアルタイム通信だが、サーバからの一方的なプッシュだけなら、比較的シンプルServer-Sent Events で十分。
ポーリングとも比較している。
豆知識:Facebook Messenger (ブラウザー版)は意外とポーリングで実装されている。
Code, Tools & Demos
stackprof または memory_profiler で Sidekiq をプロファイリングしてくれるミドルウェア gem。ダンプは S3 にエクスポート可能。
実験的なパターンマッチング gem。
The Ultimate Guide to Ruby Timeouts: Timeouts for Popular Ruby Gems
人気 gem のタイムアウト設定方法まとめ。
Ruby Weekly #393: 日本語サマリー
職場の Slack の #ruby 窓で Ruby Weekly メルマガが毎週配信されます。その中から面白そうなものをピックアップして、日本語で簡単なサマリーを書くようにしています。そのサマリーをここでまとまさせていただきます。くだけた日本語で失礼いたします。
http://rubyweekly.com/issues/393rubyweekly.com
Highlights
String#unpack
脆弱性の解説。
Shrine でお馴染みの ImageProcessing gem が 1.0 にバージョンアップ。
ImageProcessing::MiniMagick
がチェーン可能な API になった。- EXIF メタデータを元に自動回転補正。
- サムネールをよりシャープにする後処理。
ImageProcessing::Vips
でサムネール生成高速化。
News
sass gem が deprecate され、来年メンテ終了。Dart Sass へ移行推奨。
Isle of Ruby 2018: A British Ruby Event on April 13-15 (Exeter, UK)
今週末はイギリス・エクセター市の Isle of Ruby カンファレンス。
Tutorial
SendGrid、Twilio、Stripe、Contentful の SDK gem のエラー処理比較。
SendGrid は 400、401 発生時に例外を投げず、その後のヌルポなどで初めてエラーが発覚。
Twilio は Twilio::REST::TwilioError
を投げるが、エラークラスでもエラーメッセージでもエラー内容が分からない。
Stripe は 400、401 それぞれ専用のエラークラスを投げ、分かりやすいエラーメッセージを添えてくれる。
Contentful は 400、401 それぞれ専用のエラークラスを投げ、API レスポンスをパースしてエラーメッセージに埋め込んでくれる。
ローカル変数アレルギーはアンチパターンだという主張。
Tools
Gemsmith: A Command Line Interface for Smithing New Ruby Gems
gem 開発用 CLI。
Code
Blueprinter: A Declarative and Fast Object to JSON Serializer
Ruby Weekly #392: 日本語サマリー
職場の Slack の #ruby 窓で Ruby Weekly メルマガが毎週配信されます。その中から面白そうなものをピックアップして、日本語で簡単なサマリーを書くようにしています。そのサマリーをここでまとまさせていただきます。くだけた日本語で失礼いたします。
http://rubyweekly.com/issues/392rubyweekly.com
Highlights
NGINX のアプリサーバ NGINX Unit が Ruby にも対応できるようになった。
Passenger の新しい Fuse Panel 管理画面紹介。
News
ニューヨークの GORUCO 2018、CFP はあと 2 週間。
Tutorial
How to Deploy Rails Apps with Ansible, Capistrano and Semaphore
- Ansible で AWS 上サーバ構築する手順
- Capistrano で Rails アプリをデプロイする手順
- Semaphore で CI をセットアップする手順
gemspec の metadata
に changelog_uri
を指定することで、RubyGems.org からリンクを張る。
デバッグ中に出力ノイズを省く戦略。
- 標準出力を
/dev/null
にリダイレクト。 $stderr.puts
でログを吐く。
Tools
コンフィグやサービスオブジェクトを管理してくれる依存性注入フレームワーク。
Code
オンラインメンテで問題を起こしそうな migration を検知してくれる gem。
ActiveRecord の SQL ログやコンソール出力を pp
のようにフォーマットしてくれる gem。
ネットワークをスキャン・可視化・管理する Rails アプリ。Docker イメージ付き。
イベント駆動アーキテクチャーのイベント永続化 Ruby Event Store gem。