Uzumibi 0.5 をリリースした
リリースしたよ。
github.com
変えたところをいくつか。
router 、 * でマッチ可能にした
class App < Uzumibi::Router
get '/hello' do |req, res|
...
end
get '/*' do |req, res|
puts req.params[:*]
end
end
こうですね。ただ、そういえばSinatraは *.jpg とか *.* もできると気づいた。こっからっす!
ServiceWorker/WebWorkerを使って、ブラウザの中だけでRubyのルーティングにアクセスできるようにした
何言いよんねって感じの日本語になってしまった。
今、 uzumibi new -t serviceworker hoge みたいなコマンドを打つとServiceWorkerのプロジェクトが生成される。
make wasm && make serve するとWebサーバが立ち上がる。ブラウザでアクセスすると、Uzumibiアプリに対してリクエストを投げるためのフォームが表示されるので、色々操作するとリクエストが飛んでレスポンスが帰ってくる。404もわかる。

このUzumibiアプリが ServiceWorker のなかで動いているという塩梅。
techracho.bpsinc.jp
RailsでやっているこれをUzumibiでやってみたという感じで、 lib/app.rb にあるDSLでルーティングを追加して make wasm しなおせば反映される*1
ただ、ServiceWorker固有の制限(スーパーリロードすると動作しないとか)が面倒だなと思って*2、fetch() リクエストをただの WebWorker に送ってUzumibiからレスポンスを返すような実装も作った。それが webworker テンプレート。WebWorkerはただの非同期実行なので、ServiceWorkerでできるワーカの保持やfetch()の自動乗っ取りなどをしてくれないけど、「別途サーバを起動せずにRubyでAPIを用意する」みたいな用途はWebWorkerが合ってるかも。用途に応じて使い分けてください。
とはいえブラウザ標準技術は勉強したばかりで何もわからずなのです...。
今度、動的に Uzumibi App をServiceWorkerにデプロイするようなサンプルを作ってみたいところ。
newコマンドの受け入れテストをrunnでCIにした
uzumibi new コマンドからの開発の流れは、基本的に以下のようなことを想定している。
- プロジェクトのテンプレートを作る
- wasmをビルドする
- サーバを立ち上げる
- ブラウザなどでIt works! が出るのを確認する
uzumibi new で作られたファイルは何もしなくてもこれが動いて欲しいが、それなりの数サポートしているプラットフォームがあり、毎回手動で確認するのはアッ、ウッだった。
k1LoWさんが作っている runn は完全にこういうことの自動化にピッタリそうなので、AIの助けを借りながらCIに組み込んでみた。
github.com
始めは記法が難しかったがClaude Codeさんがググってくれたので徐々に理解できるようになった。
runn の良いところは、一つは上記の「サーバを立ち上げる」操作がバックグラウンド化できる(さらに、終了時の後始末も自動でやってくれる)点、もう一つは cdp ランナーがファーストクラスでサポートされている点だなと感じている。
例えば、 WebWorker テンプレートの場合こういう操作が想定されており、その性質上何かが表示されるだけではなく、「ブラウザでちゃんと動くか」が重要になる。
- プロジェクトのテンプレートを作る
- wasmをビルドする
- サーバを立ち上げる
- ブラウザでフォームから
/ へリクエストを送る
- 結果が Status: 200 になるのを確認する
cdpを使えるため、ブラウザからfetchを送って結果を確認するという操作も自動化できる。まるでUzumibiのcliを検査するために作られたかのようなツールだなと感じている。
今後、例えば Cloudflare テンプレートでプロジェクトを作ったあと Durable Object を使ったコードを起動し、実際動くか試す...。みたいなテストも自動化できるのでは?と思っており、品質面で夢が広がる。
というかrunn、絶対仕事でも使おうと思った。肌感Rubyコミュニティの人にはあまり知られていなくて不思議。
という感じでUzumibiの方もじわじわ欲しい機能を作っているところ。
余談 of 余談: AI時代の個人OSS開発者の気持ち
続きを読む