はじめに
Ruby on Railsの卒業制作でOpenAI APIを使おうとした際、gem "ruby-openai" と gem "openai" の違いが分からずかなり混乱しました。検索すると両方の情報が出てきて、どちらが公式なのか、何が違うのかがすぐに判断しづらかったためです。本記事では、自分の整理も兼ねて、この2つのgemの違いと混乱しやすいポイントをまとめます。
結論
先に結論を書くと、
-
openai→ OpenAI公式のRuby SDK -
ruby-openai→ コミュニティ製のgem
です。
公式のGitHubはこちら
https://github.com/openai/openai-ruby
コミュニティ製はこちら
https://github.com/alexrudall/ruby-openai
ややこしいのは、どちらもRubyからOpenAI APIを扱うためのgemであり、さらにクラス名も似ているため、情報が混ざりやすい点です。
なぜ混乱するのか
実際に混乱した理由は以下の通りです。
- gem名が似ている(
openai/ruby-openai) - どちらも
OpenAI::Clientを使う - 検索すると両方の記事がヒットする
- 古い記事は
ruby-openaiが多い
特に、「どっちをrequireすればいいの?」というところで完全に詰まりました。
使い方の違い
openai(公式SDK)の場合
require "openai"
client = OpenAI::Client.new(
api_key: ENV["OPENAI_API_KEY"]
)
response = client.chat.completions.create(
model: "gpt-5.2",
messages: [
{ role: "user", content: "こんにちは" }
]
)
puts response
特徴:
- api_key: を使う
- メソッドチェーン形式(chat.completions.create)
- API構造に近い書き方
ruby-openai(コミュニティ製)の場合
require "openai"
client = OpenAI::Client.new(
access_token: ENV["OPENAI_API_KEY"]
)
response = client.chat(
parameters: {
model: "gpt-4o", messages: [
{ role: "user", content: "こんにちは" }
]
}
)
puts response.dig("choices", 0, "message", "content")
特徴:
- access_token: を使う
- parameters: にまとめて渡す
- レスポンスはHash形式で扱うことが多い
一番ハマったポイント
自分が特に混乱したのは、gem名と require の書き方が一致しないことでした。
-
gem "openai"→require "openai" -
gem "ruby-openai"→require "openai"
最初は ruby-openai なら require "ruby-openai" だと思い込んでいましたが、実際にはそうではありませんでした。
gem名は違うのに読み込み名が同じなので、検索結果やサンプルコードを読んでいるうちに情報が混ざりやすいと感じました。
どちらを選ぶべきか
今から新しく使うなら、まずは公式SDKである openai を確認するのが良いと思います。
理由:
- 公式ドキュメントと一致する
- 今後のアップデートに追従しやすい
一方で、既存の記事やRailsの実装例では ruby-openai が使われていることも多いため、記事を読む際にはどちらのgemかを意識することが重要です。
まとめ
ruby-openai と openai がややこしいのは、
- 名前が似ている
- 役割が同じ
- 使い方が微妙に違う
という点が重なっているためだと感じました。
卒業制作でかなり苦しめられたポイントでしたが、今回整理したことでスッキリ理解できました。
同じように混乱している方の参考になれば嬉しいです。