- Ruby / Rails関連
週刊Railsウォッチ(20201021後編)webpack 5リリースでWebpacker対応開始、AWS Lambda Extensions発表、Pythonにマクロ構文追加提案ほか
こんにちは、hachi8833です。
- 各記事冒頭には⚓でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ
- 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄
- お気づきの点がありましたら@hachi8833までメンションをいただければ確認・対応いたします🙇
※今回録音に失敗したため、つっつきボイスがいつもより短めとなっております🙇。
⚓Ruby
⚓ victor: SVGを生成するRuby DSL(Ruby Weeklyより)
「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より)
以下を扱えるそうです。
- 感情分析(sentiment analysis)
- 問い合わせへの自動回答(question answering)
- 固有表現認識(named-entity recognition: NER)
以下は仕掛中だそうです。
- テキスト生成(text generation)
- テキスト要約(summarization)
- 機械翻訳(translation)
つっつきボイス:「ankaneさんのgemで、感情分析とかもできるようです」「ONNXって何だろうと思ったらこれですね↓」
参考: 3分で分かる!ONNXフォーマットとWindows Machine Learning! - Qiita
⚓ その他Ruby
つっつきボイス:「ちょうどこの間以下のツイートのレスが長く伸びていたのを読んだんですが、上の記事でまとめられていました」
What is your least favorite part about Ruby?
— Nate Berkopec (@nateberkopec) October 8, 2020
「記事は以下の4つについて簡潔にまとまっていて、かつちゃんと理由が書かれているのが良いですね👍」
- クラス変数のわかりにくさ
- Net::HTTP標準ライブラリがHTTPの低レベル機能にとどまっている
- メタプログラミングの複雑さ
- ブロックとprocとlambdaの違い
「Net::HTTP
がHTTPの低レベル機能にとどまっているというのはそうかもしれない」「それでもないとあるとでは全然違いますよね」「自分がhttpclient↓のようなサードパーティのHTTPライブラリを使う理由のひとつがそれです(ウォッチ20180615)」
すっかり告知出遅れてますが、mruby 3.0 の秘密が明かされるっぽいですよ!?https://t.co/uUVICu83Ti
— yamane (@yuri_at_earth) October 14, 2020
つっつきボイス:「mrubyはどこかで使ってみたい」「それこそ先週話題にしたM5Stackで楽に動かせるかもしれませんね(ウォッチ20201013)」「お〜探したら早速ありましたよ↓❤️」
参考: m5stack+mrubyを試してみた|Yosei|note
RubyWorld Conferenceと松江市のコラボ企画のふるさと納税がおかげさまで超絶大人気です😍
ありがとうございます😭
まだまだ受付してますので、12月17日のRWCのお供にどうぞ🦀https://t.co/Iww6pTzAgX#松江市#Ruby#Matz#ふるさと納税
— しまパンダ@ローカルこうむいん (@HondaTomokazu) October 16, 2020
つっつきボイス:「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 5 release (2020-10-10) | webpack
- サイト: webpack
参考: 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なのがちょっとややこしい」
「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」追加のプロポーザル
Is this really coming?
link: PEP 638 -- Syntactic Macros | https://t.co/o3gTweVk0h https://t.co/wFZQmnVpHC— Yukihiro Matsumoto (@yukihiro_matz) October 15, 2020
つっつきボイス:「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ほか
- 20201012前編 Railsの隠し機能routing visualizer、action_args gem、N+1用goldiloader gemほか
- 20201006後編 Rubyの
defined?
キーワード、Ractorベースのジョブスケジューラ、Caddy Webサーバーほか - 20201005前編 Ruby 2.7.2がリリース、Shopifyのモジュラー化gem「packwerk」、stimulus_reflexほか
今週の主なニュースソース
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。