ククログ

株式会社クリアコード > ククログ > 2025年度Rubyアソシエーション開発助成金:pure Ruby Apache Arrowの実装

2025年度Rubyアソシエーション開発助成金:pure Ruby Apache Arrowの実装

Apache Arrowの開発に参加している須藤です。この数年度はRubyアソシエーション開発助成金をメンターとしてお手伝いしていたのですが、今年度は開発する側として参加します。拡張ライブラリーとかを使わずにRubyのみでApache Arrowフォーマットのシリアライザー・デシリアライザーを開発します。

応募背景

2025-08-28に開催されたRuby Association Activity Reportは2024年度の開発助成事業の成果発表もありました。私は2つのプロジェクトのメンターをしていたので参加しました。そのときの懇親会で開発助成事業をもっとよくするにはどうしたらよいと思う?というような話があったので、私の思う課題を考えてみたのでした。それの解決案の1つが自分が応募するだったので応募しました。でも、それだとスケールしないので、よい解決案ではないんですよね。。。今年度のプロジェクトをやりながら別の案を考えます。。。

応募内容

Rubyのみで実装されたApache Arrowのシリアライザー・デシリアライザーが欲しいなぁとはActive Record ADBC adapterを作っているときに思っていました。そして、少しずつ作り始めていました。

私は仕事の時間も趣味の時間もフリーソフトウェアの開発をしていますが、キャパオーバーで追加でなにか新しいことをやっている余裕はありません。開発助成事業用に新しいことをやる余裕はありません。そのため、開発助成事業に関係なくやるつもりのやつを題材にする必要があり、少しずつやり始めていたApache ArrowのRuby実装で応募しました。

応募内容は次のとおりです。これからRubyアソシエーション開発助成金に応募したい人の参考になるといいなぁと思うので共有します。

応募者名:株式会社クリアコード

担当者名:須藤功平

連絡先電子メールアドレス:kou@clear-code.com

略歴:

応募者:2006年7月設立。Rubyを組み込んだ製品やRubyバインディングを持つ製品、Rubyで開発された製品の開発・メンテナンスをしている。RubyKaigi(旧日本Ruby会議)には2009年よりスポンサーしてRubyを応援している。

担当者:2004年よりRubyコミッターとして標準添付ライブラリーを開発・メンテナンスしている。2017年よりApache ArrowコミッターとしてRubyバインディングを開発・メンテナンスしている。

プロジェクト名:pure Ruby Apache Arrow実装の開発

プロジェクトの詳細:

2016年に開発が始まったApache Arrowはデータ処理界隈では非常に重要なコンポーネントとなった。AWS・Google Cloud・Azureのような大量データを扱うクラウドサービスもApache Arrowを活用しているし、OpenTelemetryのようなテレメトリーデータの扱いでもApache Arrowが活用されている。

Apache Arrowはプログラミング言語に依存しない低コストで効率よくデータ交換・処理するためのデータフォーマットの仕様であり、各種プログラミング言語用の実装がある。もちろん、Ruby用の実装もある。担当者がC++実装のRubyバインディングを開発・メンテナンスしているからである。

本プロジェクトでは他言語での実装のバインディングではなく、RubyのみでApache Arrowデータを読み書きするための実装を開発する。他言語でのApache Arrowの実装には効率よくApache Arrowデータを処理する機能も含まれているが、データ処理機能はスコープ外とする。なぜなら、現時点でのRubyではSIMDなどを活用して高速にデータ処理する実装を開発することは困難だからである。なお、既存のバインディングベースのApache Arrow実装には高速にデータ処理する実装が含まれているため、Rubyを使ってApache Arrowデータを高速に処理することは現時点でも可能である。pure Rubyで実装することが困難であるという話である。

Apache Arrowデータの読み書きだけの機能で有用なのか。有用である。Apache Arrowデータの利用用途の1つがゼロコピーでのデータ交換である。たとえば、通常使用のデータベースから大量のデータをApache Arrowデータとして受け取り、別の分析用データベースに高速に取り込みたい、といったユースケースでは読み書きのみで十分である。また、Apache Arrowデータとして受け取ったデータを別のApache Arrow対応のライブラリー(たとえば、Rustで実装されたPolarsが高速である)で処理したい場合も読み書きのみで十分である。現状では、このようなケースでもバインディングベースのApache Arrow実装が必要になっている。一般的に、バインディングベースの実装はpure Ruby実装に比べてインストールや依存関係の解決が難しくなるため、pure Ruby実装で十分なところではpure Ruby実装で対応できた方が使い勝手がよい。

よって、本プロジェクトではpure RubyのApache Arrow実装を開発する。これにより、RubyがApache Arrowを使いやすい言語となり、Webアプリケーションでのデータの扱いも含む各種データ処理の文脈でより活用しやすい言語となる。

プロジェクトの成果物:

Apache Arrowフォーマットのデータを読み書きできるpure Ruby実装のライブラリーをApache Arrowの公式実装の1つとして公開する。ただし、Apache Arrowのリリースタイミングは本助成事業を考慮しないため、本助成事業完了時にタイミングよくリリースされていないかもしれない。

Apache Arrowフォーマットの仕様は次のURLで公開されている。

https://arrow.apache.org/docs/format/Columnar.html

このうち、次の項目は本プロジェクトのスコープ外とする。

Apache Arrowには他実装との相互接続性を確認するためのインテグレーションテストの仕組みがあるため、そのインテグレーションテストへの対応も成果物とする。

Apache ArrowフォーマットはFlatBuffersをベースとしているが、現時点ではFlatBuffersにRubyサポートは含まれていない。そのため、FlatBuffers本体にRubyサポートを追加する。ただし、FlatBuffersプロジェクトがその実装を受け入れるかどうかはコントールできないため、成果物として約束することはできない。FlatBuffersプロジェクトが受け入れなかった場合はFlatBuffersプロジェクトへのプルリクエストが成果物となる。

余裕があった場合、The Apache Arrow C data interfaceへの対応も成果物となる可能性がある。

https://arrow.apache.org/docs/format/CDataInterface.html

これは同一プロセス内でApache Arrowデータをゼロコピーでやりとりするためのインターフェイスである。Fiddleを使うことでpure Rubyでも実現できる可能性がある。Fiddleの改良が必要な可能性もあり、実現可能性について調査しきれていないためオプション扱いとする。なお、担当者はFiddleのメンテナーでもあるため、Fiddleの改良が必要な場合はFiddleを改良し、それも成果物となる。

さらに余裕があった場合は、MemoryViewへの対応も成果物となる可能性がある。現状ではあまりMemoryViewが活用されていないため、優先度は低く設定する。

進め方

各プロジェクトにはメンターがついて、メンターとやりとりしながらプロジェクトを進めます。このプロジェクトのメンターはRed Data Toolsとかも一緒にやっている村田さんです。

私は過去にメンターをやった経験があるので、基本的に非公開にしないといけない情報はないとわかっていました。そのため、このプロジェクトはメンターとのやりとりも公開の場所で進めることにしました。具体的にはMatrixのRed Data Toolsのスペース内にRuby Association Grant 2025という専用ルームを作ってそこを使うことにしました。

理由は次のとおりです。

  • 見られてまずいことをやりとりすることはないはず
  • 今後、開発助成事業に応募する人がこのやりとりを参考にできるかもしれない
  • 公開場所をRed Data Toolsのスペースの一部にすることでRed Data Toolsが盛り上がっている感がでる

ここはすでに使い始めていて、このプロジェクトでやること・やらないことや、スケジュールなども共有しています。

開発助成事業に興味がある人はぜひ参加して様子を見たり、質問したり、その気になったら開発に参加してみてください。

まとめ

2025年度Rubyアソシエーション開発助成金で「pure Ruby Apache Arrowの実装」プロジェクトをやることになったので紹介しました。今後、Rubyアソシエーション開発助成金に応募したい人が参考にできるようにこのプロジェクトに関する情報を公開しています。

実装者向けのApache Arrowフォーマットの説明をまとめたのはこのためだったのでした。

それはそうと、Apache Arrowに詳しい私にApache Arrow関連のサポートを頼みたいという場合はクリアコードのApache Arrowサービスをどうぞ。Ruby用のデータ処理ツールを提供することに興味がある人はRed Data Toolsをどうぞ。