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

週刊Railsウォッチ: ShopifyのRubyパーサーyarp、RJITを書いた理由ほか(20230413後編)

こんにちは、hachi8833です。

週刊Railsウォッチについて

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

TechRachoではRubyやRailsなどの最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)

追記(2023/04/14): 来週の週刊Railsウォッチはお休みいたします 🙇

🔗Ruby

🔗 yarp: ShopifyのRubyパーサー(Ruby Weeklyより)

Shopify/yarp - GitHub


つっつきボイス:「yarpは"Yet Another Ruby Parser"の略なんですね」「既存のCRubyパーサーを置き換えて移植性やメンテナンス性を高めようとしているらしい」「初期段階らしいけどコミット数は既に1700台か」「Shopifyはこういうのを次々に出していてすごい」

これは既存のCRubyパーサーを置き換えることを目的とした初期段階の進行中プロジェクトです。目的は次の 3 つです。

  • 移植性: このパーサーを他のプロジェクト、実装、およびツールで使えるようにしたい
  • エラー許容性: このパーサーができるだけ多くの構文エラーから回復できるようにしたい
  • メンテナンス性: 長期にわたって健全でいられるプロジェクトにしたい
    同リポジトリより

なお、CRuby本体のパーサーの中心となるのは以下のparse.yで、今見ると14,620行あります。

参考: ruby/parse.y at master · ruby/ruby · GitHub

以下はつっつき後に見つけたツイートです。

🔗 VSCodeのドキュメントにRubyのページができた(Ruby Weeklyより)


つっつきボイス:「Ruby Weeklyによると、VSCodeのページにRubyの情報が掲載されたのは初めてとのことなので、archive.orgを見てみたら本当につい最近できてました」

「VSCodeのドキュメントにShopifyのRuby LSP拡張やvscode-ruby-lspも公式に掲載されているのは感慨深いですね」

参考: Ruby LSP - Visual Studio Marketplace

Shopify/vscode-ruby-lsp - GitHub

🔗 RJITを書いた理由


つっつきボイス:「@k0kubunさんのRJIT記事だ」「RJITはMJITに代わってマージされたんですよね(ウォッチ20230322)」「Twitterの反響もすごいですね」「RJITでMatzのコミット数を抜いたのか」「RJITの解説マジでありがたい」「技術的にめちゃめちゃ興味深い内容👍」「今年のRubyKaigi 2023でk0kubunさんがJITを書ける人を増やすトークをするとあるので楽しみですね」

「MJITだと動的なコードの最適化が難しかったのか、わかる」「YJITは比較的保守的な分、RJITで実験的なことをやれるようにするのも目的のひとつなんですね」「実験の場が増えるとJITで遊ぶ人も増えそう」「RJITでgccに依存しなくなったことでコードをモンキーパッチで差し替えられるようになったのね、なるほど」


以下はつっつき後に見つけたツイートです。

🔗 設計・セキュリティ

🔗 ログイン設計とパスキー普及のポイント


つっつきボイス:「ログインUXの設計の話ですね」「docomoのパスキー対応は既にあちこちが動き始めていますけど、上の記事を書いた直後にマネーフォワードさんも正式にパスキーに対応したのか、早いな〜」

参考: Passkey autofillを利用したパスワードレスログイン導入で得たものと、得られなかったもの - Money Forward Developers Blog
参考: 『マネーフォワード ID』「パスキー」対応のお知らせ|株式会社マネーフォワード
参考: パスキー認証とは | dアカウント

「ところで、パスキー導入はいいことだと思いますけど、ログインする本人でないとわからないことやできないことが増えるので、テストやサポート問い合わせの対応が今までのようにいかなくなるでしょうね」「あ、それもそうか」「代わりに操作してあげるとかはできなくなりますよね」「そのあたりはパスキーに慣れたユーザーが増えてきたら違ってくるでしょうけどね」

「その意味でも、記事にある"使える人だけに使わせる"というUX設計は、開発側とユーザー側双方の負担を減らすのにも効果的だと思います」「たしかに」

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

🔗 Docker DesktopのWasmランタイム対応(Publickeyより)


つっつきボイス:「昨年取り上げたDocker DesktopのWasmランタイム対応(ウォッチ20221102)がTechnical Preview2になったそうです」「こんなのが出るんですか」「形としてはWasmランタイムがDocker Desktopにバンドルされるわけですが、runwasiというものを導入して複数のWasmランタイムを選べるようになったらしい」

containerd/runwasi - GitHub

参考: WebAssembly - Wikipedia

「Wasmコンテナ的なものは最近急速に進んでいる感じはありますね」「記事によるとDocker DesktopのWasmランタイムは今のところarmやx86みたいなCPUプラットフォームに依存しているみたいだけど↓、Wasmコンテナイメージそのものはプラットフォームを基本的には気にしなくてよくなりそうですね」

Technical Preview 2はMac(Intel/Arm)、Linux(Intel/Arm)、Windowsに対応しています。
同記事より

🔗 Suicaのクラウド移行


つっつきボイス:「Suicaって今まで自動改札機が独立して動いてたんですか」「当時のネットワークやサーバーの事情ではそうしないと応答性を維持できないなどの理由があったようですけど、今ならサーバー型でもやれるでしょうし、おそらくクラスタにしてエッジを改札機の近くに置いたりするんじゃないかな」「そうですね」「当時としてはベストな技術を選んだんだろうなと思うし、2001年導入から随分経つので全面的に作り直してもいいと思います」「25年近く運用してうまくいってるのはたしかに凄い」

参考: Suica - Wikipedia

「これまでは料金表などを改札機ごとに持って処理するしかなかったけど、サーバー型になればもっとリッチなサービスを提供できるようになるでしょうね」「記事のこのあたりがまさにそれですね↓」

メリットとしては改札機の導入・メインテナンスコストが削減できるほか、同社が現在準備している「QRコード乗車券」や「Suicaを使った新しいチケット」など、利用者側が新しい企画券を利用しやすい環境ができる。
同記事より

「JR東日本で買ったチケットがJR東海に乗り入れできないみたいな問題も解決して欲しいですね」「JR各社は独立した企業だから、そういう乗り入れ問題がどこまで解消されるかは気になりますね」

参考: “エリアをまたいだ乗車”実現なるか? 「Suica」の改札システムが順次リニューアル 2026年度完了予定 - ITmedia Mobile

🔗JavaScript

🔗 ECMAScriptプロポーザルでUnicodeフラグや正規表現の拡張を提案

tc39/proposal-regexp-v-flag - GitHub


つっつきボイス:「\uフラグを付けて\p{ASCII_Hex_Digit}みたいにUnicode文字プロパティで書けるのは現在のJavaScriptでもできますけど、可読性も高いし便利なんですよね」

「でも\uフラグだと単一のコードポイントしか扱えなかったので、今回のプロポーザルでは\vフラグとBasic_Emojiなどの文字プロパティが追加されて、絵文字のように複数のコードポイントを使う文字を指定できるようになったのか、なるほど」

--で差集合、&&で積集合などの集合演算も面白い」「RubyのOnigmoエンジンだと&&が使えるので↓、一方を[^]で補集合にすると差分が取れるんですが、JavaScriptでもこれができるようになったら嬉しい😂」

Rubyの正規表現は`&&`のintersectで文字セットの「差分」を取れる

🔗言語/ツール/OS/CPU

🔗 Homebrew 4.0


つっつきボイス:「hsbtさんの記事を読んで私もbrew untap homebrew/corebrew untap homebrew/caskをやってみたら、本当に1GBほど容量が削減されました」「なるほど、4.0になってformulaeを全部ダウンロードすることをしなくなったんですね」「いいな〜、自分も4.0にアップグレードしよう」

参考: Homebrew Formulae

「他にRuby CIのSprocketsをpropshaftに変更するというのもやっているんですね」「私も自分のRailsアプリでpropshaft使っていて大好きです❤️」

Propshaft gem README(翻訳)

🔗 6502アセンブラ入門


つっつきボイス:「6502はファミコンやApple IIで使われていたことで有名な1970年代の8ビットCPUなんですが、あまりに懐かしくて拾ってみました」

参考: MOS 6502 - Wikipedia

「入門ではこのビジュアルエミュレータを使っていますね↓」

参考: Visual 6502 in JavaScript

「当時はIntelの8080とモトローラの6800という8ビットCPUが2大巨頭で、Z80が登場したばかりの頃だったんですが、今見るとこんなに仕様が小さかったんだなという気持ちです」

「6502は演算用レジスタが1個しかなくて、最初見たときはこれでどうやって動かすのかと思ったら、メモリ空間のゼロページを予約してレジスタ代わりに使うという方法でした」「メモリ参照を添字的にレジスタっぽく使う手法はありますね」

「こんな少ないレジスタでもやれるんだぞ感があって清々しいですね〜」「6502を作ったMOS Technology社は当時資金が足りなくてレジスタをぎりぎりまで減らしたという記事を大昔に読んだことがあります」(以下延々)

後でWebで実行できる6502エミュレータをもうひとつ見つけました↓。

参考: virtual 6502 Emulator


後編は以上です。

バックナンバー(2023年度第2四半期)

週刊Railsウォッチ: 複合主キーの実装が進む、Rails公式のバグ再現用テンプレートほか(20230412前編)

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

Ruby Weekly

Publickey

publickey_banner_captured


CONTACT

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