Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails関連

週刊Railsウォッチ(20191225後編)Ruby 2.7リリースまで後少し→出ました、キーワード引数変更の公式ドキュメント、Railsセキュリティ修正でredis-storeがエラーほか

こんにちは、hachi8833です。今年最後のRailsウォッチ後編です。日本時間12/25夕方の時点のRubyはまだトンテンカンテンやっているようです👀。数日前まではrdocなどドキュメントの更新が増えてリリース間近かと思いきや、直近のコミットを見ているとさまざまな修正が続々入っていてどきどきしています。コミッターの皆さま本当にお疲れさまです。


github.com/ruby/ruby/commits/masterより

2.7 rc2のNEWS↓を改めて見てみると改良・変更が山のように多いですね😳。アグレッシブ...


新機能のnumbered parameterからexperimentalが取れましたね。つい「なんぱら」と呼んでしまいます。


キーワード引数のwarningメッセージも細かく改善されています。

# class.c#L2054
- rb_warn("The last argument is used as keyword parameters");
+ rb_warn("Using the last argument as keyword parameters is deprecated");

以下のように改行を挟んだメソッドチェーンの間にコメントを置けるようになったのも初めて知りました。

foo
# .bar
.baz # => foo.baz

なお直近の@81e3770↓では、(..1)minをエラーにするよう変更されていました。(1..)maxはその前からエラーになってたようなので合わせたのかも🤔。

追記(2019/12/26)ArgumentErrorからRangeErrorへの変更というご指摘をいただきました🙇。

# 同コミットより
+ assert_raise(RangeError) { (..1).min }
+ assert_raise(RangeError) { (...1).min }

2.7の新機能について詳しくはjnchitoさんの一連の記事をご覧いただくのが早いですね。


追記: 本号公開直後にRuby 2.7がめでたくリリースされました。


  • 各記事冒頭には⚓でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ
  • 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄
  • 毎月第一木曜日に「公開つっつき会」を開催しています: お気軽にご応募ください

お詫び: 今回のつっつき動画に音声が入っていなかったため、最小限のつっつきボイスとなっています🙇。

お知らせ: 週刊Railsウォッチ「第18回公開つっつき会」(無料)

第18回目公開つっつき会は、来年1月09日(木)19:30〜にBPS会議スペースにて開催されます。今回から会場のPubスペースが隣の部屋に移ります。

週刊Railsウォッチの記事やここだけの話にいち早く触れられるチャンス!発言・質問も自由です。皆さまのお気軽なご参加をお待ちしております🙇。

臨時ニュース: Railsセキュリティアップデート6.0.2.1 / 5.2.4.1でredis-storeがエラーになる可能性

前回のウォッチ20191223にも追記しましたが、こちらにも再録します。

rack gemのセキュリティアップデート2.0.8がリリースされ、Railsも6.0.2.1でrack >= 2.0.8が指定された。アップデートしてみたところ、redis-storeがマウンタブルエンジン(sidekiqのwebインターフェイスらしい)のところで動かなくなったっぽい。
同issueより大意

redis-storeをお使いの方は、本件が解決するまでセキュリティアップデートを待つ必要がありそうです。
なお、同issueのコメントではredis-storeの修正2つで解決できると追記されていますが、本記事公開時点ではまだredis-storeにマージされていません。

Ruby

2.7のキーワード引数変更と待望の公式解説


つっつきボイス:「jnchitoさんがキーワード引数の変更記事をがっつり書いてくれていました🙏」「ありがたい!😂」「エッジケースがいっぱいあるけどjnchitoさんが書いたコードで影響を受けるのはわずかで済みそうだとのことです」「たしかに、こんな書き方普通しないよなみたいなの多いし😆」「皆さんがこんなに苦労しているのを見て、キーワード引数変更の難しさに納得しました😭」

「と思ってたら、ついこの間(12/12)Rubyの公式サイトにキーワード引数変更の詳しい解説記事が出ていました↓」「みんなが欲しかったヤツ🎉」「著者はmameさん、レビュアーはJeremy EvansさんとBenoit Dalozeさん😳」「jnchitoさん記事では言及されていないので入れ違いだったのかも🤔」


ruby-lang.orgより


後で上の記事を気合い入れて読んでみましたが、みっちりまとまった力作記事でした❤️。キーワード引数変更についての重要な一次資料ですね。

公式解説の見出しより:

  • 概要
  • 典型的なケース
  • どこが非推奨になるか
  • 自分のコードはRuby 2.7で壊れるか?(A:『壊れない可能性はある』)
  • 引数の委譲の扱い
  • Ruby 2.6以前
  • Ruby 3
  • Ruby 2.7
  • Ruby 2.6/2.7/3で共通に使える委譲方法(A: Module#ruby2_keywordsを使う)
  • その他の微細な変更
  • キーワード引数で非シンボルキーが使えるようになる
  • 空ハッシュにdouble splatを付けると(**{})引数が従来の[{}]ではなく空([])になる
  • 非キーワード引数を受け取らないことを示す新しい構文(**nil)が導入される
  • 自動変換を非推奨にする理由

追記: 本日つい先ほど、本命のガチ解説記事が出ました↓。日本語で真っ先に読めるのはありがたいですね😂。

Rubyコンカレンシーの進捗レポート(Ruby Weeklyより)

Ruby 3のコンカレンシーモデルについてMatzとkoichiとそれぞれ話す機会があったのでこの記事にまとめる。
同記事より抜粋

記事の見出しより:

  • コンカレンシーとパラレリズムとは
  • 非決定性が持ち込まれるとどうなるか
  • asyncfalconでRuby Webアプリを改善できるが、Ruby実装全体に効く軽量なフックで拡張したい
  • async-ioが提供するIOラッパーは多くの場合暫定的な置き換えとなる
  • コンカレンシーの選択肢:
  • Auto Fiber(#13618など)
  • ラッパー
  • 新しいメソッド
  • 新しいクラス
  • Isolateについて
  • キーワードを追加するかどうか
  • ブロッキングの発生
  • 改変の検出と通知
  • 本件はRuby Association GrantGitHub Sponsorsによって支えられている

つっつきボイス:「Auto Fiberってあったそういえば」「単なるFiberとどう違うんでしたっけ?」「RubyのFiberはcoroutineなので、fiberでマルチスレッドみたいなことをしたければ自分で待ち合わせ処理を書く必要がある、Auto Fiberはマルチスレッドみたいにコンテキスト切り替えを自動でやってくれる感じ☺️」


参考: class Fiber (Ruby 2.6.0 リファレンスマニュアル)

Thread クラスが表すスレッドと違い、明示的に指定しない限りファイバーのコンテキストは切り替わりません。またファイバーは親子関係を持ちます。Fiber#resume を呼んだファイバーが親になり呼ばれたファイバーが子になります。親子関係を壊すような遷移(例えば自分の親の親のファイバーへ切り替えるような処理)はできません。例外 FiberError が発生します。
docs.ruby-lang.orgより

参考: RubyのGuildとAuto Fiberはどういう名前になれば良いと思いますか? - Quora

(中略)AutoFiberについて。
AutoFiberはnormalpersonことEric Wongが最初にこの機能を提案した時の名前です。機能としてはI/O処理のタイミングでコンテキスト切り替えを行うが、スレッドとは異なり、タイムスライスではコンテキスト切り替えしないというものです。
FiberはCS界ではcoroutineの実現として使われており、暗黙のコンテキスト切り替えを行うAutoFiberはcoroutineではない、すなわちFiberではないという理由で、この名前には難色が示されています。
必要な名前は、一種のスレッドであることを明示しながら、より制限され、より安全である(確率が高く)、より軽量であることを示す名前が期待されます。これがなかなか難しい。
私自身は、最近は「Fiberがcoroutineであることを明示することは実は自明ではなく、さらにcoroutineという単語の定義すら簒奪されつつある昨今、これをAutoFiberと呼んでもよいのではないだろうか」という気になっています。(以下略)
Quoraより

その他Ruby


つっつきボイス:「あぁ、ダブルクォート3つは"""に解釈されるのか😳」「たしかに出力は変わらないけど😆」


以下はつっつき後のツイートです🎉。


DB

dolt: Git感覚のリレーショナルデータベース(DB Weeklyより)

# 同リポジトリより
$ dolt init
Successfully initialized dolt data repository.
$ dolt sql -q "create table state_populations ( state varchar(14), population int, primary key (state) )"
$ dolt sql -q "show tables"
+-------------------+
| tables |
+-------------------+
| state_populations |
+-------------------+
$ dolt sql -q 'insert into state_populations (state, population) values
("Delaware", 59096),
("Maryland", 319728),
("Tennessee", 35691),
("Virginia", 691937),
("Connecticut", 237946),
("Massachusetts", 378787),
("South Carolina", 249073),
("New Hampshire", 141885),
("Vermont", 85425),
("Georgia", 82548),
("Pennsylvania", 434373),
("Kentucky", 73677),
("New York", 340120),
("New Jersey", 184139),
("North Carolina", 393751),
("Maine", 96540),
("Rhode Island", 68825)'
Rows inserted: 17

Doitかと思ったらDoltでした。


つっつきボイス:「今度こそキワモノでしょうか?」「へぇ〜、GitのようなインターフェースでSQL的な更新かけてバージョン管理するというのはちょっと面白いですね😋: 住所データベースみたいに更新が頻繁でなくて固くメンテしたいようなユースケースとかなら使いみちあるかも🤔」「それ用のリポジトリまで作っちゃったそうですが、試しに登録してみたらユーザー名に数字を使えないらしくhachi8833は撥ねられました😢」「😆」


dolthub.comより

クラウド/コンテナ/インフラ/Linux/Serverless

AWS RDSプロキシとは


つっつきボイス:「RDSプロキシはこの間のre:Invent 2019で発表されてたヤツですね: 結構よさそうだけどお値段はどうかな?🤔」「↓vCPUになってる理由とか謎😆: 近々追ってみよう」

$0.015 per RDS Proxy vCPU hour
RDS Proxy Pricing - Amazon Web Servicesより

「RDSプロキシは平成Ruby会議の以下のスライド↓で紹介されていたことで知りました」


はみだし: 上のスライドの動きがあまりに見事だったので発表者のAquaLampさんにお尋ねしたところ、パワポの変形(morph)機能でやれるとのことでした。

JavaScript

Node.jsのはかなさ


つっつきボイス:「Node.jsのLTSの寿命って意外に短いんですね...」「まあ他の言語でもそんなに変わりませんけど☺️」「アップグレードで動かなくなるライブラリはつらい😭」

CSS/HTML/フロントエンド/テスト

styled-componentとは

# 同記事より
src
├── App
│ ├── Header
│ │ ├── Logo.js
│ │ ├── Title.js
│ │ ├── Subtitle.js
│ │ └── index.js
│ └── Footer
│ ├── List.js
│ ├── ListItem.js
│ ├── Wrapper.js
│ └── index.js
├── shared
│ ├── Button.js
│ ├── Card.js
│ ├── InfiniteList.js
│ ├── EmojiPicker
│ └── Icons
└── index.js

つっつきボイス:「styled-componentsが好きでない人が社内にいるらしいと聞いて」「まあ一部ですけど😆」「CSSだけだとグローバルになってしまいがちですし、コンポーネント的に閉じ込めたい気持ちはワカル☺️」「割と最近登場したみたいだけど今後どうなるかな?🤔」

その他フロントエンド

その他

年末らしい記事


つっつきボイス:「クリスマスですが年末っぽい記事をいくつか」「Makerのトレンドは自作派にとってうれしい記事!😍」

「自分はスイッチサイエンス↓で買うことが多いかな〜😋」「ここの品は調査が行き届いてて怪しげなものを売ってないのがいいですね👍: といいつつ秋月電子通商とか千石電商も昔から定番ですが」「自作やってたの昔過ぎて最近の通販事情知らなかった😅」

参考: トップページ - スイッチサイエンス


switch-science.comより

「そういえばニキシー管↓で表示したことあったな〜😆」「このノイズ多そうな真空管みたいな表示装置、ニキシー管っていうんですね...初めて知りました😅」

参考: ニキシー管 - Wikipedia

「昔のビデオデッキなんかに使われてた蛍光表示管↓というのもありましたね🤓」「大昔の電卓ってこれでした😳」「たしか蛍光表示管も真空技術を使ってたかな☺️」

参考: 蛍光表示管 - Wikipedia

「ところで今度はこれ作りません?↓」「作りましょうっ😆」

番外

宇宙ネタ2題


つっつきボイス:「久しぶりの宇宙ネタ😆」「ナゾロジーさんは目の付け所のいい良科学記事が多くて大好きです❤️」


後編は以上です。Railsウォッチをお読みいただいている皆さま、いつもありがとうございます!🙇来年もよろしくお願いします&メリークリスマス。

バックナンバー(2019年度第4四半期)

週刊Railsウォッチ(20191223前編)Railsセキュリティ修正6.0.2.1と5.2.4.1リリース、Ruby 2.7.0-rc2リリース、ActiveRecordのコールバック回避ほか

今週の主なニュースソース

ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp Slackなど)です。

Ruby 公式ニュース

Ruby Weekly

DB Weekly

db_weekly_banner


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。