さて、前回まででAIの使い方は分かったと思うから、ここからは実際にWebアプリにしていこうか!
今回も「streamlit」を使っていくよ
りょーかい!!
まずは、前回作成したプログラムを関数「generate_response」にしよう
引数には技名が渡せるようにしとくと良いよ
from google import genai
import json
GEMINI_API_KEY = "AIza~" # ここにGemini API Keyを入力
# 技の名前を渡すと、AIがJSON形式で技の設定を返してくれる関数
def generate_response(skill_name):
# AIの設定
client = genai.Client(api_key=GEMINI_API_KEY)
prompt = f"""
RPGのゲームマスターとして、技名「{skill_name}」の設定を作ってください。
以下のJSONフォーマットで出力してください。
{{
"name": "{skill_name}",
"element": "属性(火、水、風、雷、光、闇から選択)",
"power": "威力(10〜999の数値)",
"mp_cost": "消費MP(5〜100の数値)"
}}
"""
response = client.models.generate_content(
model='gemini-2.5-flash',
contents=prompt,
config={'response_mime_type': 'application/json'}
)
return json.loads(response.text)
skill_data = generate_response("ギガフレア・ノヴァ")
print(skill_data)
関数にした後もちゃんと動いたよ!
じゃあ次は、streamlitで文字を入力して、ボタンを押すと結果が返ってくるようにしよう
import streamlit as st # streamlitのライブラリをインポート
## 「generate_response」は変更がないので省略
# 次の2行のコメントアウトは削除してOK
# skill_data = generate_response("ギガフレア・ノヴァ")
# print(skill_data)
# 画面のタイトル
st.title("AIで技の設定を作ろう")
# ユーザーが技名を入力する欄
skill_name = st.text_input("技の名前を入力してください")
# ボタンが押された時の処理
if st.button("技の設定を作る"):
if skill_name:
# ここにAIを呼び出す処理を書く
response = generate_response(skill_name)
st.write(f"技名: {skill_name}")
st.write(f"属性: {response['element']}")
st.write(f"威力: {response['power']}")
st.write(f"消費MP: {response['mp_cost']}")
else:
st.write("技の名前を入力してください")
「st.text_input」で文字を入力して、「st.button」でボタンを押すと、関数が動いて結果が返ってくるんだね!
そうだね
じゃあ早速動かしてみよう!
おおー!ちゃんと表示された!!
ここまでは順調だね
じゃあ後は、他の人にも使ってもらえるようにアップすれば...
ちょっとまって!!
このままアップしてしまうと、APIキーが丸見えになってしまって知らない人に悪用されるから、その対応をしておかないと!!
ああ、そうだった
危ない危ない
てことで、次はAPIキー周りの対処方法を紹介するね
りょーかい!!
ちなみに、もし公開してしまったときは、Google AI StudioのAPIキーを削除すれば無効にできるよ
この時点での全体のプログラム
from google import genai
import json
import streamlit as st
GEMINI_API_KEY = "AIza~" # ここにGemini API Keyを入力
# 技の名前を渡すと、AIがJSON形式で技の設定を返してくれる関数
def generate_response(skill_name):
# AIの設定
client = genai.Client(api_key=GEMINI_API_KEY)
prompt = f"""
RPGのゲームマスターとして、技名「{skill_name}」の設定を作ってください。
以下のJSONフォーマットで出力してください。
{{
"name": "{skill_name}",
"element": "属性(火、水、風、雷、光、闇から選択)",
"power": "威力(10〜999の数値)",
"mp_cost": "消費MP(5〜100の数値)"
}}
"""
response = client.models.generate_content(
model='gemini-2.5-flash',
contents=prompt,
config={'response_mime_type': 'application/json'}
)
return json.loads(response.text)
# 画面のタイトル
st.title("AIで技の設定を作ろう")
# ユーザーが技名を入力する欄
skill_name = st.text_input("技の名前を入力してください")
# ボタンが押された時の処理
if st.button("技の設定を作る"):
if skill_name:
# ここにAIを呼び出す処理を書く
response = generate_response(skill_name)
st.write(f"技名: {skill_name}")
st.write(f"属性: {response['element']}")
st.write(f"威力: {response['power']}")
st.write(f"消費MP: {response['mp_cost']}")
else:
st.write("技の名前を入力してください")
