RubyKaigi 2026 で発表してきました: Portable and Fast - How to implement a parallel test runner

はじめに

今回の RubyKaigi 2026 は2026年4月22日〜24日に北海道函館市で開催され、私は初登壇者でした!
Portable and Fast - How to implement a parallel test runner というタイトルで、 test-unit 本体でマルチプロセスベースの「ポータブルで速い」並列テストランナーをサポートした話をしてきました。

発表について

Red Data Tools 開発者に聞け! の「test-unit の並列実行対応編」でやってきた内容を30分に凝縮したものです(マルチプロセスベースの実装に焦点をあてています)。できるだけわかりやすいように噛み砕いて説明したつもりなので、発表が終わった後に数人から「大変分かりやすかったです!」と言ってもらえたのはすごく嬉しかったです。

それなりに省いたつもりではいたんですが、スライドの枚数が100枚を超えてしまいました。練習ではギリギリ収まりそう!ぐらいの時間だったんですが、本番ではオーバーしそうになり、仕方なく Ractor (と Ruby::Box)の話は省略しました。

廊下トークで、まつしまさん とテストの並列実行について盛り上がり、まつしまさんが「並列実行するためのツールを作ったことがあるんですよ〜」などなど、話せて楽しかったです。

すとうさんが繋いでくれて、 Speee さんから一人で参加されていた方(申し訳ない、名前を失念してしまいました)にも興味を持っていただけて、テストの話、RubyKaigi の盛り上がりなどなど、こちらも色々と話せて楽しかったです。

すとうさんに Ractor と Ruby::Box が仲良く(?)するやつ を matz さん、ささださん、たごもりすさんにネゴってもらいました(本当にありがとうございます)。良い方向に向かいそうなので、 test-unit のユースケースを追記して、進めていくぞ!それはそれとして、 test-unit の Ractor 並列実行対応を引き続きやっていくぞ!

Rabbit

今回初めてプレゼンツールに Rabbit を使わせてもらいました。 markdown 記法で書けて、Mermaid 記法にも対応しているので図が簡単に書けます!また、本番ではうさぎとかめの表示に随分と助けられました。

Rabbit 4 からは動画の埋め込みに対応しているので、埋め込みサンプル のように書くと、動画を埋め込むことができます(RABBIT_GTK=4 環境変数を設定するのをお忘れなく!)。

デモ動画を埋め込もうと思ったんですが、残念ながら Mac では動かず!main でも動かなかったので Issue に登録しておきました。直してくれることを期待!

また、オフィシャルパーティーですとうさんに「Rabbitショッカー人形」をプレゼントしてもらいました。やったね!

Rabbit ショッカー人形

コード懇親会

Ruby テーマに参加して、 Ruby::Boxのバグ を直そうとしたけど、直せませんでした。翌日、たごもりすさんに聞こうと思ったけど捕まえられなかったので、また今度!

まとめ

RUbyKaigi 2026 で初めて発表してきました。発表することで準備などなど色々と大変だったのですが、そのおかげでいつも以上に楽しめた RubyKaigi でした!

RubyKaigi 2026 で発表します: Portable and Fast - How to implement a parallel test runner

rubykaigi.org

Portable and Fast - How to implement a parallel test runner というタイトルで発表します。

Red Data Tools で、Sutou さんと Ono さんと一緒に test-unit 本体で並列テスト実行を開発しています。

Thread、マルチプロセス、Ractor の3つの並列実行をサポートする計画で進めています。Thread とマルチプロセスの2つは既に実装してリリース済みです。

今回の発表ではマルチプロセスベースの並列テスト実行に焦点を当てます。現在実装中の Ractor も最後にちょびっとだけ紹介する予定です。

ポータブルで速い並列テストランナーを実装するのがなぜ難しいのか?を説明してから、実際にそれらの課題をどうやって解決したかを説明します。

マルチプロセスプログラミングを実装したことがない人でもわかるように、なるべく噛み砕いて説明するように心がけました。

また、2日目のコード懇親会の Ruby テーマにも参加する予定です。Ruby::Box と Ractor について、相談する予定です。 matz さんとも話せると良いなあ。 昨年は Red Data Tools 枠があって、私が主に担当していました。ですが、今年は私がスピーカーになれたので、初めての発表準備と合わせてやるのは難しそうと判断してお断りしてしまいました。今回で大体のペースがわかったので、来年以降もしあれば、またスピーカーになれたとしても担当できると良いなあと思っています。

この記事は函館行きの飛行機の待ち時間に書いていますが、 JAL の管制システムトラブルで無事に辿り着けるか!?といった状況です。 発表は1日目の3本目の枠なので、飛行機が飛んでくれることを願います。 JAL さんがんばれー!

2020/02/13 日記

HHKB Professional HYBRID Type-S のファームウェアをアップデートした

macOS 専用のファームアップツール がリリースされていたのでアップデートした。

ファームウェアをアップデートするときは Bluetooth 接続ではなく、有線接続が必要だった。 Mac に付属の Type-C 充電ケーブルで Mac と HHKB を接続後、Fn + Control + 0 で有線接続に切り替えた。

ファームウェアが 2 種類同梱されていて、英語配列だったので HHKB800_FW_A041.hfb を指定した。 ファームウェアのアップデートに 4 分程度かかり、有線接続でも、Bluetooth 接続でも問題なく使えている。

Windows でも問題なく使えるかはまだ未検証。

なお、macOS 専用のキーリマップツールは 2020 年 5 月頃に公開予定とのこと。

2020/01/12 日記

Nike Training Club

自宅で簡単に体を鍛えたかったので iPhone にインストールした。

App Store で「自重トレーニング」で検索して、良さげだったのでこれにしてみた。App 内課金はあるようだが最初は無料で始められた。

インストールしてから分かったが自重トレーニング以外もあるようだ。まぁとりあえずやってみよう。

https://apps.apple.com/jp/app/nike-training-club/id301521403

2020/01/11 日記

HHKB Professional HYBRID Type-S 省電力を無効にしてみた

HHKB を Bluetooth 接続で1ヶ月弱使った。

仕事で平日1日8時間、私用で毎日1時間程度使ってきたが、電池1の残量2は 100 % のままだ。

HHKB のデフォルト設定だと、Bluetooth 接続でキー操作が30分間ない場合、自動的に HHKB の電源が切れてしまう。 電池の消耗を抑えるための、いわゆる省電力モードだ。

電池の消耗を抑えてくれるのはいいのだが、その状態から復帰するには HHKB のキー操作をしても復帰しない。 復帰するには、HHKB の電源ボタンを 1 秒以上長押しして、再度電源をオンにしないといけない。

これを回避するには、HHKB の6番目の DIP スイッチを ON にすれば良い。 どの程度、電池の消耗が激しくなるのかは未知数だが、エネループを使う想定なのでコスト面は問題ない。

この設定でしばらく様子を見てみよう。

マニュアル HHKB Professional HYBRID Type-S / HYBRID(英語配列 / 無刻印)

Perculia

MacBluetooth 接続している機器の電池残量を見れるアプリのはずだが、見れなかった・・。 Windows では見れるからよしとしよう。

https://apps.apple.com/jp/app/perculia/id1462633284?mt=12

esa.iomarkdown ライクな入力を実現する Chrome 拡張

esa.io の中の人が作成した Chrome 拡張。昔から使ってて、私用の Mac にはインストールしていなかったのでインストールした。

ブラウザで markdown 書くのが捗る。

esarea

ブラウザで開いているページを markdown のリンク形式でクリップボードにコピーしてくれる Chrome 拡張

これも esa.io の中の人が作成した Chrome 拡張。同じく、私用の Mac にはインストールしていなかったのでインストールした。 単機能なのがお気に入り。

・・が、更新が 2015 年 1 月で止まってるせいなのか、クリップボードにコピーされないなぁ。

Markdown Linker


  1. 電池は製品に付属していた単三の乾電池を使用している

  2. WindowsBluetooth 設定画面から、電池の残量が確認できる

2020/01/10 日記

NEC Wi-Fi 6 対応ルータ

ついに発表された。 物欲をそそられるが、対応している手持ちのクライアントが iPhone 11 しかないのが難点だ。

https://pc.watch.impress.co.jp/docs/news/1227872.html

はてなブログで今日の日記を書くブックマークレット

3 回同じことをやったら自動化するって偉い人が言ってたので Chrome で動作するブックマークレットを作った。

特定の URL に遷移後、何か処理を実行することができなかったので、2つに分けた。

javascript: location.href = 'https://blog.hatena.ne.jp/tikkss/tikkss.hatenablog.jp/edit';
javascript: (() => {
  const yyyymmdd = new Date().toLocaleString('ja-JP', { year: 'numeric', month: '2-digit', day: '2-digit' }).split(' ')[0];
  document.querySelector('#title').value = `${yyyymmdd} 日記`;
})()

JavaScript には Ruby でいう #strftime のような日時をフォーマットする関数がない。 ググる#getFullYear などで、整形するサンプルが沢山ひっかかるが煩雑である・・。

代替として #toLocaleString を使って実装した。 実装されているブラウザは限られるが、ブックマークレット用途で使うブラウザは Chrome なので問題なし。

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString#Browser_Compatibility

#toLocaleString の options は下記を参照した。

http://www.htmq.com/js/date_toLocaleString.shtml

@t_wada さんの講演資料を読んだ

長かったが全部読み切った。

3種の神器のメタファ良いなぁ。 導入したときにすごい効果がありそう感が伝わってくる。

https://t-wada.hatenablog.jp/entry/clean-code-that-works

2020/01/09 日記

コミットメッセージ

いつからだろうか・・、VCS に記述するコミットメッセージが段々と長くなってきた。 変更の経緯などを細かく記述するようになったためだ。

コメントの話になると @t_wada さんのツイートを思い出す。

最近だと @sinsoku_listy さんのブログエントリが最高だった。

sinsoku.hatenablog.com

Git のコミットメッセージを自動改行してくれるやつ

Vim では出来た。 ・・が、日本語だと自動改行してくれない。惜しいなぁ。

https://stackoverflow.com/questions/11023194/automatically-wrap-long-git-commit-messages-in-vim

Add this to your .vimrc: au FileType gitcommit setlocal tw=72

RubyMine では不明。 IntelliJ IDEA には7年前に実装されているっぽいが・・。 RubyMine で同様な設定が見つからない。

https://youtrack.jetbrains.com/issue/IDEA-53615

They can be configured in Settings | Version Control [x] Commit message right margin (columns): 72 [ ] Wrap when typing reaches right margin

shebang

シバン って読むのかー。 シェバンッ って読んでた。

https://fjord.jp/kuroigamen/8.html

「黒い画面」にはスクリプトを単体で実行するために shebang (シバン)という機能があります。

それにしてもフィヨルドさんの説明は分かりやすいなぁ。