2026-08-04(火)に開催されるRuby Association Activity Reportでpure Ruby Apache Arrow実装の活用方法という話をする須藤です。2025年度Rubyアソシエーション開発助成金プロジェクトとして開発したpure RubyのApache Arrow実装の成果報告です。
本編の参加は無料(懇親会も参加する場合は有料)なので、興味のある人は参加してください。まつもとさんの基調講演や他の開発助成金プロジェクトの成果報告もあります。
関連リンク:
プロジェクトの成果
このプロジェクトでは、低コストでのデータ交換のみにフォーカスしたpure RubyのApache Arrowシリアライザー・デシリアライザーを実装しました。成果物は次の2つです。
-
pure RubyのApache Arrow実装:red-arrow-format
-
pure RubyのFlatBuffers実装:red-flatbuffers
Apache ArrowフォーマットはFlatBuffersを使っているのですが、FlatBuffersのRuby実装がなかったのでFlatBuffersの実装から作りました。最初はFlatBuffers本体に取り込んでもらおうと思ってコード生成部分はC++で実装していたのですが、取り込んでもらえなそうだったので、Rubyで実装し直しました。
FlatBuffersのデータは効率のよいバイナリー形式で、スキーマはテキスト形式で書きます。たとえば、Apache Arrowなら https://github.com/apache/arrow/blob/main/format/Message.fbs がテキスト形式で書かれたFlatBuffersのスキーマの1つです。
FlatBufersのデータを扱うときは、スキーマからそのスキーマを扱うコードを生成してそれをライブラリーとして使ってデータにアクセスします。たとえば、 https://github.com/apache/arrow/blob/main/format/Message.fbs から https://github.com/apache/arrow/blob/main/ruby/red-arrow-format/lib/arrow-format/org/apache/arrow/flatbuf/message.rb とかを生成して、アプリケーションは生成されたmessage.rbとかをライブラリーとして使うという感じです。
実は、pure RubyのFlatBuffersはテキスト形式のスキーマを読み込めません。では、どうやってRubyコードを生成しているかというと、FlatBuffersのコンパイラーであるflatcに助けてもらって生成しています。flatcはテキスト形式で書かれたスキーマをFlatBuffersのデータ(バイナリー)に変換する機能があります。このデータのスキーマ(つまり、スキーマのスキーマ)は https://github.com/google/flatbuffers/blob/master/reflection/reflection.fbs です。バイナリ形式のFlatBuffersのデータにアクセスする機能はあるので、スキーマをFlatBuffersのデータとして扱えればテキスト形式のスキーマを読み込めなくてもよいのです。
ということで、最初に作ったC++実装でスキーマのデータ(flatcでデータに変換したスキーマ)を読み込めるRubyコードを生成し、それを使ってRubyコードを生成するRubyコードを生成しました。その後はC++実装は使っていません。なにを言っているかわからないと思いますが、こんな感じでブートストラップするのはおもしろいなぁと思いながら作っていました。会場にホワイトボードがあるならお絵描きしながら説明したいなぁ。
Apache Arrow実装の方の技術的な詳しい話は実装者向けのApache Arrowフォーマットの説明やRubyKaigi 2026での話を参照してください。
モチベーション
なぜバインディングではなくpure Rubyで実装したのかというと、Apache Arrowユーザーを増やしたいからです。pure Ruby実装はインストールサイズが小さい(pure Ruby実装のred-arrow-formatは42KBでRust実装のバインディングであるpolars-dfは119MB)ですし、ビルドエラーでインストールに失敗することもありません。インストールの障害が減ればもっと気軽にApache Arrowを使えるようになるはずです。
まずは今回の成果を使ったApache Arrowデータの入出力(インポートとかエクスポートとか)に対応したRubyのアプリケーションが増えるといいなぁと思っています。世の中にはpandas・BigQuery・DuckDB・ClickHouseなどApache Arrow対応システムがすでにたくさんあります。これらのシステムと低コストで連携できるようになります。すぐには活用されないかもしれませんが、これからもApache Arrow対応システムは増えるはずなので、徐々に活用されるようになるはずです。
開発助成金制度
Rubyアソシエーションの開発助成金制度はお金をもらえて(75万円)、メンターがサポートしてくれて、宣伝の機会も増える(このイベントとか)、という制度です。これはうれしい!と思った人は今年度の募集に応募しましょう!
このプロジェクトでは、今後応募する人が参考にできるようにメンターの村田さんとのやりとりを公開の場所で進めました。開発助成金がどんな感じで進むのか知りたい人は参考にしてください。応募を迷っている人はRed Data Toolsのチャットに相談しに来てくれればサポートします。
まとめ
2026-08-04(火)開催のRuby Association Activity Reportで2025年度Rubyアソシエーション開発助成金プロジェクト「pure Ruby Apache Arrow実装の開発」の成果報告をします。本編の参加は無料(懇親会も参加する場合は有料)なので興味がある人は聞きに来てください。
私の話を聞いて、Apache Arrowを活用したくなったり、一緒にApache Arrowを使いやすくしたくなったりする人が増えるといいなぁと思っています。
それはそうと、Apache Arrowに詳しい私にApache Arrow関連のサポートを頼みたいという場合はクリアコードのApache Arrowサービスをどうぞ。Ruby用のデータ処理ツールを提供することに興味がある人はRed Data Toolsをどうぞ。