こんにちは、hachi8833です。
追記(2023/04/14): 来週の週刊Railsウォッチはお休みいたします 🙇
🔗Ruby
🔗 yarp: ShopifyのRubyパーサー(Ruby Weeklyより)
つっつきボイス:「yarpは"Yet Another Ruby Parser"の略なんですね」「既存のCRubyパーサーを置き換えて移植性やメンテナンス性を高めようとしているらしい」「初期段階らしいけどコミット数は既に1700台か」「Shopifyはこういうのを次々に出していてすごい」
これは既存のCRubyパーサーを置き換えることを目的とした初期段階の進行中プロジェクトです。目的は次の 3 つです。
- 移植性: このパーサーを他のプロジェクト、実装、およびツールで使えるようにしたい
- エラー許容性: このパーサーができるだけ多くの構文エラーから回復できるようにしたい
- メンテナンス性: 長期にわたって健全でいられるプロジェクトにしたい
同リポジトリより
なお、CRuby本体のパーサーの中心となるのは以下のparse.yで、今見ると14,620行あります。
参考: ruby/parse.y at master · ruby/ruby · GitHub
以下はつっつき後に見つけたツイートです。
A spec-compliant parser, coming to a Ruby near you.
100% on all test targets, and all of the codebases I can get my hands on.
I am so happy and relieved it's ridiculous.https://t.co/9zTpWKiXMY
— Kevin Newton (@kddnewton) March 25, 2023
🔗 VSCodeのドキュメントにRubyのページができた(Ruby Weeklyより)
つっつきボイス:「Ruby Weeklyによると、VSCodeのページにRubyの情報が掲載されたのは初めてとのことなので、archive.orgを見てみたら本当につい最近できてました」
「VSCodeのドキュメントにShopifyのRuby LSP拡張やvscode-ruby-lspも公式に掲載されているのは感慨深いですね」
参考: Ruby LSP - Visual Studio Marketplace
🔗 RJITを書いた理由
Link: RJIT: RubyでRubyのJITコンパイラを書いた - k0kubun's blog https://t.co/y2lz4jwtO7
— Yukihiro Matz (@yukihiro_matz) April 6, 2023
つっつきボイス:「@k0kubunさんのRJIT記事だ」「RJITはMJITに代わってマージされたんですよね(ウォッチ20230322)」「Twitterの反響もすごいですね」「RJITでMatzのコミット数を抜いたのか」「RJITの解説マジでありがたい」「技術的にめちゃめちゃ興味深い内容👍」「今年のRubyKaigi 2023でk0kubunさんがJITを書ける人を増やすトークをするとあるので楽しみですね」
「MJITだと動的なコードの最適化が難しかったのか、わかる」「YJITは比較的保守的な分、RJITで実験的なことをやれるようにするのも目的のひとつなんですね」「実験の場が増えるとJITで遊ぶ人も増えそう」「RJITでgccに依存しなくなったことでコードをモンキーパッチで差し替えられるようになったのね、なるほど」
以下はつっつき後に見つけたツイートです。
RJIT: RubyでRubyのJITコンパイラを書いた - k0kubun's blog https://t.co/bm6QpHAUzf ソース読んでる。まだ限られたメソッドの引数がFixnumとStringしか高速ルート使っていなさそうなのにこれだけパフォーマンスでるの凄い。伸び代たっぷり
— Miura Hideki (@miura1729) April 7, 2023
🔗 設計・セキュリティ
🔗 ログイン設計とパスキー普及のポイント
つっつきボイス:「ログインUXの設計の話ですね」「docomoのパスキー対応は既にあちこちが動き始めていますけど、上の記事を書いた直後にマネーフォワードさんも正式にパスキーに対応したのか、早いな〜」
参考: Passkey autofillを利用したパスワードレスログイン導入で得たものと、得られなかったもの - Money Forward Developers Blog
参考: 『マネーフォワード ID』「パスキー」対応のお知らせ|株式会社マネーフォワード
参考: パスキー認証とは | dアカウント
「ところで、パスキー導入はいいことだと思いますけど、ログインする本人でないとわからないことやできないことが増えるので、テストやサポート問い合わせの対応が今までのようにいかなくなるでしょうね」「あ、それもそうか」「代わりに操作してあげるとかはできなくなりますよね」「そのあたりはパスキーに慣れたユーザーが増えてきたら違ってくるでしょうけどね」
「その意味でも、記事にある"使える人だけに使わせる"というUX設計は、開発側とユーザー側双方の負担を減らすのにも効果的だと思います」「たしかに」
🔗クラウド/コンテナ/インフラ/Serverless
🔗 Docker DesktopのWasmランタイム対応(Publickeyより)
- 元記事: Docker+Wasm Technical Preview 2がリリース。Wasmをコンテナとして扱える業界標準「runwasi」採用でWasmランタイムを選択可能に - Publickey
つっつきボイス:「昨年取り上げたDocker DesktopのWasmランタイム対応(ウォッチ20221102)がTechnical Preview2になったそうです」「こんなのが出るんですか」「形としてはWasmランタイムがDocker Desktopにバンドルされるわけですが、runwasiというものを導入して複数のWasmランタイムを選べるようになったらしい」
「Wasmコンテナ的なものは最近急速に進んでいる感じはありますね」「記事によるとDocker DesktopのWasmランタイムは今のところarmやx86みたいなCPUプラットフォームに依存しているみたいだけど↓、Wasmコンテナイメージそのものはプラットフォームを基本的には気にしなくてよくなりそうですね」
Technical Preview 2はMac(Intel/Arm)、Linux(Intel/Arm)、Windowsに対応しています。
同記事より
🔗 Suicaのクラウド移行
つっつきボイス:「Suicaって今まで自動改札機が独立して動いてたんですか」「当時のネットワークやサーバーの事情ではそうしないと応答性を維持できないなどの理由があったようですけど、今ならサーバー型でもやれるでしょうし、おそらくクラスタにしてエッジを改札機の近くに置いたりするんじゃないかな」「そうですね」「当時としてはベストな技術を選んだんだろうなと思うし、2001年導入から随分経つので全面的に作り直してもいいと思います」「25年近く運用してうまくいってるのはたしかに凄い」
「これまでは料金表などを改札機ごとに持って処理するしかなかったけど、サーバー型になればもっとリッチなサービスを提供できるようになるでしょうね」「記事のこのあたりがまさにそれですね↓」
メリットとしては改札機の導入・メインテナンスコストが削減できるほか、同社が現在準備している「QRコード乗車券」や「Suicaを使った新しいチケット」など、利用者側が新しい企画券を利用しやすい環境ができる。
同記事より
「JR東日本で買ったチケットがJR東海に乗り入れできないみたいな問題も解決して欲しいですね」「JR各社は独立した企業だから、そういう乗り入れ問題がどこまで解消されるかは気になりますね」
参考: “エリアをまたいだ乗車”実現なるか? 「Suica」の改札システムが順次リニューアル 2026年度完了予定 - ITmedia Mobile
🔗JavaScript
🔗 ECMAScriptプロポーザルでUnicodeフラグや正規表現の拡張を提案
つっつきボイス:「\u
フラグを付けて\p{ASCII_Hex_Digit}
みたいにUnicode文字プロパティで書けるのは現在のJavaScriptでもできますけど、可読性も高いし便利なんですよね」
「でも\u
フラグだと単一のコードポイントしか扱えなかったので、今回のプロポーザルでは\v
フラグとBasic_Emoji
などの文字プロパティが追加されて、絵文字のように複数のコードポイントを使う文字を指定できるようになったのか、なるほど」
「--
で差集合、&&
で積集合などの集合演算も面白い」「RubyのOnigmoエンジンだと&&
が使えるので↓、一方を[^]
で補集合にすると差分が取れるんですが、JavaScriptでもこれができるようになったら嬉しい😂」
🔗言語/ツール/OS/CPU
🔗 Homebrew 4.0
つっつきボイス:「hsbtさんの記事を読んで私もbrew untap homebrew/core
とbrew untap homebrew/cask
をやってみたら、本当に1GBほど容量が削減されました」「なるほど、4.0になってformulaeを全部ダウンロードすることをしなくなったんですね」「いいな〜、自分も4.0にアップグレードしよう」
「他にRuby CIのSprocketsをpropshaftに変更するというのもやっているんですね」「私も自分のRailsアプリでpropshaft使っていて大好きです❤️」
🔗 6502アセンブラ入門
自分で宣伝:
6502 アセンブラ プログラミング入門https://t.co/SlIR75pGr1— 新山祐介 (Yusuke Shinyama) (@mootastic) April 2, 2023
つっつきボイス:「6502はファミコンやApple IIで使われていたことで有名な1970年代の8ビットCPUなんですが、あまりに懐かしくて拾ってみました」
「入門ではこのビジュアルエミュレータを使っていますね↓」
「当時はIntelの8080とモトローラの6800という8ビットCPUが2大巨頭で、Z80が登場したばかりの頃だったんですが、今見るとこんなに仕様が小さかったんだなという気持ちです」
「6502は演算用レジスタが1個しかなくて、最初見たときはこれでどうやって動かすのかと思ったら、メモリ空間のゼロページを予約してレジスタ代わりに使うという方法でした」「メモリ参照を添字的にレジスタっぽく使う手法はありますね」
「こんな少ないレジスタでもやれるんだぞ感があって清々しいですね〜」「6502を作ったMOS Technology社は当時資金が足りなくてレジスタをぎりぎりまで減らしたという記事を大昔に読んだことがあります」(以下延々)
後でWebで実行できる6502エミュレータをもうひとつ見つけました↓。
後編は以上です。
バックナンバー(2023年度第2四半期)
- 20230406後編 Rubyオブジェクトモデルクイズの最難問ほか
- 20230405前編 Arel::Nodes::NodeにAPIドキュメントが追加、rubocop-mdほか
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。
週刊Railsウォッチについて
TechRachoではRubyやRailsなどの最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)