RubyLLM: 主要AIプロバイダーを1つに束ねるRubyフレームワーク
(rubyllm.com)- RubyLLM は、Rubyアプリでチャットボット、AIエージェント、RAG、コンテンツ生成といったAIワークフローを1つのフレームワークで構築できるようにする
- GPT、Claude、ローカルの Ollama などを同じインターフェースで扱え、依存関係は Faraday、Zeitwerk、Marcel の3つに限定される
- チャットだけでなく、画像・動画分析、音声文字起こし、文書処理、画像生成、埋め込み、モデレーション、ツール呼び出し、構造化出力、ストリーミングまでカバーする
- Railsでは
acts_as_chat、モデル読み込み、任意のチャットUIジェネレーターを提供し、` ですぐ使えるチャットインターフェースを開ける - OpenAI、xAI、Anthropic、Gemini、VertexAI、Bedrock、DeepSeek、Mistral、Ollama、OpenRouter、Perplexity、GPUStack、OpenAI互換APIをサポートする
Ruby向け単一AIフレームワーク
- RubyLLM は、主要なAIプロバイダーを1つのRubyフレームワークで扱うためのツール
- チャットボット、AIエージェント、RAGアプリケーション、コンテンツ生成器、そのほかのAIワークフローの構築を対象とする
- Chat with Work で実運用されている
プロバイダーごとのAPI差異を隠すインターフェース
- AIプロバイダーごとにクライアント、API、応答形式、慣習が異なる問題を減らすことに焦点を当てる
- 同一のインターフェース で GPT、Claude、ローカル Ollama を利用できる
- 依存関係は Faraday、Zeitwerk、Marcel の3つだけを使用する
基本的な使い方
- 簡単な質問は
RubyLLM.chatでチャットオブジェクトを作り、chat.askで実行する- 例:
chat.ask "What's the best way to learn Ruby?"
- 例:
- ファイル分析は
with:オプションにファイルを渡す方式- 画像:
ruby_conf.jpg - 動画:
video.mp4 - 音声:
meeting.wav - PDF:
contract.pdf - コード:
app.rb
- 画像:
- 複数ファイルは配列で渡して一度に分析できる
- 例:
with: ["diagram.png", "report.pdf", "notes.txt"]
- 例:
- ストリーミング応答 はブロックを渡して
chunk.contentを処理する
AI機能の範囲
RubyLLM.paintで 画像生成 を行うRubyLLM.embedでテキスト 埋め込み を生成するRubyLLM.transcribeで音声をテキストに文字起こしするRubyLLM.moderateでコンテンツの安全性を確認するRubyLLM::Toolを継承したクラスで、AIにRubyメソッドを呼び出させられる- 例の
Weatherツールは緯度と経度を受け取り、Open-Meteo APIから現在の天気データを取得する
- 例の
RubyLLM::Agentで、指示文とツールを含む再利用可能なエージェントを定義できる- 例の
WeatherAssistantはgpt-5-nanoモデル、簡潔な応答指示、Weatherツールを使用する
- 例の
RubyLLM::Schemaで 構造化出力 スキーマを定義できる- 例の
ProductSchemaはname、price、featuresフィールドを定義する
- 例の
機能一覧とプロバイダー対応
- 主な機能は次のとおり
- Chat:
RubyLLM.chatベースの対話型AI - Vision: 画像と動画の分析
- Audio:
RubyLLM.transcribeベースの音声文字起こしと理解 - Documents: PDF、CSV、JSON などのファイル形式から抽出
- Image generation:
RubyLLM.paintベースの画像生成 - Embeddings:
RubyLLM.embedベースの埋め込み生成 - Moderation:
RubyLLM.moderateベースのコンテンツ安全性確認 - Tools: AIがRubyメソッドを呼び出す
- Agents:
RubyLLM::Agentベースの再利用可能なアシスタント - Structured output: JSONスキーマベースの構造化出力
- Streaming: ブロックベースのリアルタイム応答
- Rails:
acts_as_chatベースのActiveRecord統合 - Async: Fiberベースの並行性
- Model registry: 機能検出と価格情報を含む800以上のモデル
- Extended thinking: モデルの思考過程を制御・表示・保存
- Chat:
- 対応プロバイダーは OpenAI、xAI、Anthropic、Gemini、VertexAI、Bedrock、DeepSeek、Mistral、Ollama、OpenRouter、Perplexity、GPUStack、OpenAI互換API
インストールとRails統合
- インストールは Gemfile に
gem 'ruby_llm'を追加したあとbundle installを実行する - APIキーは
config/initializers/ruby_llm.rbで設定する- 例:
config.openai_api_key = ENV['OPENAI_API_KEY']
- 例:
- Rails統合は次のコマンドでインストールする
bin/rails generate ruby_llm:installbin/rails db:migratebin/rails ruby_llm:load_models # v1.13+
- 任意でチャットUIを追加できる
bin/rails generate ruby_llm:chat_ui
- Railsモデルで
acts_as_chatを宣言すると、ActiveRecordベースのチャットを利用できる- 例のモデルでは
Chat < ApplicationRecordにacts_as_chatを宣言する Chat.create! model: "claude-sonnet-4"でチャットを作成し、ファイルを渡して質問できる
- 例のモデルでは
- 用意されたチャットインターフェースは
http://localhost:3000/chatsで開ける
1件のコメント
Hacker Newsのコメント
RubyLLM は意外と良く、使い勝手の面では Vercel の AI フレームワークに近い
すぐ動く手軽さと柔軟性のあいだでバランスを取ろうとしていて、そのぶん難しさもあるが、全体としてはかなり良かった
実際に感じた大きな不満は、キャッシュが常にうまく動くわけではないこと。たとえば xAI は completions API しかサポートしておらず、thought signature が誤って返されるため問題が起きる
https://github.com/crmne/ruby_llm/blob/main/lib/ruby_llm/pro...
RubyLLM の抽象化の上に作られたオープンソース gem の Raix があり、かなり使われている
https://github.com/OlympiaAI/raix
RubyLLM を本番環境で使っていて、とても気に入っている。優れていて使いやすいフレームワークだ
Responses API が標準でサポートされていない点は、他の人が言うようにもどかしく、大きな欠落に見えた。別の開発者が作ったコネクタはあるが、バグがあり、メインの gem ほど品質は高くない
今後の開発、特に 2.0 に期待している。Responses API がネイティブで入ったのなら、ぜひ確認したい
OpenAI には機能の異なるプロトコルが 2 つあり、VertexAI の全モデルにアクセスするには単一のプロバイダーの下で複数のプロトコルをサポートする必要があるため、この仮定はもはや成り立たなくなった
そのため Protocols と Providers を分離し、同じ Provider の下でもモデルごとに異なる Protocol へ透過的にルーティングする大規模なリファクタリングが必要だった。この作業は RubyLLM 2.0 に含まれる予定
気になるなら参考になるコミット: https://github.com/crmne/ruby_llm/commit/d398354da493570b050...
https://github.com/crmne/ruby_llm/commit/0875ce2dfeae9d28a3a...
RubyLLM は非常に使いやすい。昨年、あるプロジェクトでかなり活用した
欠点は、本当の トレーシング観測性 のために計測するのが難しかったことと、リトライ時に内部モデルを削除するパターンがあるため、見える履歴はきれいでも実際の API 呼び出し順序を正確に追うにはあまり向いていなかったこと
https://rubyllm.com/instrumentation/
Claude だけを前提にしたものを作っていて、Anthropic のエコシステムを離れる予定はない。こういう場合でも、RubyLLM を使うことに Anthropic の Ruby SDK を直接使うより利点があるのか気になる
言い換えると、この選択が Fog と aws-sdk-s3 のあいだの選択に近いのか、それとも Active Storage と aws-sdk-s3 のあいだの選択に近いのか知りたい
RubyLLM の良いところは、ActiveRecord のようにメソッドをチェーンできる DSL、エージェント・ツール・プロンプトを整理する構造、Anthropic から DeepSeek へ簡単にテストや移行ができ、コストを 90% 以上削減できた移植性にある
bin/rails generate ruby_llm:installだけで各チャットをデータベースに保存できる ActiveRecord 統合も良い。保存したチャット履歴を定期的に落として claude code に渡し、エージェント指示文を磨かせるのもとても役立った障害対応だけ見ても、本当にサービスが必要な日に Anthropic API が落ちたらどうするかを考えるべきだ
サイドプロジェクトで RubyLLM を使っているが素晴らしい
昨年の SF Ruby conf の質疑応答やコメントで出ていたものが、すでにエコシステムの機能としてリリースされているのは興味深い: https://youtu.be/y535u1EWqAg?si=rbyv52T035apKwQk
数か月前に RubyLLM をかなり深く使ってみたが、設計も実装も非常に良かった
複数の Lisp 言語で自作した LLM クライアントがあるが、RubyLLM の設計を一部取り入れようかと思ったほど。模倣は賛辞だ
Ruby を AI コミュニティに持ち込み、オープンソースで取り組んでくれてありがとう
良い言語はもっと探求され、注目されるべきだ
Laravel にも似たライブラリがある
https://laravel.com/docs/13.x/ai-sdk
RubyLLM を本番環境でも使っているが、これまで見たこの分野のライブラリの中で最も エレガントなライブラリ だ
Issue tracker の運用方法も良かった。“Feature Request” を選ぶと、回避策をどう探したか、なぜ RubyLLM に入るべきだと思うのかなどを説明させるようになっていて、際限なくスコープが膨らむのを防いでいる