萌えハッカーニュースリーダー

2025/08/18 11:22 How I Made Ruby Faster Than Ruby

出典: https://noteflakes.com/articles/2025-08-18-how-to-make-ruby-faster
hakase
博士

やっほー、ロボ子!新しいHTMLテンプレートライブラリ「P2」について話すのじゃ!

roboko
ロボ子

P2ですか、博士。それは一体どんなものなのですか?

hakase
博士

P2はね、HTMLをRubyで表現する新しいライブラリなのじゃ。テンプレートを効率的なRubyコードにコンパイルしてHTMLを生成するんだって!

roboko
ロボ子

コンパイルに特化している点が特徴なのですね。PhlexやPapercraftとは違うアプローチなのですね。

hakase
博士

そうそう!HTMLテンプレートはRubyのProcとして表現されて、`#render`メソッドを呼ぶとコンパイルされたコードが実行されるのじゃ。

roboko
ロボ子

なるほど。テンプレートのソースコードはSiropというgemでPrism ASTに解析されるとのことですが、ASTって何ですか?

hakase
博士

ASTは抽象構文木のことじゃ。ソースコードの構造を木構造で表現したものなのじゃ。それを`TagTranslator`クラスで変換して、HTMLのコード生成に使うカスタムノードに変換するんだって。

roboko
ロボ子

ふむふむ。そして、変換されたASTはSiropの`Sourcifier`クラスでソースコードに戻されるのですね。

hakase
博士

その通り!そしてね、P2のパフォーマンス改善のために、Jean Boussier(byroot)さんからのPRを参考にしたらしいのじゃ。

roboko
ロボ子

具体的にはどのような改善がされたのでしょうか?

hakase
博士

以前は補間された文字列をバッファにプッシュしていたのを、静的なHTML文字列を連結して一度にプッシュするように変更したのじゃ。あと、`rescue`句を削除したり、`# frozen_string_literal: true`というマジックコメントを追加したり。

roboko
ロボ子

`# frozen_string_literal: true`は、静的なHTMLコンテンツを凍結された文字列にするためのものですね。`CGI.escape_html`の代わりに`ERB::Escape.html_escape`を使うようにしたのもパフォーマンスのためでしょうか?

hakase
博士

さすがロボ子、よく分かってるのじゃ!ベンチマークの結果、改善前はERubiより3倍遅かったP2が、改善後はERBやERubiと同等のパフォーマンスになったらしいぞ。

roboko
ロボ子

それはすごいですね!コンパイルされたアプローチは、コンパイルされていないアプローチよりも約10倍高速とのこと。

hakase
博士

そう!この記事の結論は「Rubyは遅いわけではなく、高速なコードを書く方法を知っていれば非常に高速である」なのじゃ!Ruby-to-Rubyコンパイルのテクニックは他のDSLにも応用できる可能性があるって。

roboko
ロボ子

勉強になります!Rubyの可能性を改めて感じました。

hakase
博士

じゃあ、ロボ子。今度、P2を使ってロボ子のホームページを作ってあげるのじゃ!

roboko
ロボ子

ありがとうございます、博士!でも、私のホームページは既にHTMLで完璧に記述されています…。

hakase
博士

えへへ、冗談なのじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search