はじめに
RubyアプリからClaude APIを呼び出したい場面は増えています。文章生成・要約・コードレビュー・チャットボットなど、LLMを組み込むだけで一気に付加価値が上がります。
このページでは ruby-anthropic gem を使い、Railsアプリから Claude API を呼び出す最小実装を解説します。
環境
- Ruby 3.2+
- Rails 7.x
- ruby-anthropic gem
1. gem の追加
# Gemfile
gem "ruby-anthropic"
bundle install
2. APIキーの設定
APIキーは環境変数で管理します。本番は Rails credentials、開発は .env ファイルを使うのが安全です。
# .env(開発用)
ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxx
# config/initializers/anthropic.rb
Anthropic.configure do |config|
config.access_token = ENV.fetch("ANTHROPIC_API_KEY")
end
3. シンプルな呼び出し
メッセージを送ってレスポンスを受け取る最小コードです。
client = Anthropic::Client.new
response = client.messages(
parameters: {
model: "claude-sonnet-4-6",
max_tokens: 1024,
messages: [
{ role: "user", content: "Rubyで配列をシャッフルする方法を教えてください" }
]
}
)
puts response.dig("content", 0, "text")
4. Railsコントローラーへの組み込み例
フォームから質問を受け取り、Claudeの回答をビューに渡す例です。
# app/controllers/chat_controller.rb
class ChatController < ApplicationController
def create
client = Anthropic::Client.new
response = client.messages(
parameters: {
model: "claude-sonnet-4-6",
max_tokens: 1024,
messages: [
{ role: "user", content: params[:message] }
]
}
)
@answer = response.dig("content", 0, "text")
render :show
end
end
5. システムプロンプトで役割を固定する
チャットボットや専用アシスタントを作るときは system パラメータでキャラクターを固定します。
response = client.messages(
parameters: {
model: "claude-sonnet-4-6",
max_tokens: 1024,
system: "あなたはRuby・Railsの専門家です。コード例を交えて簡潔に答えてください。",
messages: [
{ role: "user", content: "N+1問題とは何ですか?" }
]
}
)
6. マルチターン会話(会話履歴を保持する)
前の会話を引き継ぐには messages 配列に履歴を積み重ねます。
messages = []
# 1回目
messages << { role: "user", content: "Railsでモデルを作るコマンドは?" }
res = client.messages(parameters: { model: "claude-sonnet-4-6", max_tokens: 512, messages: })
messages << { role: "assistant", content: res.dig("content", 0, "text") }
# 2回目(前の会話を踏まえて質問できる)
messages << { role: "user", content: "そのコマンドにバリデーションを追加するには?" }
res2 = client.messages(parameters: { model: "claude-sonnet-4-6", max_tokens: 512, messages: })
puts res2.dig("content", 0, "text")
7. エラーハンドリング
APIキー不正・レート制限・タイムアウトはビジネスロジックに影響するため、必ずrescueで対処します。
begin
response = client.messages(parameters: { ... })
rescue Anthropic::Error => e
Rails.logger.error("Claude API error: #{e.message}")
@answer = "現在サービスが混み合っています。しばらく後でお試しください。"
end
まとめ
ruby-anthropic gem を使えば数十行でRailsアプリにClaude APIを組み込めます。システムプロンプトで用途を絞り込むだけで、カスタマーサポートBot・コードレビュー補助・文章生成ツールなど幅広い用途に転用できます。
次のステップとして RubyLLM gem(複数LLMを一元管理できるラッパー)への移行も検討してみてください。