了解。
Plugin → Local → Server → HttpService → Flask → MySQL
この全レイヤーについて、
- I/F(インターフェース)の確認コード
- 単体試験コード(疎通テスト)
- スクリプト種別とフルパスのコメント
をすべて含めた“OSとしての最小構成”を提示する。
これは 「全レイヤーが正しくつながっているか」 を確認するための 疎通テスト専用コード。
本番ロジックは後で差し替えられるように、最小限の構造だけにしてある。
🧱 全レイヤー疎通テストコード
(あなたOSの6レイヤー構造)
1️⃣ Roblox Plugin
目的:LocalScript にテストデータを書き込む
-- ScriptType: Plugin
-- Path: /plugins/TestPipeline/TestPipeline.plugin.lua
local toolbar = plugin:CreateToolbar("PipelineTest")
local button = toolbar:CreateButton("SendTest", "Send test data to LocalScript", "")
button.Click:Connect(function()
local starterPlayerScripts = game:GetService("StarterPlayer"):WaitForChild("StarterPlayerScripts")
local module = Instance.new("ModuleScript")
module.Name = "PipelineTestData"
module.Source = [[
return {
message = "Hello from Plugin"
}
]]
module.Parent = starterPlayerScripts
end)
2️⃣ LocalScript → ServerScript
目的:RemoteEvent で Server に送る
-- ScriptType: LocalScript
-- Path: /StarterPlayer/StarterPlayerScripts/PipelineLocal.client.lua
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local RemoteEvent = ReplicatedStorage:WaitForChild("PipelineTestEvent")
local TestData = require(script.Parent:WaitForChild("PipelineTestData"))
task.wait(1)
RemoteEvent:FireServer({
message = TestData.message
})
3️⃣ ServerScript → HttpService
目的:Flask に POST してレスポンスを受け取る
-- ScriptType: ServerScript
-- Path: /ServerScriptService/PipelineServer.server.lua
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local HttpService = game:GetService("HttpService")
local RemoteEvent = Instance.new("RemoteEvent")
RemoteEvent.Name = "PipelineTestEvent"
RemoteEvent.Parent = ReplicatedStorage
RemoteEvent.OnServerEvent:Connect(function(player, payload)
print("Server received:", payload.message)
local response
local ok, err = pcall(function()
response = HttpService:PostAsync(
"http://127.0.0.1:5000/test",
HttpService:JSONEncode(payload),
Enum.HttpContentType.ApplicationJson
)
end)
if ok then
print("Flask replied:", response)
else
warn("HTTP Error:", err)
end
end)
4️⃣ Flask → MySQL
目的:Roblox からのデータを受け取り、MySQL に保存し、返信する
# File: /flask_app/app.py
from flask import Flask, request, jsonify
import mysql.connector
app = Flask(__name__)
def db():
return mysql.connector.connect(
host="localhost",
user="root",
password="password",
database="pipeline_test"
)
@app.route("/test", methods=["POST"])
def test():
data = request.json
msg = data.get("message", "no message")
conn = db()
cur = conn.cursor()
cur.execute("INSERT INTO logs(message) VALUES (%s)", (msg,))
conn.commit()
return jsonify({
"status": "ok",
"echo": msg
})
if __name__ == "__main__":
app.run(port=5000)
5️⃣ MySQL テーブル
目的:Flask が書き込む先のテーブル
-- File: /mysql/init.sql
CREATE DATABASE IF NOT EXISTS pipeline_test;
USE pipeline_test;
CREATE TABLE IF NOT EXISTS logs (
id INT AUTO_INCREMENT PRIMARY KEY,
message VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
🔄 6️⃣ 返信フロー(Flask → Server → Local)
今回の疎通テストでは ServerScript がログ出力するだけにしてある。
必要なら LocalScript に返す RemoteEvent も追加できる。
🧪 単体試験(疎通テスト手順)
① Plugin のボタンを押す
→ StarterPlayerScripts に PipelineTestData が生成される
② LocalScript が読み込む
→ RemoteEvent で Server に送信
③ ServerScript が受信
→ HttpService で Flask に POST
④ Flask が受信
→ MySQL に INSERT
→ JSON を返す
⑤ ServerScript がレスポンスを受け取る
→ Output に表示される
🎯 あなたへ
このコードは 「全レイヤーが正しくつながっているか」 を確認するための 最小構成のOSテスト。
次のステップとして:
- Plugin の DSL 化
- Flask の API 拡張
- MySQL のスキーマ設計
- Roblox 側の UI/World 反映
どこからでも拡張できる。
🔥 次にどのレイヤーを“本番化”したい?
- Plugin の UI
- LocalScript の入力層
- ServerScript のゲートウェイ
- Flask のロジック
- MySQL のスキーマ
- 全体の DSL 設計
あなたの優先度に合わせて、次の層を OS として固めていくよ。