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

週刊Railsウォッチ(20201021後編)webpack 5リリースでWebpacker対応開始、AWS Lambda Extensions発表、Pythonにマクロ構文追加提案ほか

こんにちは、hachi8833です。

  • 各記事冒頭には⚓でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ
  • 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄
  • お気づきの点がありましたら@hachi8833までメンションをいただければ確認・対応いたします🙇

※今回録音に失敗したため、つっつきボイスがいつもより短めとなっております🙇。

Ruby

victor: SVGを生成するRuby DSL(Ruby Weeklyより)

DannyBen/victor - GitHub

「RubyのDSLで絵を描けるそうです↓」「SVGもテキストで描画するという点は同じですね」「絵描き歌みたい」「丸かいてちょんをずらしながら3回繰り返すと点が3つ並ぶみたいな」

# 同リポジトリより
require 'victor'

svg = Victor::SVG.new width: 140, height: 100, style: { background: '#ddd' }

svg.build do 
  rect x: 10, y: 10, width: 120, height: 80, rx: 10, fill: '#666'

  circle cx: 50, cy: 50, r: 30, fill: 'yellow'
  circle cx: 58, cy: 32, r: 4, fill: 'black'
  polygon points: %w[45,50 80,30 80,70], fill: '#666'

  3.times do |i|
    x = 80 + i*18
    circle cx: x, cy: 50, r: 4, fill: 'yellow'
  end
end

svg.save 'pacman'


同リポジトリより

Quoraより


つっつきボイス:「社内Slackに貼っていただいた記事です」「else nilが略されているというのは言われてみるとなるほど」「falseが返るかと思ったらnilが返るんですね」「業務開発ではelseが省略されるようなif文の戻り値を条件判定以外に使うことはないと思いますし、『偽を返す』という点は同じなので、本件は特に意識しなくてもこれが原因でバグを仕込むようなことはないと思います」「Ruby技術者認定試験のGoldに出そうな知識ですね」

参考: Ruby技術者認定試験

Ruby 2.7.2の英語ドキュメントが更新(Ruby Weeklyより)

以下は直近のArrayドキュメント差分です。


つっつきボイス:「差分が思ったより大きくてGitHub上で全部の差分を見られませんでした」「スタイルの統一以外にもいろいろと更新されているようですね」

informer: Rubyの自然言語処理gem(Ruby Weeklyより)

ankane/informers - GitHub

以下を扱えるそうです。

  • 感情分析(sentiment analysis)
  • 問い合わせへの自動回答(question answering)
  • 固有表現認識(named-entity recognition: NER)

以下は仕掛中だそうです。

  • テキスト生成(text generation)
  • テキスト要約(summarization)
  • 機械翻訳(translation)

つっつきボイス:「ankaneさんのgemで、感情分析とかもできるようです」「ONNXって何だろうと思ったらこれですね↓」

参考: 3分で分かる!ONNXフォーマットとWindows Machine Learning! - Qiita

その他Ruby


つっつきボイス:「ちょうどこの間以下のツイートのレスが長く伸びていたのを読んだんですが、上の記事でまとめられていました」

「記事は以下の4つについて簡潔にまとまっていて、かつちゃんと理由が書かれているのが良いですね👍」

  • クラス変数のわかりにくさ
  • Net::HTTP標準ライブラリがHTTPの低レベル機能にとどまっている
  • メタプログラミングの複雑さ
  • ブロックとprocとlambdaの違い

Net::HTTPがHTTPの低レベル機能にとどまっているというのはそうかもしれない」「それでもないとあるとでは全然違いますよね」「自分がhttpclient↓のようなサードパーティのHTTPライブラリを使う理由のひとつがそれです(ウォッチ20180615)」

nahi/httpclient - GitHub


つっつきボイス:「mrubyはどこかで使ってみたい」「それこそ先週話題にしたM5Stackで楽に動かせるかもしれませんね(ウォッチ20201013)」「お〜探したら早速ありましたよ↓❤️」

参考: m5stack+mrubyを試してみた|Yosei|note


つっつきボイス:「12月のRubyWorld Conferenceもオンライン開催なんですね」「今はオンライン開催にするしかない時期ですけど、こうしたカンファレンスは同じ場所にみんなで集まって、現地のおいしいものを一緒に食べる連帯感というか身近さを感じることも大事な良さの一つなので、リモートでもそうした試みが行われるのは良いですね」

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

AWS Lambda Extensions発表(StatusCode Weeklyより)


つっつきボイス:「今日出たニュースです」「これはなかなかよさそう」「New Relicとかもextensionで動かせるんですね」「この図がわかりやすい↓」


同記事より

「Extensions APIはLambdaを実行しているコンテナ上で実行される別のLambda Functionのメトリクスを取れるみたいなので、Lambdaコンテナレベルのメトリクスを取れる、というのがよさそうですね」「なるほど」「Lambdaコンテナがcold startしてshutdownするまでの流れも取れるようなので、これまで細かく取れなかったLambdaコンテナ自体の振る舞いを監視できるという点でありがたい機能になりそうです」

参考: 「AWS Lambda Extensions」発表。AWS Lambdaにモニタリング用エージェントなどが組み込めるように - Publickey

JavaScript

webpack 5がリリース

webpack/webpack - GitHub

参考: JavaScriptモジュールバンドラー「webpack 5.0.0」がリリース:CodeZine(コードジン)

 最新版では、「webpack 4」で非推奨になったコードや構文、自動Node.jsポリフィルなど、すべてのアイテムが削除された。
codezine.jpより


つっつきボイス:「webpack 5がリリースされました🎉」「webpackのメジャーバージョンが上がるとRailsのWebpackerのバージョンがいつ追い付くかが問題になるのは悩ましいですね」「前回webpackが4になったときはWebpackerが対応するのに1年ほどかかった覚えがあります(ウォッチ20190318)」「webpack 4に対応している現在のWebpakcerはバージョン5.2.1なのがちょっとややこしい」

rails/webpacker - GitHub

「Webpackerのissueを見ると早速webpack 5リリースの件がエントリされていますね↓」「やはり」


つっつきの後でissueを見てみました。

(Webpacker)6.0の主な目標は、Webpacker学習者に以下を提供すること:

  • インストール直後はJSのみをサポート
  • オプションでCSS/SASSをサポート(cssローダーやsassローダーやlessローダーといった依存関係がインストールされている場合)
  • オプションで静的アセットもサポート(ファイルローダーがインストールされている場合)

オプション機能は基本的に、たとえばhaml-rails gemを追加してhamlテンプレートエンジンを使うような形になる

つまりerbやreactなどはrakeインストーラから離れることになる。個人的には、インストーラはどっちみち大したことは行わないし、ドキュメントを読むだけで誰でも多くの依存関係を追加してWebpackerを始められる(つまりずっと学びやすくなる)と思う。
インストール手順はドキュメントにすべて盛り込む予定。さらに、必要ならnpmも使える。

(次のWebpackerの)リリース日は確約できないがRails 6.1 RCも近い(10月末〜11月第一週)のでそのあたりで出せるとうれしい。
Webpacker issue #2757の@gauravtiwariによるコメントより大意

Webpackerのissueなので公式情報とまではいきませんが、どうやらRails 6.1 RCのリリースはそう遠くなさそうですね。

言語/ツール/OS/CPU

Pythonに「Syntactic Macros」追加のプロポーザル


つっつきボイス:「Pythonにマクロ構文を追加しようというプロポーザルだそうです」「PEPはPython Enhancement Proposalなのね」「まだドラフト段階だから先のことはわからないけど、本当に入れるのかな?」

# 同PEP 638より
macro_expr = MACRO_NAME "(" testlist ")"

参考: マクロ (コンピュータ用語) - Wikipedia
参考: 変換言語 - Wikipedia


つっつきの後で読んでみました。

モチベーション

言語の新機能は議論が紛糾したり混乱したり(コミュニティの)分断を招いたりする可能性もある。今やPythonは十分強力かつ複雑であり、提案された多くの機能を追加すると複雑さが増して正味の損失となる。

言語を変更するとある種のパターンを表現しやすくなるが、代償も伴う。新機能を足すたびに言語は肥大化し、学ぶのも理解するのも難しくなる。Pythonはかつて「脳みそにちょうど合う」と評されたが、新機能を足すたびにそこから遠ざかっていく。

言語への機能追加は高くつくので、たとえメリットを享受するユーザーがどんなに多くても、一部のユーザーにしかメリットのない機能を追加するのは極めて困難ないしは不可能。

データサイエンスや機械学習におけるPythonの利用はここ数年で急速に成長している。しかしPythonコア開発者の大半はデータサイエンスや機械学習の背景知識を持ち合わせていない。そのため、機械学習向けに言語を拡張する価値があるかどうかを判断することがコア開発者にとって極めて困難になっている。

言語を(ライブラリなどで)モジュラー化および分散化可能な形で拡張できるようにすれば、特定ドメイン固有の言語拡張を、そのドメインと無関係なユーザーにネガティブな影響を与えずに実装できる。Web開発者が求める言語拡張は、データサイエンティストが求める言語拡張と大きく異っていることが多いものだ。

何らかの形でユーザー定義による言語拡張機能を備えないと、「言語仕様を小さく保って脳につらくならないようにしたい」派と「特定のドメインやプログラミングスタイルに合う新機能が欲しい」派の争いは今後も続くだろう。
同PEP 638(Mark Shannon)より抜粋・大意

その他

モバイルでのGitHubコードレビューを改良


つっつきボイス:「お、やっとスマホでコードレビューしやすくなった🎉」「ところが、フルリモートワークになってからスマホを触る機会がものすごく減っているんですよ」「自分もです!」「新しいiPhoneが出ても別に買い換えなくていいかなと思うほど触る頻度が減ってます」


後編は以上です。

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

週刊Railsウォッチ(20201013後編)ruby-type-profilerがtypeprofにリネーム、AWS API Gatewayの実行ログは便利、M5Stackほか

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

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

Ruby Weekly

StatusCode Weekly

statuscode_weekly_banner


CONTACT

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