AI Navigate

Shopify/liquid: パフォーマンス: パースとレンダリングを53%高速化、割り当てを61%削減

Simon Willison's Blog / 2026/3/13

📰 ニュースDeveloper Stack & InfrastructureTools & Practical UsageModels & Research

要点

  • Shopify Liquidは autoresearch主導のマイクロ最適化を通じて、パース+レンダリングを53%高速化し、割り当てを61%削減しました。
  • 主要な最適化には StringScanner トークナイザの置換として String#byteindex を使い、タグ名の純粋なバイト解析を行い、コストの高いリセットを回避することが含まれます。
  • PRは約120件の自動実験から93件のコミットを追跡しており、何がうまくいったかの詳細なメモがあります。
  • 頑健なテストスイート(974個のユニットテスト)がコーディングエージェントの安全な反復を可能にし、 autoresearchパターンを性能向上のスケーラブルなアプローチとして示しています。

2026年3月13日 - リンクブログ

Shopify/liquid: パフォーマンス: パースとレンダリングを53%高速化、割り当てを61%削減 (経由) ShopifyのCEO Tobias Lütkeによる Liquid に対する PR。Liquid は Shopify のオープンソース Ruby テンプレートエンジンで、Tobi が 2006 年に初めて作った時 Django に多少影響を受けたとされています。

Tobi は autoresearch の variant を用いて、数十の新しいパフォーマンスのマイクロ最適化を見つけました。autoresearch は Andrej Karpathy のコード作成エージェントが数百の半自律的な実験を実行して、新しい有効なトレーニング技術を見つけるための新しいシステムです。並ぶリンク: autoresearchnanochat

Tobi の実装は、2日前にこの autoresearch.md のプロンプトファイルと、エージェントがテストスイートを実行し、ベンチマークスコアを報告するための autoresearch.sh スクリプトの組み合わせで開始されました。

このPRには、約120件の自動化された実験からの 93件のコミット が含まれています。PRの説明には、機能した点が詳しく記されています。いくつか例は以下のとおりです:

  • StringScanner トークナイザを String#byteindex に置換しました。 単一バイトの byteindex 検索は、正規表現ベースの skip_until より約40%高速です。これだけで解析時間を約12%短縮しました。
  • 純粋なバイト単位の parse_tag_token 毎回 {% %} トークンに対して呼ばれていた高価な StringScanner#string= リセットを排除しました(878回)。タグ名とマークアップ抽出のための手動バイトスキャニングは、リセットして再スキャンする StringScanner より高速です。 [...]
  • 小さな整数 to_s のキャッシュ。 0-999 の事前計算済みの凍結文字列を使用することで、レンダリングごとに 267 回の Integer#to_s 割り当てを回避します。

これはすべて合計され、ベンチマークで53%の改善をもたらしました。20年以上にわたり何百人もの貢献者によって微調整されてきたコードベースとしては、実に感嘆に値します。

この事例はいくつかの興味深いアイデアを示していると思います:

  • 頑健なテストスイートを持つこと - この場合は 974 のユニットテスト - は、コーディングエージェントと作業する際の 巨大な突破口 です。 この種の研究努力は、まず検証済みのテストスイートを持っていなければ実現できません。
  • autoresearch パターン - where an age