STORES Product Blog

こだわりを持ったお商売を支える「STORES」のテクノロジー部門のメンバーによるブログです。

RubyKaigi 2024に STORES から5名が登壇、2名がLTに登壇します

こんにちは、STORES のえんじぇるです。RubyKaigi 2024では、STORES から5名が登壇、2名がLTに登壇します。

発表内容について登壇者それぞれから紹介します。ぜひ参考にしていただき、トークを聞きに来ていただけると嬉しいです!

Exploring Reline: Enhancing Command Line Usability

Exploring Reline: Enhancing Command Line Usability - RubyKaigi 2024

  • 日時:5/15(水)16:00〜16:30
  • 場所:Small Hall
  • 発表者:@ima1zumi

STORES エンジニアのima1zumiです。趣味でIRBとReline等のメンテナとして活動しており、RubyKaigi 2024ではRelineについて発表します。

RelineはPure Rubyで書かれたライブラリで、Ruby 2.7からRubyに同梱されているbundled gemです。IRBやDebugのバックエンドで動き、コマンドラインで文字列や履歴の操作ができる機能を提供しています。例えば、IRBで左矢印キーを入力したらカーソルが左に移動するという機能はRelineが提供しています。

RelineはGNU Readlineとの互換性を謳っています。GNU Readlineはbashなどのライブラリで広く利用されているラインエディタで、Ruby 2.6以前のIRBでも使われています。Relineでは基本的な操作は一通り行えますが、.inputrc でのカスタマイズや、Emacs mode、Vi modeでの機能はまだ不足しており、Readlineで使える機能がRelineでは使えないという問題がときおり報告されています。 加えてRuby 3.3.0からは require 'readline' でRelineが呼び出されるようになりました。このためRelineはGNU Readlineとの互換性が求められる状況ですが、まだまだ機能が不足していることと、どんな機能が足りないのか整理されていないという課題があります。

本発表ではそんなGNU ReadlineとRelineの機能について解説しながら、GNU Readlineの機能の紹介と整理、そしてRelineがどうやってその機能を実装しているのかを簡単に紹介します。ラインエディタもエディタなので、文字を扱う複雑さを内包しているのです。お楽しみに。

Ractor Enhancements, 2024

Ractor Enhancements, 2024 - RubyKaigi 2024

  • 日時:5/15(水)16:40〜17:10
  • 場所:Large Hall
  • 発表者:@ko1

本講演では、Ruby上で並列・並行プログラミングを可能にするRactorの最近のアップデートについて紹介します。

Ractorにはまだ基本的な機能が欠けています。例えば、"require "メソッドや "timeout "メソッドは、同期や実装の問題から、メインでないRactorでは使用できません。このような問題とその解決方法について説明します。性能の観点からは、Ruby 3.3でM:Nスレッドスケジューラを導入しましたが、それと Ractor の関係についてご紹介します。

Good first issues of TypeProf

Good first issues of TypeProf - RubyKaigi 2024

  • 日時:5/16(木)16:00〜16:30
  • 場所:Large Hall
  • 発表者:@mametter

Ruby の型解析ツール TypeProf を、主にコントリビュートという観点から紹介してみようと思ってます。

TypeProf は Ruby の型推論ツールとしてスタートしましたが、昨年から IDE 支援を主目的に据えて作り直しています。 現在、TypeProf の開発は TypeProf 拡張の入った VSCode の上でやってます(ドッグフーディング)。ほとんど型注釈なしですが、なかなかの確率で定義ジャンプや自動リネームができてます。期待値コントロールがむずかしいのですが、個人の感想としては革命的に便利です。

しかし、TypeProf は実用するには未完成です。たとえば、TypeProf はまだ遠藤がよく使う Ruby 文法にしか対応していないので、非対応構文がたくさんあり、それらを使った瞬間に TypeProf は異常終了してしまいます。

本発表では、TypeProf の現状をデモした上で、開発環境のセットアップ方法 *1 、典型的な開発の流れ *2 、"good first issue" *3 などを紹介してみたいと思ってます。

ということで、現状の TypeProf を試してみたい!貢献してみたい!と少しでも思っている人は、ぜひ見ていただけるとありがたいです!

ただ、次節の @ahogappa さんの発表が裏番組になってて、そちらもすごくおもしろいので、どうにかして両方見てほしい!

It's about time to pack Ruby and Ruby scripts in one binary

It's about time to pack Ruby and Ruby scripts in one binary - RubyKaigi 2024

  • 日時:5/16(木)16:00〜16:30
  • 場所:Small Hall
  • 発表者:@ahogappa

Rubyは様々なOSとアーキテクチャの組み合わせて動かせる言語ですが、移植性が高いと言うわけではありません。なぜなら、双方で同じバージョンのRubyとGemがインストールされている必要があるからです。

この問題を解決する一つの方法として、実行に必要なRubyとGemを含める、ワンバイナリ化という方法があります。私はRubyで開発できるゲームエンジンを開発しているのですが、ゲームを配布するときにRubyスクリプトとGemを一つにして配布したいと思いました。そこで、RubyとGemを一つまとめることができるGemを開発しました。このGemはRubyのバージョンに依存しないようにRuby本体に修正を入れないようにして開発し、さらに類似のGemには珍しい面白機能も搭載しています。本発表ではGemを実際にデモで動かしながら、このGemでできることを紹介しようと思っています。

ということで、Rubyのワンバイナリ化についてデモしつつ、技術的なところも発表できたらなと思っております。 また、発表には載っけられなかった細々とした話もたくさんあるので、興味ある方はぜひ会場などでもお話しできたらなと思っております! (個人的にも@mameさんの発表めっちゃ見たい...!)

Make Your Own Regex Engine!

Make Your Own Regex Engine! - RubyKaigi 2024

  • 日時:5/17(金)16:00〜16:30
  • 場所:Large Hall
  • 発表者:@makenowjust

STORES でアルバイトをしているmakenowjustです。正規表現は文字列処理を行うプログラミング言語の機能です。正規表現は様々なプログラミング言語で実装されているのですが、実際にどのように実装されているかを知っている人は少ないのではないでしょうか。

この発表では、Rubyを使って小さな正規表現エンジンを実装する方法を説明します。正規表現エンジンは、基本的な機能だけであれば、意外にも数百行のRubyプログラムで実装できます。また、構文解析→コンパイル→VMで実行という流れはプログラミング言語処理系の構造と同じで、これからプログラミング言語を作ってみたいと思っている人にも面白い題材なのではないかと思います。

Visualize the internal state of ruby processes in Real-Time

LT - RubyKaigi 2024

  • 日時:5/16(木)17:20〜18:20 (Lightning Talks)
  • 場所:Large Hall
  • 発表者:@hogelog

Rubyのプログラムを実行する時、Rubyプロセスの中で何がおきているか知りたいという素朴な疑問は誰しも抱くものだと思います。そのような時にカジュアルにRubyプロセスの中身をリアルタイムに覗けるVisualVMのようなツールが欲しい! そんな気持ちから開発しはじめたMetricsMonitorについて5分間精一杯お伝えいたします。

Hotspot on Coverage

LT - RubyKaigi 2024

  • 日時:5/16(木)17:20〜18:20 (Lightning Talks)
  • 場所:Large Hall
  • 発表者:@shia

Coverage は何かと便利です。本番で動かして実行されないコードも検出できますし、過去のテスト実行履歴から変わったコードに使われたテストを絞ることも可能です。この発表ではコード実行のホットスポットを探すためにカバレッジを使ってみた話をします。

*1:vscode 拡張入れて typeprof リポジトリを開くだけ、になるはず。

*2:テストシナリオを書いて、Prism の AST ノードをラップするクラスを書く。

*3:非対応構文の対応、エラーの追加や改良、フロー解析の追加などなど。