Ruby

メンテナンス可能なfat gemエコシステム案

fat gemはやめた方がよいと思っている須藤です。やめた方がよいとは思っているのですが、どうやらfat gemが欲しい人はいなくならなそうなので、メンテナンス可能なfat gemエコシステム案を考えています。

なお、この文章を書いているのは https://github.com/ruby/rubygems/issues に英語で提案するために考えを整理したいからです。整理したら英語で提案します。

もっと読む

RailsTokyo#2【sponsored by 株式会社タイミー】 - Active Record ADBC adapter #railstokyo_meetup

RailsTokyo#2【sponsored by 株式会社タイミー】Active Record ADBC adapterを紹介しつつRailsアプリで活用できそうかどうかを聞いてきた須藤です。

もっと読む

Red FlatBuffers:IO::Bufferを使ったpure Ruby FlatBuffers処理系

これはRuby/Rails Advent Calendar 2025の9日目の記事です。

Red Data Toolsをやっている須藤です。pure RubyでApache Arrowの実装を作ることにしたのですが、Apache Arrowの実装に必要なFlatBuffersがRubyをサポートしていなかったのでそこから作っています。

FlatBuffersはパースなしでデータにアクセスできるシリアライゼーションフォーマットです。たとえば、"[10, "hello", true]"というようにJSONにシリアライズした場合は、文字列の"10"をパースして数値の10にしないとデータを使うことはできませんが、FlatBuffersではそんなことをしなくてもデータを使うことができるということです。

FlatBuffersを使う場合は、まずスキーマを定義して、そのスキーマから各種プログラミング言語のソースコードを生成します。その生成されたソースコードを使うと、対象のスキーマ向けにシリアライズされたFlatBuffersデータにアクセスできます。

ソースコードを生成するプログラムはC++で実装されているので、Rubyのソースコードを生成するモジュールをC++で実装したのですが、レビューもマージもされなそうな気がするので、pure RubyでFlatBuffersの処理系(FlatBuffersのスキーマからそれを処理するRubyのソースコードを出力するプログラム)を作ることにしました。

それがRed FlatBuffersです。Red FlatBuffersはとみたさんが紹介していたIO::Bufferを使っているので、どう使っているのかを紹介します。

ちなみに、Red FlatBuffersを作り始める直前くらいにFlatBuffers「も」処理できるUnibufが公開されていましたが、StringIO#readしてからString#unpack1するとか無駄なコピーをしていそうだったのでRed FlatBuffersを作ることにしました。

もっと読む

RubyWorld Conference 2025 - Ruby Prize 2025最終ノミネート者

Ruby Prize 2025で最終ノミネート者に選んでもらった須藤です。RubyWorld Conference 2025内で表彰式があったので参加しました。

もっと読む

Active Record ADBC adapter - ADBCで大量データを高速移動!Ruby on RailsアプリからDuckDBも使えるよ!

Ruby用のデータ処理ツールを提供するプロジェクトRed Data Toolsをやっている須藤です。

数年前からRuby on RailsアプリケーションでADBCを使えるとよさそうだなぁと思っていた(証拠1証拠2)のですが、ついにそれが動くようになったのでactiverecord-adbc-adapterとしてリリースしました。

ADBCとはArrow Database Connectivityの略で、Apache Arrowを使ってDBと高速に大量データをやりとりするための仕組みです。Active RecordでADBCを使えるようになると、Ruby on Railsアプリケーションでの大量データのやりとりが速くなります。また、Active Record経由でDuckDBも使えるようになります。DuckDBもADBCをサポートしているからです。

もっと読む

Rabbit 4.0.0 - ついにGTK 4に対応!

Rubyist用プレゼンテーションツールRabbitを開発している須藤です。

GTK 4に対応したRabbitをリリースしたので自慢します。GTK 4に対応したのでバージョンを4.0.0にしています。メジャーバージョンアップですが、大きな非互換はないはず。だれも使っていなそうな機能が消えたくらい。

もっと読む

ハンズオン: Redmine環境に高速な全文検索プラグインを導入してみよう(PostgreSQL編)

Redmineを高速全文検索するプラグインの開発に参加している児玉です。 ククログではこれまで何度かこのプラグインについてご紹介してきましたが、今回はDebian/Ubuntu向けハンズオン形式で「手を動かして」実際に導入するまでを紹介します! (他のOSをお使いの場合は、適宜コマンドやリポジトリ登録方法を読み替えて進めてください。)

もっと読む

小さくはじめるRuboCop入門 (Fluentdへの適用事例)

クロスプラットフォームで動作し、オープンソースであるデータ収集ソフトウェアとしてFluentdがあります。 Fluentdはさまざまな用途にあわせてプラグインにより機能を拡張できます。 多くのプラグインが開発されているのは、要件を満たすべく新規にプラグインが開発される事例があるためです。 これまでもお客様の要望にあわせて、クリアコードでプラグインを開発した実績があります。

今回は、RuboCopをまだ導入していないプロジェクトにおいて、コードのリファクタリングの観点から "小さく"Fluentdに適用してみた事例を紹介します。

もっと読む

RubyKaigi 2025 - Close Encounters of the dRuby #rubykaigi

RubyKaigi 2025に参加して、dRubyに出会った児玉です。

この記事では、次の2つのことについて話します!

  • dRubyとの遭遇
  • RubyKaigi 2025で印象に残ったトーク

もっと読む

コード懇親会2025自慢大会を開催するよ! #rubykaigi #codeparty

RubyKaigi 2025アンドパッドさんが開催したコード懇親会をお手伝いした須藤です。2025年5月12日(月)(来週の月曜日)の夜にコード懇親会自慢大会を開催するので紹介します。まだ参加登録できるのでコード懇親会に参加した人もそうでない人も興味がある人は参加してね!

もっと読む