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。
Ruby Weekly #391: 日本語サマリー
職場の Slack の #ruby 窓で Ruby Weekly メルマガが毎週配信されます。その中から面白そうなものをピックアップして、日本語で簡単なサマリーを書くようにしています。そのサマリーをここでまとまさせていただきます。くだけた日本語で失礼いたします。
http://rubyweekly.com/issues/391rubyweekly.com
Highlights
Rails 5.2.0 RC2 新機能まとめ
- Active Storage
- Redis Cache Store
- HTTP/2 Early Hints
- Bootsnap
- CSP 用 DSL
- Credentials
Discourse がゼロダウンタイムで DB スキーム変更を実現できた秘密。
schema_migrations
テーブルにgit_version
などのカラム追加- カラム・テーブル削除は migration ではなく seed で
- migration でカラム・テーブル削除ができないように pg gem をパッチ
デプロイ手順は
ブラウザー検知 gem。
新規 Rails アプリ作成用テンプレート。
News
RailsConf 2018 スケジュール公開。
Tutorial
DB 内 i18n データ永続化用定番 gem Globalize では、各モデルに紐付いた モデル名_translations
テーブルで i18n データを保存。しかし取得時には、JOIN
する負荷がかかってしまう。
Mobility gem の JSON・JSONB ストラテジーだと、モデルと同一テーブルの JSON 型カラムに保存することで、JOIN
なしで取得できる。
なお Globalize 流ストラテジーなども完備している Mobility は多様性・拡張性抜群。
Pwned Passwords API を叩くことで、パスワードが流出しているかどうかの validation を実装する手順。
gem の中身を確認する方法 2 つ。
- リポジトリを
git clone
。 bundle show
のパスにcd
。
StringIO
を注入することで、ログ出力をテストする手順。
Story
6 年間の職歴を経て、Rails 2.3 → Clojure → Java 8 → Rails 4.2 で開発した経験談。
- Rails 2.3 のモノリスを 40% ぐらいリファクター・改善してから Clojure 屋さんに転職。
- Clojure は高速 + エンジニアの生産性が良かったが、エンジニアの採用が難しくて事業がなかなか成長できなかった。
- 意外とリーンな Java 屋さんに転職して、エンジニアの生産性も意外と良かった。何でもかんでも POJO 作るのがちょっとめんどくさかったのにもかかわらず。静的言語のおかげで大規模リファクターができた。
- Rails 4.2 は使い勝手が 2.3 とはそんなに変わらない割には、アップグレードが辛い。後方互換性の優れている Clojure・Java に比べて。
- いろんな言語の経験はエンジニアリング・マネージャには必須だが、シニア・エンジニア募集案件に応募するには特定言語の専門知識が足りない。
Code
Rails-DB-Interactive: Interactive Database Diagrams for Rails
Rails アプリのモデル図を生成する JavaScript アプリ。
Ruby Weekly #390: 日本語サマリー
職場の Slack の #ruby 窓で Ruby Weekly メルマガが毎週配信されます。その中から面白そうなものをピックアップして、日本語で簡単なサマリーを書くようにしています。そのサマリーをここでまとまさせていただきます。くだけた日本語で失礼いたします。
http://rubyweekly.com/issues/390rubyweekly.com
Highlights
bundle update
の謎メッセージ Bundler attempted to update 〇〇〇 but its version stayed the same
を調べて解消した話。gem の古いバージョンに依存している gem があることが原因だが、どの gem なのかは bundler だけでは知り得ない。bundler-stats gem で邪魔な gem を特定し、両 gem 一気に bundle update
することで解決。この機能はこれから bundle show
に入る可能性があるらしい。
Ruby に対応するように、AWS Lambda や Azure Functions などの FaaS への請願。
yield_self
を活かすことで、複雑な ActiveRecord クエリオブジェクトをリファクターした ThoughtBot。
25 年もの Ruby へのコミットを可視化した動画。
News
テストの並列実行を Rails 6.0 に追加したプルリクエスト。デフォールトでは、プロセスのフォークで実現しているが、スレッドでの実行も任意で選べる。
Coinbase OSS 基金は今月 Ruby 関連プロジェクトに献金することになった。補助対象プロジェクトは Ruby Together、RSpec、Rubocop。
Tutorial
Ruby 2.5 の Exception#full_message
でフォーマットされた例外とバックとレースを取得できるようになった。
プロキシデザパタは昔、Ruby では method_missing
で実装されていたが、デメリットとしては:
- プロキシオブジェクトを呼ぶ手間があった
- パフォーマンスのコストがかかった
- クラスメソッドまで対応するには別のプロキシオブジェクトが必要になった
- どんなメソッド呼び出しでも拾ってしまい、責務の範囲が広すぎた
Ruby 2.0 以降は prepend
で上記問題点解消。
Run Capybara Feature Specs with Selenium and Headless Chrome
CircleCI 2.0 で Chrome Headless + Selenium の Capybara feature spec を実行する手順。おまけに並列実行の CircleCI 設定。
TLSv1.0、v1.1 が非対応になったせいで、バージョンアップを迫られてきた Ruby 1.9 ユーザだが、それでもバージョンアップがまだできないというユーザ向け一時しのぎの手順。
Tools
Test Kitchen: An Integration Tool for Testing Infrastructure Code
インフラコードのテスト用のテストフレームワーク(ServerSpec など)や実行先(Vagrant、Docker、EC2、GCE、DigitalOcean など)を管理するツール。
Code
Rust で Pathname を高速化した FasterPath gem が最近更新されている。
OAuth 2 用 Rails Engine。
Ruby Weekly #389: 日本語サマリー
職場の Slack の #ruby 窓で Ruby Weekly メルマガが毎週配信されます。その中から面白そうなものをピックアップして、日本語で簡単なサマリーを書くようにしています。そのサマリーをここでまとまさせていただきます。くだけた日本語で失礼いたします。
http://rubyweekly.com/issues/389rubyweekly.com
Highlights
メソッドレベルのプロファイリング用 gem Timeasure を実装した経緯。
- NewRelic より柔軟なインタフェース提供
- ruby-prof gem より軽くて本番環境でも使える
Ruby 2.5 のバックトレース出力順のデモ。
絞り込み条件用 URL 引数を scope などにマッピングしてくれる gem。
News
プログラミング言語人気ランキング TIOBE で Ruby が 12 位から 9 位に上昇。
今年前半の Ruby カンファレンスまとめ。
Tutorial
Ruby のメモリ関連用語解説。
TensorFlow ライブラリの機械学習で CAPTCHA を突破した話。
Rails 4.2→5.0 バージョンアップ時の懸念点まとめ。
Opinion
Ryan Bigg 先生が Hanami を試した感想。
- Repository パターンのおかげで、モデル層関心の分離ができるのが良い
- Action 別クラスのおかげで、コントローラ層関心の分離ができるのが良い(params の validation とか)
- View クラスのおかげで、ヘルパーがグローバルで公開されないのが良い
Tools
依存している gem のライセンス管理用 gem。
Rails サーバ側パフォーマンス計測データをレスポンスのヘッダーに埋め込み、Chrome コンソールで確認できるようにしてくれる gem。
Code
高スループット・低レイテンシーのログ処理用 gem。NewRelic、Sentry、HoneyBadger、ElasticSearch などのログ出力先に対応。
honeypot 型 captcha 用 gem。非表示チェックボックスでボット排除。
フィーチャフラグ定番 gem の最新リリース。