結論から言うと 可能です。しかも、あなたの既存の geminis/ 構造に自然に追加できます。
いまの Flask 構成(controllers / templates / static)に index.py(Blueprint)+ page.html(テンプレート) を追加し、prompts/ フォルダ内の複数プロンプトファイルを GUI で択一選択 → Gemini に送信 という流れを作れます。
🎯 まず「何を作るか」を明確化
あなたが求めているのは次の 3 点です。
-
GUI メニュー(トップページ)
→ index.py(Blueprint)+ page.html(テンプレート) -
prompts/ フォルダ内の複数ファイルを一覧表示
→ 例: prompts/prompt1.txt, prompts/prompt2.txt, … -
ユーザーが選んだプロンプトを Gemini に送る
→ 既存の gemini_controller に渡すだけで OK
📁 追加するファイル構造(提案)
geminis/
└── src
├── controllers
│ ├── index_controller.py ← 新規
│ ├── prompt_controller.py
│ ├── gemini_controller.py
│ └── batch_controller.py
├── templates
│ ├── page.html ← 新規
│ ├── base.html
│ ├── prompt_input.html
│ ├── batch_list.html
│ └── batch_detail.html
✅ index_controller.py(新規 Blueprint)
# src/controllers/index_controller.py
import os
from flask import Blueprint, render_template, request, redirect, url_for
index_bp = Blueprint('index', __name__)
PROMPT_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "prompts")
@index_bp.route("/")
def index():
# prompts フォルダ内のファイル一覧を取得
files = [f for f in os.listdir(PROMPT_DIR) if f.endswith(".txt")]
return render_template("page.html", files=files)
@index_bp.route("/select_prompt", methods=["POST"])
def select_prompt():
filename = request.form.get("prompt_file")
if not filename:
return redirect(url_for("index.index"))
# ファイル内容を読み込む
filepath = os.path.join(PROMPT_DIR, filename)
with open(filepath, "r", encoding="utf-8") as f:
prompt_text = f.read()
# prompt_controller に渡す(DB に保存 → gemini_controller に進む)
from controllers.prompt_controller import save_prompt_text
prompt_id = save_prompt_text(prompt_text)
return redirect(url_for("gemini.call_gemini", prompt_id=prompt_id))
✅ page.html(新規 GUI メニュー)
{% extends "base.html" %}
{% block content %}
<h2>プロンプト選択メニュー</h2>
<form action="{{ url_for('index.select_prompt') }}" method="POST">
<label>使用するプロンプトファイルを選択:</label><br><br>
<select name="prompt_file" style="width: 300px; padding: 5px;">
{% for f in files %}
<option value="{{ f }}">{{ f }}</option>
{% endfor %}
</select>
<br><br>
<button type="submit">このプロンプトで Gemini を実行</button>
</form>
{% endblock %}
✅ prompt_controller.py に追加(DB 保存用)
あなたの既存コードに合わせて、関数として切り出すだけ。
# src/controllers/prompt_controller.py
from db.db2 import get_db
def save_prompt_text(text):
db = get_db()
cursor = db.cursor()
cursor.execute("INSERT INTO prompts (prompt_text) VALUES (%s)", (text,))
db.commit()
return cursor.lastrowid
✅ flask_server.py に Blueprint を登録
from controllers.index_controller import index_bp
app.register_blueprint(index_bp)
🎉 これでできること
/にアクセスすると プロンプト選択 GUI が表示される- prompts/ 内のファイルが自動で一覧化
- 選んだプロンプトを DB に保存
- そのまま
/gemini/call/<prompt_id>に進み Gemini 実行 - 既存の batch_list / batch_detail に自然に流れる
🔥 あなたの OS 設計思想にも合う理由
あなたの OS 設計は 「明確な境界」「フォルダ単位の責務」「選択 → 実行 → 保存の deterministic flow」 を重視している。
今回の追加はまさに:
- prompts/ = データソース
- index_controller = 選択 UI
- prompt_controller = 保存
- gemini_controller = 実行
- batch_controller = 結果管理
という 完全に分離された deterministic pipeline になっている。
次の一手(あなたに選んでほしい)
どれを進めますか。
- 実際に動く完全版コード一式を生成(全ファイル)
- ページデザイン(CSS)を強化してメニューを美しくする
- プロンプトのプレビュー機能を追加する
- 複数プロンプトを結合して送る UI を作る
- プロンプトのカテゴリ分け(フォルダ分類)を導入する
どれを進めたいか教えてください。