Rabbit Slide Show

Active Record ADBC adapter

2025-12-18

Description

ADBCというApache Arrowを使った高速なDB接続APIがあります。Active RecordのAPIでADBCを使えるようにActive Recordのアダプターを開発しました。どんなときにうれしいのかを自慢して、このアダプターが必要なRailsアプリケーション開発者がいるのか確かめます。

Text

Page: 1

Active Record ADBC adapter
須藤功平
株式会社クリアコード
RailsTokyo#2【sponsored by 株式会社タイミー】
2025-12-18
Active Record ADBC adapter
Powered by Rabbit 4.0.2

Page: 2

私が今日実現したいこと
✓ Railsアプリ開発者の意見を聞きたい
✓ 私はRailsアプリをほとんど書かないから
✓ RailsアプリでDBと高速に大量データを
やりとりできるとうれしいかを知りたい
✓ バッチ処理でうれしいとかでもいい
Active Record ADBC adapter
Powered by Rabbit 4.0.2

Page: 3

背景
✓ Webアプリ以外でもRubyが使われるといいな
✓ たとえばデータ処理とか
✓ Red Data Tools: https://red-data-tools.github.io/ja/
✓ Ruby用のデータ処理ツールを提供するプロジェクト
✓ Railsアプリ開発者向けのやつを
提供するといいかも?
Active Record ADBC adapter
Powered by Rabbit 4.0.2

Page: 4

Railsアプリでのデータの場所
データベースでしょ!
Active Record ADBC adapter
Powered by Rabbit 4.0.2

Page: 5

Active Record ADBC adapter
https://github.com/red-data-tools/activerecord-adbc-adapter
✓ Active RecordでADBCを使えるアダプター
✓ ADBC: Apache Arrowで高速データ交換
DB
✓ ADBCもDB接続を抽象化! アダプター
Active Recordのアダプターと同じ
AR
Active Record ADBC adapter
pgPostgreSQL
ADBCDuckDB
sqlite3SQLite
Powered by Rabbit 4.0.2

Page: 6

ロード
✓ DB: PostgreSQL
✓ 数値カラム100個
✓ 1万行
✓ 低いほど速い
✓ 生SQLよりも約5倍速い
INSERT INTO VALUES
✓ PGアダプターより約40倍速い
insert_all
Active Record ADBC adapter
Powered by Rabbit 4.0.2

Page: 7

ダンプ
✓ DB: PostgreSQL
✓ 数値カラム100個
✓ 1万行
✓ 低いほど速い
✓ 生SQLよりも約2倍速い
SELECT *
✓ PGアダプターより約5倍速い
pluck
Active Record ADBC adapter
Powered by Rabbit 4.0.2

Page: 8

なぜ速いのか?
変換が少ない・最適化されている
PostgreSQLならCOPYを使うとか
手法
INSERT
ADBC
insert_all
Active Record ADBC adapter
変換
少ない
少ない
多い
👍
👍
最適化
なし
あり
なし
👍
Powered by Rabbit 4.0.2

Page: 9

生SQLで最適化すればいいんじゃない?
✓ 各自ががんばる?
✓ みんなで一緒にがんばって共有しない?
✓ Apache Arrowが目指している世界観
✓ ADBCでも同じ
✓ 言語を超えて共有したい
Active Record ADBC adapter
Powered by Rabbit 4.0.2

Page: 10

使い方
✓ 標準の複数データベース対応機能を使う
✓ メインのDB設定とは別にADBC用設定を用意
✓ ADBCは大量データ用
✓ レコード単位での操作は既存アダプターの方がよい
Active Record ADBC adapter
Powered by Rabbit 4.0.2

Page: 11

複数データベース対応機能:設定
production:
primary:
adapter: postgresql
...
adbc:
adapter: adbc
driver: adbc_driver_postgresql
...
Active Record ADBC adapter
Powered by Rabbit 4.0.2

Page: 12

複数データベース対応機能:モデル
# app/models/adbc_application_record.rb
class AdbcApplicationRecord < ActiveRecord::Base
include ActiveRecordADBCAdapter::Ingest # 高速ロード用
self.abstract_class = true
# :adbcは設定ファイル内のキーと合わせる
connects_to database: { writing: :adbc, reading: :adbc }
end
# app/models/adbc_event.rb
class AdbcEvent < AdbcApplicationRecord
# クラス名にAdbcをつけたのでテーブル名を指定
self.table_name = :events
end
Active Record ADBC adapter
Powered by Rabbit 4.0.2

Page: 13

使い分ける
# レコード単位での操作は通常のモデルを使う
Event.find(id)
# 大量データを扱うときはAdbcXXXモデルを使う
AdbcEvent.all.to_arrow
Active Record ADBC adapter
Powered by Rabbit 4.0.2

Page: 14

私が今日実現したいこと
✓ Railsアプリ開発者の意見を聞きたい
✓ 私はRailsアプリをほとんど書かないから
✓ RailsアプリでDBと高速に大量データを
やりとりできるとうれしいかを知りたい
✓ バッチ処理でうれしいとかでもいい
Active Record ADBC adapter
Powered by Rabbit 4.0.2

Page: 15

高速な大量データ以外のメリット
✓ ADBC対応DBに接続できる
https://arrow.apache.org/adbc/current/driver/status.html
Active Record ADBC adapter
Powered by Rabbit 4.0.2

Page: 16

ARでつなぎにくそうなADBC対応DB
✓ DuckDB
✓ 「DuckDB実践入門」がこの間出版されたよ!
https://darashi.net/2025/09/19/duckdb-in-action-ja/
✓ Google BigQuery
✓ Snowflake
これらはデータ分析用DB
Active Record ADBC adapter
Powered by Rabbit 4.0.2

Page: 17

Active Recordで分析用DBにアクセス
✓ うれしい。。。の?
✓ ARのAPIは分析用SQL向けじゃない
✓ 1レコードを1オブジェクトで扱うAPIだから当然
✓ 分析用SQL:window関数とか
✓ ちょっとやってみたけど不便。。。
✓ 私のActive Record力不足?
Active Record ADBC adapter
Powered by Rabbit 4.0.2

Page: 18

事例
ADBC経由でDuckDBをRailsアプリに組み込んだよ!
Active Record ADBC adapter
Powered by Rabbit 4.0.2

Page: 19

私が今日実現したいこと
✓ Railsアプリ開発者の意見を聞きたい
✓ 私はRailsアプリをほとんど書かないから
✓ RailsアプリでDBと高速に大量データを
やりとりできるとうれしいかを知りたい
✓ バッチ処理でうれしいとかでもいい
Active Record ADBC adapter
Powered by Rabbit 4.0.2

Page: 20

お誘い
✓ Red Data Tools: https://red-data-tools.github.io/ja/
✓ Ruby用のデータ処理ツールを提供するプロジェクト
✓ 一緒に開発したい人はチャットに来てね
✓ https://app.element.io/#/room/#red-data-tools-ja:matrix.org
✓ 毎週水曜日の12:15-12:45にライブ開発
したりもしているよ
✓ Red Data Tools開発者に聞け!
https://www.youtube.com/playlist?
list=PLKb0MEIU7gvQOIACKgdgKuAE7cMPDuTE6
Active Record ADBC adapter
Powered by Rabbit 4.0.2

Page: 21

お願い
✓ そろそろRuby 4.0.0リリースだよ
✓ 今のうちに触ってみて
✓ 問題があったら報告して
✓ リリースまでに直せるかも
✓ csv/strscan/stringio/rexml/rdoc/rubygems
あたりは私も見てるよ
✓ 口頭で相談でもいいよ
Active Record ADBC adapter
Powered by Rabbit 4.0.2

Other slides

Apache Arrow Apache Arrow
2018-12-08
Apache Arrow Apache Arrow
2018-11-17
Apache Arrow Apache Arrow
2017-06-13
Apache Arrow Apache Arrow
2017-05-28
Mroonga! Mroonga!
2015-10-30