DevOps
Ruby発明者マツ(Matz)がAIの助けを得てネイティブ・コンパイラを開発中
MatzはAnthropicのClaudeと協力し、Ruby向けの実験的な先行(AOT)コンパイラを作成しようとしている——ただし制約が多い
ユキヒロ・マツモト(Yukihiro Matsumoto)――一般にマツ(Matz)として知られる――は、AnthropicのClaude Codeの助けを得て、Ruby向けのネイティブ・コンパイラ「Spinel」を構築しています。
MITライセンスの下でGitHub上 で公開されているSpinelは、RubyコードをAST(抽象構文木)ファイルとして解析し、それを標準的なCコンパイラでコンパイルするためのCコードへ変換することで動作します。マツのテストでは、Spinelでコンパイルされたコードは、開発中のRoby 4.1.0を使った縮小版Rubyビルド「MiniRuby」と比べて、約11.6倍高速に動作しています。
出力はCコードで、gcc(GNU Compiler Collection)によって(LinuxまたはWindows上で、WindowsではMinGW――Minimalist GNU for Windows――を使って)ネイティブ実行ファイルにコンパイルできます。または、LinuxやmacOSではLLVMのClangでコンパイル可能です。BSDはreadmeによれば「たぶん動く」ものの、テストはされていません。
Spinelの欠点は、Rubyのサブセットにしか対応していないことです。未対応の機能には、実行時にRubyコードを評価して実行するeval文、UTF-8以外のテキストエンコーディング、実行時にメソッドを定義するなどのメタプログラミング、そして深くネストされたラムダ関数、さらにスレッドがあります。
Rubyの変数は型付けされていませんが、オブジェクトは強く型付けされています。Cは強く型付けされた言語であるため、Spinelは型推論を行い、Cコード生成を可能にします。コードは、既存で成熟したRubyパーサであるPrismを利用しています。メソッドのインライン化やデッドコード除去など、数多くの最適化があり、生成されたCコードはデフォルトの警告レベルで問題なくコンパイルできます。Spinelにはガベージコレクタが含まれており、メモリを自動的に回収します。また、libcやSQLiteのようなネイティブコードライブラリと統合するためのFFI(foreign function interface)にも対応しています。
Spinelは実験的であり、Ruby on Railsを含む既存のほとんどのRubyコードでは動作しません。ただし、最適化の手段として、他のRubyコードから呼び出せるヘルパー関数などのように、Spinelを前提にコードを書くことはRuby開発者にとって可能です。
マツは、先月日本の函館で開催されたカンファレンス「RubyKaigi 2026」でスピネル(Spinel)を発表した。参加者の一人であるこちら (日本語の原文)によれば、マツはスピネルの構想は3年前に思い描かれていたが、現在はAIを使って数週間で実装されたという。
スピネルのリポジトリにあるコードの大半には、「Claude Open 4.7(1Mコンテキスト)により共同執筆:」という内容を含むコメントが付いている。
さらに、このプロジェクトは実験の一環として、すでに3度にわたって作り直されている。
マツは、おそらくAIが生成したコードの理想的な利用者だろう。コードを理解しており、コードが何をするのかを見失うことなく、開発のスピードが上がる恩恵を受けられる。そして、既存のスキルに加えて、さらにAIにプロンプトを出すことでコードを洗練させることができる。コードは何百ものテストとベンチマークでカバーされている。®




