rastam’s blog

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

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

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

http://rubyweekly.com/issues/378rubyweekly.com

Highlights

An Update on the Progress of Ruby 3x3

Ruby 3x3 の進捗。

  • Ruby 2.5.0 はスピードが Ruby 2 の 165%。
  • JIT のブランチが 2 本進んでる。
  • 並列実行は笹田耕一さんが実装中。
  • データ型は Matz 検討中。

Malloc Can Double Multi-Threaded Ruby Program Memory Usage

malloc のせいで Sidekiq プロセスが 1 GB にまで膨れ上がっちゃう問題。メモリのフラグメンテーションを起してるらしい。解決案は

  1. MALLOC_ARENA_MAX=2〜4 環境変数
  2. malloc の代わりに jemalloc 採用
  3. Aaron Patterson 先生実装中の GC

Building a Modern Frontend with Rails and JS

Rails のモダンなフロントエンド実装チュートリアル

Bindings in Ruby: Behind the Magic of Blocks

ブロックの中でもブロック外変数を読み書きできるようにしてくれる binding の解説。

Defining Class Methods In Ruby

筆者が class << self でのクラスメソッド定義を好む理由。

  • シングルトンクラスのスコープ内での定義だから。def self.method はスコープ外からの定義。
  • private protected 領域が使える。def self.methodprivate_class_method しかない。

News

RubyMine 2017.3 Released

RubyMine 2017.3 リリース。

  • パフォーマンス向上
  • 外部キーワードに飛べるようになった
  • Code Insight 改善
  • ネストしたプロジェクトへのサポート改善
  • WSL(WindowsBash)対応
  • メソッド抽出の private public protected 指定可能
  • エディター内 rubocop --auto-correct
  • Puppet テンプレート同梱
  • API テスト用エディター内 REST クライアント
  • JavaScriptCSS、Vue.js コード補完改善
  • git rebase -i
  • SQL 生成ツール

'99 Bottles of OOP' Book is 40% Off Till Next Week

99 Bottles of OOP 本は来週まで 40% 割引!

Julia Evans Taking a Sabbatical to Work on Ruby Profiling Tools

Unix を題にした zine で有名な Julia Evans が Ruby プロファイリングツール開発のため 3 ヶ月休職。

Tutorial

Using XPath to Rewrite Ruby Code

XPathRuby コードを書き換える手順。

  1. parser gem で Ruby コードを AST に変換。
  2. REXML または nokogiri で AST を XML に変換。AST 内オブジェクト ID を XML タグの属性として書き込む。
  3. XPath で書き換えたいコードを指定し、該当タグのオブジェクト ID で該当 AST ノードを取得。
  4. AST ノードを買い換える。

A Refresher on Procs, Blocks, and Lambdas

proclambda・ブロックいろいろ。

  • proclambdareturn の挙動
  • proclambda 引数の数チェック
  • & 演算子でブロックを proc に変換

Roll Your Own XML Templater in Ruby

Builder gem + TiltXML テンプレートエンジンを実装した話。

Using Elasticsearch with a Basic Rails App

Rails アプリの elasticsearch 検索機能実装手順。elasticsearch 内インデックスは Kibana で確認。

Graceful Switching of Worker Processes on Heroku

Heroku 上での稼働中 Rails アプリのデプロイ時に、ワーカープロセスをグレースフルに切り替えるための Procfile 設定。

Opinion

Never Edit a Method, Always Rewrite It

細胞の再生のように、メソッドを小さいコンポーネント(純粋関数)として書き、変更が必要になったら修正ではなく一から書き直せば、長生きするシステムが生まれるのでは、と提案した Chad Fowler 先生の RubyConf 2017 トーク。このルールを守った開発は

  • 再利用性にどんな影響を与える?
  • 複雑さにどんな影響を与える?
  • テストにどんな影響を与える?
  • 命名にどんな影響を与える?

といった疑問を述べた記事。(答えは出してなく、あくまで質問を挙げているだけ)

Why Teach Ruby?

半年前に Ruby を教えるのをやめた Coding Dojo で騒ぎになった Ruby コミュニティ。その一方で Ruby を教え続けている Flatiron School。学校にとって一番大事なのは、卒業生の雇用先の需要ではなく、いかに学生がプログラミングのことを好きにさせること。Ruby がそれに最適だと。

Code

Passwordless: Add Password-Free Authentication to a Rails App

メール本文内リンクでのログイン用 gem。

Mobility: A Pluggable Ruby Translation Framework

データ i18n フレームワーク用 gem。

rack-contrib 2.0: Now Supports (Only) Rack 2.x and Ruby 2.2+

rack-contrib 2.0.0 リリース。

  • Rack 1.x サポート終了
  • Ruby 2.1 以前サポート終了