3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RubyでGemini APIを使う方法(無料で試せる)

Last updated at Posted at 2026-01-26

はじめに

チャット型AIのAPIを使ってAI機能をRailsアプリに組み込もうとしたところ、Geminiが無料枠で使えることを知り、Geminiを使うことにしました。
RubyにはGemini用の公式gemが存在しないことを知り、直接APIを叩く方法をつかうことになったので、それを共有します。

APIキーの設定

まずは、Google AI Studioにアクセスし、左側のダッシュボードから"APIキー"の欄を選択し、APIキーを取得しましょう。
次に環境変数としてAPIキーを設定しましょう。

GEMINI_API_KEY="APIキー"

.envやcredentialに入れても問題ありません。

使用可能モデルを確認する

Geminiのモデル名は変わることがあるため、使用可能なモデル名を取得しておきましょう。

curl "https://generativelanguage.googleapis.com/v1/models?key=YOUR_API_KEY"

YOUR_API_KEYには先ほど取得したAPIキーを入れてください。ENV["GEMINI_API_KEY"]を入れてもOKです。
すると、"models/gemini-2.5-flash"といったようなモデル名がJSON形式で返ってくるため、コピーしておきましょう。

HTTPの基本

ここから実際にAPIを叩いていきますが、今回知っていていただきたいHTTP通信の基本をおさらいします。

POST /v1/models/gemini-2.5-flash:generateContent?key=API_KEY HTTP/1.1 ←リクエストライン
Host: generativelanguage.googleapis.com ←ヘッダ開始
Content-Type: application/json; charset=UTF-8 
Content-Length: xxxx ←ヘッダここまで

{ ...JSON本文など... } ←ボディ

HTTPメッセージは

  • リクエストライン
  • ヘッダ
  • ボディ

から構成されていることを意識すると、実際のコードもよく理解できます。

NET:HTTPで簡単にAPIを叩く

以下のようなコードでGeminiに挨拶をし、返答を出力してみます。

require "net/http"
require "json"
require "uri"

api_key = ENV["GEMINI_API_KEY"]

uri = URI("https://generativelanguage.googleapis.com/v1/models/gemini-2.5-flash:generateContent?key=#{api_key}")

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri)
request["Content-Type"] = "application/json"

request.body = {
  contents: [
    {
      parts: [
        { text: "こんにちは。自己紹介してください。" }
      ]
    }
  ]
}.to_json

response = http.request(request)
json = JSON.parse(response.body)

puts json.dig("candidates", 0, "content", "parts", 0, "text")

上から簡単にコードを解説します。

require "net/http"
require "json"
require "uri"

api_key = ENV["GEMINI_API_KEY"]

まずは標準ライブラリを読み込んで、環境変数を設定しています。

uri = URI("https://generativelanguage.googleapis.com/v1/models/gemini-2.5-flash:generateContent?key=#{api_key}")

こちらはURLの文字列からURIのオブジェクトを作っています。のちにuri.hostような形で用い、ホスト名やポート番号を取得できるようになります。
gemini-2.5-flashにはcurlで得たモデル名を入れましょう。

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

ホスト名とポート番号を指定し、HTTP通信するためのオブジェクトを作っています。また、ssl通信を指定しています。

request = Net::HTTP::Post.new(uri)
request["Content-Type"] = "application/json"

この記述はPOSTメソッドでリクエストを送るためのオブジェクトを作っています。リクエストの内容として、Json形式を指定しています。

request.body = {
  contents: [
    {
      parts: [
        { text: "こんにちは。自己紹介してください。" }
      ]
    }
  ]
}.to_json

HTTPリクエストのボディを指定しています。Geminiではこの形式でリクエストを送る必要があります。
例えば、partsの中には複数の要素を入れることができます。

"parts": [
  { "text": "この画像を説明して" },
  { "inline_data": { ...画像データ... } }
]

今回は自己紹介をテキストで要求しているため、textのみを使用しています。

response = http.request(request)
json = JSON.parse(response.body)

この部分は、requestオブジェクトに対する応答をオブジェクトとして受け取り、リクエストのボディをRubyの八種に変換しています。
json["candidates"][0]["content"]["parts"][0]["text"]とすることで中身のテキストを取得できます。

puts json.dig("candidates", 0, "content", "parts", 0, "text")

これは中身のテキストを取り出して標準出力をしています。

これでGeminiから回答を得ることができました。

まとめ

  • Gemini APIキーを取得する
  • Geminiのモデル名を確認する
  • NET:HTTPで通信する

標準ライブラリだけでも十分に Gemini API は扱えます。
Rails から AI 機能を組み込みたい場合の最小実装として参考になれば幸いです。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?