- Ruby / Rails関連
週刊Railsウォッチ(20191225後編)Ruby 2.7リリースまで後少し→出ました、キーワード引数変更の公式ドキュメント、Railsセキュリティ修正でredis-storeがエラーほか
こんにちは、hachi8833です。今年最後のRailsウォッチ後編です。日本時間12/25夕方の時点のRubyはまだトンテンカンテンやっているようです👀。数日前まではrdocなどドキュメントの更新が増えてリリース間近かと思いきや、直近のコミットを見ているとさまざまな修正が続々入っていてどきどきしています。コミッターの皆さま本当にお疲れさまです。
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がめでたくリリースされました。
Ruby 2.7が正式リリースされたので、今年も #チェリー本 の説明と異なる部分をまとめました!このパッチを脳内に取り込めば、あなたの知識もRuby 2.7にアップデートできますよ〜🍒
Ruby 2.7で発生する「プロを目指す人のためのRuby入門」との差異について https://t.co/teJUhEsoTO #Qiita
— Junichi Ito (伊藤淳一) (@jnchito) December 26, 2019
- 各記事冒頭には⚓でパーマリンクを置いてあります: 社内や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のキーワード引数変更と待望の公式解説
Ruby 2.7のキーワード引数の仕様変更に関する記事、昨日ようやく公開できました。一度全面的に書き直したりしてかなり時間がかかってますが、日常的なコーディングにおいては、説明その1とその4を押さえておけば十分な気がします😅https://t.co/fw5LJR2Ekx
— Junichi Ito (伊藤淳一) (@jnchito) December 17, 2019
つっつきボイス:「jnchitoさんがキーワード引数の変更記事をがっつり書いてくれていました🙏」「ありがたい!😂」「エッジケースがいっぱいあるけどjnchitoさんが書いたコードで影響を受けるのはわずかで済みそうだとのことです」「たしかに、こんな書き方普通しないよなみたいなの多いし😆」「皆さんがこんなに苦労しているのを見て、キーワード引数変更の難しさに納得しました😭」
「と思ってたら、ついこの間(12/12)Rubyの公式サイトにキーワード引数変更の詳しい解説記事が出ていました↓」「みんなが欲しかったヤツ🎉」「著者はmameさん、レビュアーはJeremy EvansさんとBenoit Dalozeさん😳」「jnchitoさん記事では言及されていないので入れ違いだったのかも🤔」
後で上の記事を気合い入れて読んでみましたが、みっちりまとまった力作記事でした❤️。キーワード引数変更についての重要な一次資料ですね。
公式解説の見出しより:
- 概要
- 典型的なケース
- どこが非推奨になるか
- 自分のコードは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
)が導入される - 自動変換を非推奨にする理由
追記: 本日つい先ほど、本命のガチ解説記事が出ました↓。日本語で真っ先に読めるのはありがたいですね😂。
Link: プロと読み解くRuby 2.7 NEWS - クックパッド開発者ブログ: https://t.co/qxlLMXv9jz
— Yukihiro Matsumoto (@yukihiro_matz) December 25, 2019
⚓Rubyコンカレンシーの進捗レポート(Ruby Weeklyより)
Ruby 3のコンカレンシーモデルについてMatzとkoichiとそれぞれ話す機会があったのでこの記事にまとめる。
同記事より抜粋
記事の見出しより:
- コンカレンシーとパラレリズムとは
- 非決定性が持ち込まれるとどうなるか
- asyncやfalconでRuby Webアプリを改善できるが、Ruby実装全体に効く軽量なフックで拡張したい
- async-ioが提供するIOラッパーは多くの場合暫定的な置き換えとなる
- コンカレンシーの選択肢:
- Auto Fiber(#13618など)
- ラッパー
- 新しいメソッド
- 新しいクラス
- Isolateについて
- キーワードを追加するかどうか
- ブロッキングの発生
- 改変の検出と通知
- 本件はRuby Association GrantとGitHub 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
おととい公開したQiita記事です。puts """abc""" みたいなコードを書いても問題なく動くなんてビックリ!
【トリビア】Rubyにおける3連引用符(ダブルクオート3つ)は何を意味しているのか? https://t.co/QUBPwBLz6j #Qiita
— Junichi Ito (伊藤淳一) (@jnchito) December 15, 2019
つっつきボイス:「あぁ、ダブルクォート3つは""
と"
に解釈されるのか😳」「たしかに出力は変わらないけど😆」
以下はつっつき後のツイートです🎉。
Debug Rails issues effectively with tapping_device
🗣 by @_st0012
📡 via @ThePracticalDev
🏷 #rails #ruby #toolinghttps://t.co/5SQtbNVyZf— Changelog (@changelog) December 23, 2019
#Railsガイド 『Proプラン』『Teamプラン』から過去バージョンも見れるようになりました!🎅🎁✨
『今のプロダクトは Rails 5.x だから、Rails 5.x で使える機能に絞って調べたい』といった場面でご活用して頂けると嬉しいです😌💖
詳細は次の #note 記事をご参照ください📜 https://t.co/HJCFKyCMNi pic.twitter.com/oB2uKHfQDv
— Railsガイド 📕 (@RailsGuidesJP) December 25, 2019
⚓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
⚓クラウド/コンテナ/インフラ/Linux/Serverless
⚓AWS RDSプロキシとは
- 公式記事: Amazon RDS プロキシのご紹介 (プレビュー)
- 元記事: [速報]これでLambdaのコネプー問題も解決?!LambdaからRDS Proxyを利用できるようになりました(まだプレビュー) #reinvent | Developers.IO
つっつきボイス:「RDSプロキシはこの間のre:Invent 2019で発表されてたヤツですね: 結構よさそうだけどお値段はどうかな?🤔」「↓vCPUになってる理由とか謎😆: 近々追ってみよう」
$0.015 per RDS Proxy vCPU hour
RDS Proxy Pricing - Amazon Web Servicesより
「RDSプロキシは平成Ruby会議の以下のスライド↓で紹介されていたことで知りました」
きょうの発表資料でしたー!
(残念ながらアニメーションはしません)#heiseirubykaigi #heiseirubykaigiBhttps://t.co/1o5Qdg02vR— AquaLamp (@AquaLamp) December 14, 2019
はみだし: 上のスライドの動きがあまりに見事だったので発表者のAquaLampさんにお尋ねしたところ、パワポの変形(morph)機能でやれるとのことでした。
- 元記事: Google Slides vs PowerPoint: a Battle (Not) Worthy of Fighting -- 変形機能は今のところPowerPointが強い: Googleスライド頑張れ
⚓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だけだとグローバルになってしまいがちですし、コンポーネント的に閉じ込めたい気持ちはワカル☺️」「割と最近登場したみたいだけど今後どうなるかな?🤔」
⚓その他フロントエンド
- 元記事: 手書き風フォント「からかぜ」 - ENUOKA - BOOTH -- BPSデザインチームのハートに刺さったそうです❤️
⚓その他
⚓年末らしい記事
- 元記事: 『Qiitaユーザーが選ぶ、2019年に読んで良かった技術書』アンケート結果発表 - Qiita Zine
- 元記事: スイッチサイエンスで2019年ヒットした電子工作部品にみるMakerのトレンド | fabcross
つっつきボイス:「クリスマスですが年末っぽい記事をいくつか」「Makerのトレンドは自作派にとってうれしい記事!😍」
「自分はスイッチサイエンス↓で買うことが多いかな〜😋」「ここの品は調査が行き届いてて怪しげなものを売ってないのがいいですね👍: といいつつ秋月電子通商とか千石電商も昔から定番ですが」「自作やってたの昔過ぎて最近の通販事情知らなかった😅」
「そういえばニキシー管↓で表示したことあったな〜😆」「このノイズ多そうな真空管みたいな表示装置、ニキシー管っていうんですね...初めて知りました😅」
IN-18を6本使用したニキシー管時計を作成中です。
とりあえず通電して動作確認をしました。
コロンを追加してからケースを作成する予定です。 pic.twitter.com/KuJwwsm5g7— シュナバス (@profundum2) May 6, 2018
「昔のビデオデッキなんかに使われてた蛍光表示管↓というのもありましたね🤓」「大昔の電卓ってこれでした😳」「たしか蛍光表示管も真空技術を使ってたかな☺️」
シャープの電卓、CS-226Rの表示部です。伊勢電子のFL管「アイトロン」を記号用を含め13本使用しています。独特のセグメントが面白いです。 pic.twitter.com/X9te8tYB8l
— かまがりAA793 (@KamagariAA793) September 7, 2018
「ところで今度はこれ作りません?↓」「作りましょうっ😆」
⚓番外
⚓宇宙ネタ2題
- 元記事: 突然、100個の星が宇宙から消えていた!新たな天体現象か「宇宙人」の仕業か? | ナゾロジー
- 元記事: 史上最高の精度でパルサーを解析!灯台みたいな教科書のモデルは間違いだった | ナゾロジー
つっつきボイス:「久しぶりの宇宙ネタ😆」「ナゾロジーさんは目の付け所のいい良科学記事が多くて大好きです❤️」
後編は以上です。Railsウォッチをお読みいただいている皆さま、いつもありがとうございます!🙇来年もよろしくお願いします&メリークリスマス。
バックナンバー(2019年度第4四半期)
週刊Railsウォッチ(20191223前編)Railsセキュリティ修正6.0.2.1と5.2.4.1リリース、Ruby 2.7.0-rc2リリース、ActiveRecordのコールバック回避ほか
- 20191217後編 Ruby 2.7の変更点とパターンマッチング、依存性自動アップデートツール、Stack Overflowアンケート2019ほか
- 20191210後編 Ruby 2.7の変更点記事、mrubyで動くmitamae、画像系コラボレーションツールほか
- 20191209前編 Pumaのphased-restartとUnicornのgraceful restart、RailsのTZハックが不要になった話ほか
- 20191204後編 Rubyコードをトランスパイルするruby-next、Cloud Run正式リリース、2019年Web年鑑レポート、V言語ほか
- 20191202前編 Rails 6のimplicit_order_columnはカスタマイズ可能、rubocop-rails 2.4.0リリース、Capistrano記事ほか
- 20191119後編 メソッド参照演算子が廃止、GitHub新機能続々、平成Ruby会議、GitHub OAuthバイパスほか
- 20191118前編 ActiveJob引数のログ抑制、RailsガイドProプランお試し、ファイルアップロードのレジュームgemほか
- 20191112後編 invisible gemで可視性を変えずにパッチ当て、スライド:「型なし言語のための型」、自然言語の言語名を推測ほか
- 20191111前編 Active Recordモデルをprivateで封じ込める、心折れないRailsスキーマ管理、Railsセッションをクロスドメイン共有ほか
- 20191106後編 holiday_japan gemで日本の祝日判定、小さい関数が有害になるとき、Gitブランチのファジー検索ほか
- 20191105前編 Rails 6のデフォルト設定解説、DHHも消したいaccepts_nested_attributes_for、スライド『実践Railsアプリケーション設計』ほか
- 20191029後編 Ruby 2.7.0-preview2、tapping_device gemとhumanize gem、平成Ruby会議ほか
- 20191028前編 RailsにSTI用メソッドsti_class_forとpolymorphic_class_forが追加、RuboCopを変更箇所だけにかけるgem、strftime書式生成サイトほか
- 20191021 Rails 6でhas_many関連の修正やSprockets 4.0対応、Shrine 3.0がリリース、Minitestスタイルガイドほか
- 20191015 スライド「Rails Performance issues and Solutions」を見る、dirtyに*_previously_was が追加、Sidekiq 6.0.1ほか
- 20191008後編 Ruby 2.7のInteger#[]でバイナリチェック、rubyzip gemは強力、13KBのJavaScriptゲームほか
- 20191001後編 RedisとRubyをつなぐredis-object gem、Fullstaq Rubyの新バージョン、COUNT(*)とCOUNT(1)の速度ほか
今週の主なニュースソース
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp Slackなど)です。