Kaigi on Rails 2026 で「Zen and the Art of File Upload Maintenance」という話を発表させていただきました。CarrierWave との戦いの記録、信頼性、アップグレード、そしてパフォーマンスの話をしたわけですけど、
パフォーマンスといえば、こんな図を出していたんですけど、覚えていますか?
しれっと出てますけど、どうやって測ったのか、気になりませんか? これはですね、自分で作った gem である orange_tap を使って測っています。
orange_tap が何かというと、Ruby の TracePoint を使ってメソッドの呼び出しと戻りをフックして、OpenTelemetry 形式の JSON ファイルを出力するツールです。OSS で公開しています。
名前は、SystemTap という Linux の定番のトレーサーの名前から取っていて、なんとか tap にしたかったんですけど、
オレンジの蛇口ですね。ということで、ロゴも作ってます。
orange_tap の使い方を見ると、どういうものかすぐ分かるんですけど、open で囲んだところの処理のトレースを取って、span のツリーを作ります。
仕組みとしてはこんな感じで、TracePoint で call と return をフックして、イベントをどんどん別のスレッドに送り込んで、span を組み立てて、JSON を吐き出すという感じになります。
この JSON はそのままだと可視化できないので、
OpenTelemetry 互換の JSON をパースできる otel-oneshot というコマンドを作って、span を可視化できるようにしました。これも CLI で可視化できるようにしています。
絞り込むこともできて、Storage#put が N+1 で起こってます、みたいなのが可視化できます。
ここまでは普通に OSS を作ったんですけど、何が面白いかって、
このツールは全部 CLI で完結したり、Ruby に組み込むものなので、AI エージェントに使わせることができます。実際、計測して、可視化して、読解させて、ボトルネックを探る、というのをスキルにまとめて Claude Code に使わせて、実際の値を測ったり、ボトルネックを突き止めたりしました。
こんな感じで、「ファイルアップロードの前処理のパフォーマンスの違いを計測したいので、orange_tap を使ってください」と指示をしたら、スキルを使って指示を受け取って、計測をしてくれる。
処理の呼び出しの回数も見えるし、そのままグラフも作ってくれる、みたいな感じで、可視化がめちゃくちゃはかどるなと。
学びとしては、なんとなく中身を知りたいなと思って作ったんですけど、昔作った Vivarium を応用しただけなんですけど、作ってみたらいい感じに刺さって、AI 時代こそ可観測性だと思ったんですね。以前は、可観測性がブームだからと導入したとしても、人間がそのデータを使いこなせなかったんですよ。ちょっと人間が弱くて。AI は可観測性を見事に使いこなせるので、debug-mcp なんかも似たような感じだと思うんですけど、アプリの可観測性を上げるのが重要だなというのは、すごく感じました。
まとめると、orange_tap を作って、あと otel-oneshot で AI に可視化させて活用して、こんな感じで可観測性を上げていけば、負債にも対応しやすくなるのかなと思います。
SmartHR をよろしくお願いします。ご清聴ありがとうございました。