Spinel:Rubyをネイティブバイナリに

SpinelはMatzの新しいAOTコンパイラで、Rubyのサブセットを単体のネイティブバイナリに変換します。私たちはSpinelの開発に参加しており、御社のコードに合うかを判断できます。

Spinelとは

Spinelは、Rubyの作者であるまつもとゆきひろ氏(Matz)が開発しているRubyのAOT(事前)コンパイラです。RubyKaigi 2026の基調講演で発表されました。Rubyのソースコードを読み、プログラム全体で型を推論してCのコードを生成し、Cライブラリ以外に何も必要としないネイティブ実行ファイルにコンパイルします。バイナリの中にRubyインタプリタはありません。

その代わり、使えるRubyの範囲は狭くなります。Spinelが対応するのはRubyのサブセットで、evalも実行時のメソッド定義もなく、Railsのようなフレームワークが頼っている動的な機能の多くも使えません。素直に書かれたコードはコンパイルでき、実行中に自分自身を書き換えるコードはコンパイルできません。

向いている用途

  • コマンドラインツール。 ユーザーやサーバーに一つのバイナリを配るだけ。Rubyのバージョン管理も、Bundlerも、gemのインストールも不要です。
  • CPUを多く使う処理。 パーサー、データ変換、数値計算など、インタプリタがボトルネックになる処理。SpinelプロジェクトはCRubyとのベンチマークを公開していますが、私たちはその数字を引用するのではなく、御社のコードで計測します。
  • 小さなサービスやエージェント。 起動が速く、メモリ使用量を抑えたいもの。

対応内容

実現性調査では、御社のコードの一部について、Spinelでコンパイルできるか、その価値があるかという一つの問いに答えます。移植し、計測し、変更した点とSpinelでまだ対応していない点を報告します。御社のプログラムに必要な機能がSpinelにない場合、多くは追加の作業としてアップストリームに追加できます。

Spinelでの実績

Sampo KuokkanenはSpinelに30件以上のプルリクエストをマージしています。主に並行処理とIOの分野で、Fiberのstorageとblocking、Fiber#transferとFiber#killの挙動、スレッドとQueue、StringIOの読み込み、ソケットなどです。目的はお客様の案件と同じで、実際のRubyプログラムがSpinelでもCRubyと同じように動くようにすることです。

料金

料金は米ドル建て・税別です。「〜」の付いた料金は最低価格で、着手前に固定価格を決めます。日本円でのご請求も可能です。

実現性調査

$2,000

固定価格・約1週間

一つのプログラム、または一つのボトルネック部分をSpinelでコンパイルできるようにし、CRubyと比較計測して、変更が必要だった点とSpinelでまだできないことをまとめます。

Spinel開発

固定価格

調査後にお見積もり

Spinelが対応する範囲へのコードの移植、単一バイナリで配布するツールの開発、Spinel本体の修正・機能追加(アップストリームへ送ります)。

よくある質問

SpinelでRailsアプリをコンパイルできますか?
できません。SpinelはRubyのサブセットをコンパイルします。evalも実行時のメソッド定義もなく、Railsが前提とするメタプログラミングには対応していません。Railsアプリではなく、最初から最後まで自分たちで管理しているプログラム向けです。
Spinelは本番環境で使えますか?
まだ若いツールです。RubyKaigi 2026で発表され、最初のリリース(バージョン2026.09.12)は2026年9月に公開されました。現時点では社内ツールやテストの充実したバッチ処理に使い、重要な処理にはCRubyへの切り戻し手段を残すことをおすすめします。
どんなプログラムが向いていますか?
Rubyのインストールなしで一つのファイルとして配布したいコマンドラインツール、CPUを多く使うバッチ処理、小さなネットワークサービスなど、実行時のメタプログラミングを使わない素直なRubyで書かれたものです。
Spinelではどんな開発をしてきましたか?
Sampo KuokkanenはSpinelに30件以上のプルリクエストをマージしています。主に並行処理とIOで、Fiber(storage、blocking、transfer、kill)、スレッドとQueue、StringIO、ソケットなどです。

ご相談内容をお聞かせください

アプリのことと、何をお望みかを数行でお送りください。2営業日以内に、日本語または英語で、次のステップと概算をご返信します。