SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

PyCon JP主催メンバープレゼンツ Python最新トレンド

LLM時代のPython AI開発:GeminiとFast APIで学ぶ実践Web API入門

PyCon JP主催メンバープレゼンツ Python最新トレンド 第2回

  • X ポスト
  • このエントリーをはてなブックマークに追加

 Pythonユーザーが集まり、PythonやPythonに関連するソフトウェアについて情報交換が行われるカンファレンス「PyCon JP」。今年度は「あつまれPythonのピース」をテーマに、広島国際会議場(広島市)で、9月26日(金)〜28日(日)に開催されます。今回もPyCon JP 2025直前企画として、Pythonの技術記事を、主催メンバーが2回にわたってお送りします。2回目となる今回は、Google Gemini APIとFastAPIを組み合わせ、実践的にWeb APIについて学んでいきます。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 近年、ChatGPTやGoogle Geminiなど、さまざまなAIが急速に私たちの日常生活に浸透しています。これらのAIは、大規模言語モデル(large language model:LLM)と呼ばれます。この記事を読んでいる皆さんの多くも、一度は各プラットフォームが提供するウェブサービスを通じて使ってみたことがあるでしょう。中には、積極的に日常で活用している方もいるかもしれません。

 さて、このようなLLMを利用した多くのサービスには、Web APIが提供されています。Web APIとは、外部のプログラムがインターネット経由でアクセスできるインターフェースのことです。単に人間を相手にして「質問と回答をやりとりする」だけでなく、一度機械が解釈することを前提に設計されています。

 たとえば「友達のようにキャラクターと会話できるアプリケーション」といった、ユニークなソフトウェアも世の中には存在します。この場合は例えば、Geminiとユーザの間にソフトウェアが介在するわけですが、そのソフトウェアはGemini APIを通じて、Geminiに質問を投げかけ、回答を受け取ります。つまり、Gemini APIは、Geminiとユーザの間に介在するソフトウェアのために、Geminiにアクセスするためのインターフェースを提供しているわけです。

 今回は、

  • Google Geminiを例に、AIのWeb APIを実際に使ってみる
  • Pythonの著名なライブラリであるFastAPIを使って、自作のAIのWeb APIを作ってみる

という2つのアプローチを通して、Web APIへの理解を深め、Pythonではそれとどのように連携することができるのか、一緒に見ていきましょう。

Gemini APIに実際にアクセスしてみる

 まずは、実際にGemini AIのAPIにアクセスしましょう。

Google AI StudioでAPIキーを取得する

 Gemini AIのAPIにアクセスするにはAPIキーが必要です。APIキーは以下の手順で取得します。

  1. Google AI Studioにアクセスする
  2. Get API Keyをクリックする
  1. APIキーを作成し、出てきたモーダルのAPIキーをコピーする

 ここで得たキーは、取り扱いに注意してください。

実際にリクエストしてみる

 curlは、主にHTTPリクエストを送信するコマンドラインツールです。Web APIはWebというほどですから、当然HTTPを利用してアクセスします。HTTPはもちろんウェブブラウザを利用して接続することも可能ですが、今回の動作確認では、ウェブブラウザよりも都合が良いため、curlを利用してみましょう。

  1. Windowsの場合はコマンドプロンプトやPowerShell、Macの場合はターミナルを起動する
  2. 以下のコマンドを入力する(ただし、{}の中に当てはまる言葉は適宜変更してください)
$ curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent" \
  -H 'Content-Type: application/json' \
  -H 'X-goog-api-key: {先ほどコピーした API キー}' \
  -X POST \
  -d '{
    "contents": [
      {
        "parts": [
          {
            "text": "{広島の観光名所を挙げてみて}"
          }
        ]
      }
    ]
  }'

 すると、数秒待てば、以下のような返答が得られます。

{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "text": "広島には魅力的な観光名所がたくさんありますね!いくつかご紹介します。\n\n**歴史・文化**\n\n**平和記念公園・広島平和記念資料館:** 言わずと知れた、広島の象徴的な場所。原爆の悲劇を伝えるとともに、平和への願いを発信する場所です。\n**原爆ドーム:** 原爆の惨禍を伝える遺構。世界遺産にも登録されています。\n**広島城:** 別名「鯉城」とも呼ばれる美しい城。再建された天守閣からは広島市内を一望できます。\n
...(続く)

 このような形式のテキストに見覚えがないでしょうか? そうです。普段はウェブアプリで見るようなテキストの内容が、ターミナル上に返ってきたJSONらしきデータの中に埋め込まれています。このように、Google Gemini APIは、APIキーによってGeminiを使う権限があるユーザかどうかを識別し、送られてきたプロンプトを解し、その答えをプログラムが参照しやすい形で返してくれるのです。これは、Web APIの一種です。

 さらに、Gemini APIからの方が利用しやすい機能として、roleという概念があります。rolesとはその名の通り、「役割」を意味します。例えば、広島に住んで20年の寿司職人などのような文字列をうまく与えると、それに即した回答を返してくれます。AIのロールプレイングと言い換えてもいいでしょう。

 例えば、以下は「広島の美味しいご飯屋さんを教えてください。ただし、テキストで返してください」という質問を、以下の役割たちに従って問うた結果です。

 役割「広島市の観光案内所のコンシェルジュ」

 「はい、承知いたしました。広島には美味しいお店がたくさんありますよ!まず、広島といえばやはりお好み焼きは外せませんね。市内には数えきれないほどのお店がありますが、地元の人に愛されているお店として「みっちゃん総本店」や「八昌」などが有名です。それぞれのお店で焼き方や味が異なるので、食べ比べてみるのも楽しいかもしれません。お好み焼き以外にも、広島の瀬戸内海で獲れた新鮮な魚介を使った料理もおすすめです。...(続く)...」

 役割「広島出身の政治家」

 「広島には美味しいお店がたくさんありますね!例えば、広島風お好み焼きを食べるなら、「みっちゃん総本店」は外せません。創業から変わらない味を守り続けていて、地元の人にも観光客にも愛されています。行列ができることもありますが、並んで食べる価値ありです。新鮮な牡蠣を堪能したいなら、「かなわ」がおすすめです。瀬戸内海で育った牡蠣は濃厚でクリーミー。生牡蠣はもちろん、焼き牡蠣や牡蠣フライなど、様々な調理法で楽しめます。少し贅沢な気分を味わいたいなら、「日本料理 喜多丘」はいかがでしょう。...(続く)...」

 役割「広島の下町を知り尽くしている地元の通の人」

 「ほい、きたきた!広島の美味いもんね、任せときんさい!どこに行きたいかによって、おすすめはガラッと変わるけぇね。まず、「広島焼き」じゃなくて「お好み焼き」ね!本場の味を体験したいなら、老舗の「みっちゃん総本店」は外せんよ。カープファンなら「カープ」ってお店もあるし、鉄板の上でアツアツを頬張るのが最高じゃ。ちょっと贅沢したいなら、瀬戸内海の新鮮な魚介料理がええね。...(続く)...」

 内容も気になりますが、その口調や紹介する店、紹介の仕方を見てみてください。特に「広島の下町を知り尽くしている地元の通の人」がわかりやすいように、話し方や表現がぐっと砕けているのが分かるでしょう。このように、同じ質問であっても「どの視点から答えるのか」をシステム側に指定できる、ということを示しました。他にも、APIからアクセスできる概念としてtemperatureなどがあります。詳しくはドキュメントを参照してください。

次のページ
FastAPIとは何か

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
PyCon JP主催メンバープレゼンツ Python最新トレンド連載記事一覧
この記事の著者

鶴丸 倫琉(ツルマル ミチル)

 大学生。広島県在住。2005年、山口県生まれ。PyCon JP 2025 主催メンバーの一員として、Python コミュニティに関わる。2021年(高1)の時、地元で行われていたプログラミングコンテストに応募し、プログラミングの楽しさを知る。2023年、国際学生科学技術フェア(ISEF)に参加する...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/22169 2025/09/24 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング