はじめに


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を一元管理できるラッパー)への移行も検討してみてください。