- Ruby / Rails関連
週刊Railsウォッチ: 書籍『Programming Ruby 3.2 (5th Edition)』、ReDoSチェックサイトほか(20221102後編)
こんにちは、hachi8833です。StimulusをStimlusと書いてしまいがちです。
Rubyプログラマあるある間違い
1. DeviseをDeviceと書いてしまう
2. RSpecをRspecと書いてしまう(Sは大文字)あとひとつは?
— Junichi Ito (伊藤淳一) (@jnchito) October 28, 2022
🔗Ruby
🔗 書籍『Programming Ruby 3.2 (5th Edition)』
“Typed Ruby “ 👀 テストのセクションもRSpecが紹介されるのだな(まあそうか)。Part III が楽しみだな https://t.co/QHfLVRk7lG
— Kakutani Shintaro (@kakutani) October 27, 2022
つっつきボイス:「お、出ましたね🎉」「Ruby 3.2、まだ出ていないのにタイトルに入ってる」「目次を見た感じではRubyが初めての人を対象としているっぽい」「Pragmatic Bookshelfの技術本は、オライリーのよりも情報密度が小さくてページ数が多い分読みやすい傾向はありますね」
参考: Pragmatic Bookshelf: By Developers, For Developers
🔗 MatchDataにdeconstruct
とdeconstruct_keys
が追加
I was excited to learn from @paracycle that https://t.co/2Jf15unEpZ has been merged, so in Ruby 3.2 we’ll be able to use a hash pattern to extract regular expression named captures without needing to `refine MatchData`. Thank you @keystonelemur & @palkan_tula & @k_tsj! 🎉 pic.twitter.com/alWwrTwOiK
— Tom Stuart (@tomstuart) October 21, 2022
つっつきボイス:「deconstruct
とdeconstruct_keys
が追加されたことで、正規表現マッチ結果で名前付きキャプチャをパターンマッチのin
で扱ったりできるようになったそうです」「ツイートを見ると、今までrefine MatchData
のようにrefinementを使う必要があった書き方が公式に取り入れられた感じですね👍」
参考: class MatchData
(Ruby 3.1 リファレンスマニュアル)
後でRuby 3.2.0-devでやってみました。
$ ruby -v
$ ruby 3.2.0dev (2022-11-01T02:40:32Z master aa8c6759ee) [arm64-darwin22]
$ irb
>> m = /(?<a>foo).+(?<b>baz)/.match("foobarbaz")
=> #<MatchData "foobarbaz" a:"foo" b:"baz">
>> m.deconstruct_keys([:a, :b])
=> {:a=>"foo", :b=>"baz"}
>> m.deconstruct_keys([:a, :c]) # 存在しないキャプチャ名は無視される
=> {:a=>"foo"}
>> /(?<a>foo).+(?<b>baz)/.match("foobarbaz") in { a:, b: }
=> true
>> /(?<a>foo).+(?<b>baz)/.match("foobarbaz") in { a:, c: } # 存在しないキャプチャ名があるとfalse
=> false
Ruby 3.1.2では動きません。
$ ruby -v
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [arm64-darwin21]
$ irb
>> m = /(?<a>foo).+(?<b>baz)/.match("foobarbaz")
=> #<MatchData "foobarbaz" a:"foo" b:"baz">
>> m.deconstruct_keys([:a, :b])
(irb):2:in `<main>': undefined method `deconstruct_keys' for #<MatchData "foobarbaz" a:"foo" b:"baz"> (NoMethodError)
from /Users/hachi8833/.anyenv/envs/rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/irb-1.4.2/exe/irb:11:in `<top (required)>'
from /Users/hachi8833/.anyenv/envs/rbenv/versions/3.1.2/bin/irb:25:in `load'
from /Users/hachi8833/.anyenv/envs/rbenv/versions/3.1.2/bin/irb:25:in `<main>'
>> /(?<a>foo).+(?<b>baz)/.match("foobarbaz") in { a:, b: }
=> false
🔗 RubyKaigi 2022のリンク集
つっつきボイス:「ScrapboxでRubyKaigi 2022のリンク集が作られていました」「感想ブログの量がめちゃくちゃ多いですね😳」「これをまとめた情熱がすごい」「日本語記事だけでこのボリュームなので、海外の感想ブログも含めたらさらに増えそう」
🔗 その他Ruby
以下のツイートはつっつき後に見つけました↓。
2022/10/15 mruby公開10周年を記念オンラインイベント「Fukuoka mruby Kaigi」のビデオアーカイブを公開しました!ご登壇いただいた皆様、参加いただいた皆様、ご協力いただいた皆様、まことにありがとうございました!!#mruby #mrubykaigihttps://t.co/3ABr5O03Rd...https://t.co/U140XeLKsd
— 福岡県Ruby・コンテンツビジネス振興会議 (@Fukuoka_Ruby) November 1, 2022
🔗 設計・セキュリティ
🔗 バッチ処理プラクティス
- 元記事: バッチ処理 プラクティス
つっつきボイス:「昨年の記事ですがはてブでバズっていました」「バッチ処理は定番のテーマですね」「morimorihogeさんも以前以下の記事を書いていましたね↓」
「バッチ処理は、たとえばどの要素がどのぐらい重要なのかとか、システムの規模やデータの大きさによって大きく変わってくるので、一般性の高い形にまとめるのが大変」「いくらでも書くことが増えそうですよね」「しかもどんなに書いてもすべてを完全にカバーするのは無理」
🔗 市場調査の無料情報
②バフェットコード
高額な企業分析ツール並の機能を搭載した最強の無料ツール日米の上場企業をカバーしており、基本的な財務指標や開示資料等必要な情報にアクセス可能なので、気になる企業は取り敢えず調べてます。最近スタートアップのデータが追加され最強になりましたhttps://t.co/PTqwNiLklK pic.twitter.com/NJdpKLH9P0
— もやし (@w_coast_0330) October 23, 2022
つっつきボイス:「スレッドで他にも紹介されていました」「e-stat.go.jpなどは参照してみたことがありますね: CSVなどでエクスポートできたけど、情報の書式が必ずしも揃っていなかった覚えがあります」「それありそう」「無料の情報は便利だけど特に非上場企業の情報だと限度もあるし、少なくとも更新のタイミングをチェックしたり他の情報とも突き合わせたりする必要はあるでしょうね」「たしかに」「もちろん情報源が増えるのはいいこと👍」
🔗クラウド/コンテナ/インフラ/Serverless
🔗 Rancher Desktop
- 元記事: Rancher Desktop
#RancherDesktop has been growing rapidly, with its newest version, 1.6.0, providing troubleshooting diagnostics and more! Discover other features, such as additional bug messages written to logs, in Gunasekhar Matamalam’s latest blog.➡📑https://t.co/eAY4ev0MeW pic.twitter.com/O6o7Ndi73w
— Rancher (@Rancher_Labs) October 7, 2022
つっつきボイス:「社内で話題になっていたので取り上げてみました」「たぶん"らんちゃー"って読むんでしょうね」
rancher: 〈米・豪〉農場(牧場)の経営者(労働者)
「比較的新しいDockerオルタナティブですね: もともとKubernetes向けのソフトウェアですが、Kubernetesを扱えるということはバックエンドでDockerコンテナを扱っているのでDockerの管理にも使えるでしょうね」「Mac環境だとまだ遅いらしいとかいろいろ噂は見かけますね」
参考: Kubernetes -- プロダクショングレードのコンテナ管理基盤
🔗 DockerのWebAssembly対応(Beta版)
つっつきボイス:「Dockerのドキュメントを読んでてたまたま見つけました」「お〜、WasmアプリケーションをDockerのwasi/wasm32
プラットフォームで動かすんですね」「これは面白い」「まだテクニカルプレビュー状態なんですね」
# https://docs.docker.com/desktop/wasm/ より
services:
app:
image: michaelirwin244/wasm-example
platform: wasi/wasm32
runtime: io.containerd.wasmedge.v1
ports:
- 8080:8080
# https://docs.docker.com/desktop/wasm/ より
$ docker image inspect server | grep -A 3 "Architecture"
"Architecture": "wasm32",
"Os": "wasi",
"Size": 3001146,
"VirtualSize": 3001146,
「WasmのVMが増えるのか〜」「"Architecture": "wasm32"
ですもんね」「こういうのを見ているとJVMを思い出してしまう」「言われてみれば方向性も同じですよね」
「アーキテクチャはwasm32になっても、IOやファイルシステムとのやりとりはWasmの範疇ではないんですよね」「そのあたりをWASIでやろうとしているみたいですね」「そういう移植性が今後どうなるかが気になるところ」
🔗JavaScript
🔗 Lyra: TypeScriptで書かれたWebサイト内検索エンジン
- サイト: Lyra
"The edge-ready full-text search engine" https://t.co/Ufekxfubq9 "Lyra は、TypeScript で記述された、依存関係のない最新の全文検索エンジンです。" Cloudflare Workers でも動くらしい。
— V (@voluntas) October 24, 2022
つっつきボイス:「これもBPS社内で話題になっていたので取り上げられました」「LyraはAWS Lambdaなどでも使えるあたりがなかなかよさそう👍」
参考: AWS Lambda(イベント発生時にコードを実行)| AWS
「ところでLyraはWebサイト内を検索するエンジンということですけど、Algolia↓みたいに外部APIを呼び出すタイプとは違うんでしょうか?」「Lyraは検索するデータをメモリに保持する形で動作して、プロセスが終了すればデータも消えますね」「なるほど、別の方法なんですね」「たとえばLambdaのコールドスタートではデータを一気にメモリに読み込んで、ホットスタートでは読み込み済みのものを使うなどすれば十分高速に動くんじゃないかな」
🔗 Turbopack
またひとつ Rust で書き直されて爆速になった事例が "The Rust-powered successor to Webpack" "an incremental bundler optimized for JavaScript and TypeScript, written in Rust." / “Turbopack - The successor to Webpack” https://t.co/VD6DErIIfK
— Takuto Wada (@t_wada) October 26, 2022
つっつきボイス:「これもBPS社内で話題になっていました」「Turbopackはwebpackの後継に当たるモジュールバンドラーで、webpack互換にはしないそうです」「webpackの作者も開発に加わっているんですね」「Rustで書かれているのか」「誰か使ってみて欲しい」
参考: Vercel、Rustで開発したWebpackの後継モジュールバンドラー「Turbopack」を公開|CodeZine(コードジン)
🔗CSS/HTML/フロントエンド/テスト/デザイン
🔗 Chrome DevToolsのDOMブレークポイント機能
つっつきボイス:「babaさんあたりはもう知っていそうな機能かなと思いつつ貼ってみました」「ブレークポイントを仕掛けてDOMが変化したときにデバッガが起動するのはよさそう👍」
参考: ドキュメントオブジェクトモデル (DOM) - Web API | MDN
「ところでイベントリスナーのデバッグってつらいですよね」「DOMを作り直したらイベントハンドラが消えちゃいますし」「そういうのがつらい人たちがReactに移動した感はあるかも」
🔗言語/ツール/OS/CPU
🔗 iPhoneのUSB-C化
iPhoneのUSB-C化は確定的? EU法案に「従わなければならない」 Apple幹部が発言https://t.co/RFHxPDxHnt
— it-collector-bot (@CollectorIt) October 26, 2022
つっつきボイス:「これはEUお手柄🎉」「義務化、前からEUはやるやるって言ってましたね」「今のM1 Macbook ProのUSBがどのUSBかもわかってませんでした😅」「最近のMacはUSB-C/Thunderbolt 4しか付いていないはずですね」
参考: Thunderbolt 4とはどんな規格? USB-Cや3との違いも丁寧に解説! | マクリン
🔗 recheck: 正規表現のReDoS脆弱性チェッカー
- サイト: recheck
つっつきボイス:「前回取り上げた正規表現のReDoSの理論解説記事(ウォッチ20221026)の執筆メンバーが作ったWebサービスとリポジトリです: Playgroundに脆弱な正規表現サンプルが出てくるのですぐ試せます」「元の記事でも書かれているように、このチェックが完全とは限らないし時間がかかりすぎる可能性もあるけど、脆弱性の大半を検出できるだけでもありがたい🙏」「このrecheckをバッチでかけたくて最近手元でコンパイルしようとしたときに、Scala言語で書かれていることに気づきました」
後編は以上です。
バックナンバー(2022年度第4四半期)
週刊Railsウォッチ: Packwerkの詳しい解説書『Gradual Modularization for Ruby and Rails』ほか(20221101前編)
- 20221026後編 Ruby 3.2のData.define、RubyPrize 2022最終ノミネート、Puma-dev gemほか
- 20221025前編 rodauth-rails gem作者の解説記事、turbo-railsの有料チュートリアルほか
- 20221019後編 Ruby技術者認定試験再受験無料キャンペーン、Starlink日本で販売開始ほか
- 20221018前編 Rails向けLanguage Server “refreshing”開発中、JetBrains Fleetほか
- 20221012後編 RailsとPostgreSQLで列挙型を作成する6つの方法、Ubuntu Proほか
- 20221011前編 Turbo 7.2.0リリース、GitLabのDevSecOpsサーベイ結果ほか
- 20221004後編 ヒアドキュメント拡張の提案、『組織に自動テストを根付かせる戦略』ほか
- 20221003前編 Kaigi on Rails 2022のタイムテーブル発表、書籍『Practicing Rails』ほか
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。
週刊Railsウォッチについて
TechRachoではRubyやRailsなどの最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)
お知らせ: 来週は週刊Railsウォッチはお休みとし、通常記事を公開いたします。