<p>Ruby on Rails アプリに AI 機能を追加したいけど、何から始めればいいかわからない——そんな方に向けた記事です。<br>
2026年現在、<strong>RubyLLM</strong> という gem を使えば、OpenAI・Anthropic(Claude)・Gemini など主要 AI プロバイダーを統一 API で扱えます。<br>
本記事ではインストールから基本的なチャット機能の実装まで、ハンズオン形式で解説します。</p>
<h3 id="what-is-rubyllm">RubyLLM とは</h3>
<p>RubyLLM は <a href="https://rubyllm.com/" target="_blank" rel="noopener">rubyllm.com</a> で公開されているオープンソースの gem です。<br>
OpenAI / Anthropic / Gemini / Bedrock など10以上のプロバイダーに対して、同じコードで呼び出せます。<br>
Rails との統合機能も標準で備えており、チャット履歴を DB に保存する仕組みが自動的に作られます。</p>
<h3 id="install">インストール</h3>
<p>Gemfile に追加します。</p>
<pre><code>gem 'ruby_llm'</code></pre>
<pre><code>bundle install</code></pre>
<h3 id="setup">初期設定</h3>
<p><code>config/initializers/ruby_llm.rb</code> を作成します。</p>
<pre><code>RubyLLM.configure do |config|
config.openai_api_key = ENV['OPENAI_API_KEY']
config.anthropic_api_key = ENV['ANTHROPIC_API_KEY']
end</code></pre>
<p>使いたいプロバイダーのキーだけ設定すれば OK です。</p>
<h3 id="basic-chat">基本的なチャット</h3>
<p>コンソールで動作確認します。</p>
<pre><code>chat = RubyLLM.chat(model: 'gpt-4o')
response = chat.ask('Railsとは何ですか?')
puts response.content</code></pre>
<p>Claude に切り替える場合はモデル名を変えるだけです。</p>
<pre><code>chat = RubyLLM.chat(model: 'claude-sonnet-4-6')
response = chat.ask('Railsとは何ですか?')
puts response.content</code></pre>
<h3 id="rails-integration">Rails 統合(DB にチャット履歴を保存)</h3>
<p>以下のコマンドで Rails 統合用のマイグレーションが自動生成されます。</p>
<pre><code>bin/rails generate ruby_llm:install
bin/rails db:migrate</code></pre>
<p>生成されるテーブルは <code>llm_chats</code> と <code>llm_messages</code> の2つです。<br>
モデルに <code>acts_as_chat</code> を追加するだけで、会話履歴の保存が有効になります。</p>
<pre><code>class Chat < ApplicationRecord
acts_as_chat
end</code></pre>
<h3 id="chat-ui">チャット UI を一発生成</h3>
<p>以下のコマンドでチャット UI のビューとコントローラーが自動生成されます。</p>
<pre><code>bin/rails generate ruby_llm:chat_ui</code></pre>
<p>サーバーを起動して <code>http://localhost:3000/chats</code> にアクセスすると、すぐに動くチャット画面が確認できます。</p>
<h3 id="streaming">ストリーミング対応</h3>
<p>Hotwire(Turbo Streams)と組み合わせてリアルタイム表示もできます。</p>
<pre><code>chat.ask('長い文章を生成して') do |chunk|
# チャンクごとに Turbo Stream でブロードキャスト
Turbo::StreamsChannel.broadcast_append_to(
"chat_#{chat.id}",
target: 'messages',
partial: 'messages/chunk',
locals: { content: chunk.content }
)
end</code></pre>
<h3 id="summary">まとめ</h3>
<p>RubyLLM を使えば、モデル変更はモデル名を変えるだけ・Rails 統合はコマンド1本・チャット UI も自動生成と、驚くほど少ないコードで AI 機能を実装できます。<br>
次のステップとして RAG(検索拡張生成)への応用も検討してみてください。</p>
<h3 id="related">関連記事</h3>
<ul>
<li><a href="/blog/javascript/rails-pgvector-rag">Rails + pgvector で RAG アプリを作る|自社データで答える AI チャットの実装手順</a></li>
<li><a href="/blog/javascript/rails-claude-api">Rails で Claude API を使う|anthropic-sdk-ruby で AI 機能を実装する方法</a></li>
</ul>