diff --git a/run.py b/run.py
index ddd5537d9..7de9b993a 100644
--- a/run.py
+++ b/run.py
@@ -10,6 +10,7 @@
import uvicorn
from fastapi import FastAPI, HTTPException
+from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
from voicevox_engine import __version__
@@ -176,6 +177,25 @@ def get_core(core_version: Optional[str]) -> CoreAdapter:
)
)
+ @app.get("/", response_class=HTMLResponse, tags=["その他"])
+ async def get_portal() -> str:
+ """ポータルページを返します。"""
+ engine_name = engine_manifest_data.name
+
+ return f"""
+
+
+ {engine_name}
+
+
+ {engine_name}
+ {engine_name} へようこそ!
+
+ """
+
app = configure_openapi_schema(app)
return app
diff --git "a/test/e2e/__snapshots__/test_openapi/test_OpenAPI\343\201\256\345\275\242\343\201\214\345\244\211\343\202\217\343\201\243\343\201\246\343\201\204\343\201\252\343\201\204\343\201\223\343\201\250\343\202\222\347\242\272\350\252\215.json" "b/test/e2e/__snapshots__/test_openapi/test_OpenAPI\343\201\256\345\275\242\343\201\214\345\244\211\343\202\217\343\201\243\343\201\246\343\201\204\343\201\252\343\201\204\343\201\223\343\201\250\343\202\222\347\242\272\350\252\215.json"
index 9994e9e69..64091444f 100644
--- "a/test/e2e/__snapshots__/test_openapi/test_OpenAPI\343\201\256\345\275\242\343\201\214\345\244\211\343\202\217\343\201\243\343\201\246\343\201\204\343\201\252\343\201\204\343\201\223\343\201\250\343\202\222\347\242\272\350\252\215.json"
+++ "b/test/e2e/__snapshots__/test_openapi/test_OpenAPI\343\201\256\345\275\242\343\201\214\345\244\211\343\202\217\343\201\243\343\201\246\343\201\204\343\201\252\343\201\204\343\201\223\343\201\250\343\202\222\347\242\272\350\252\215.json"
@@ -1109,6 +1109,28 @@
},
"openapi": "3.1.0",
"paths": {
+ "/": {
+ "get": {
+ "description": "ポータルページを返します。",
+ "operationId": "get_portal__get",
+ "responses": {
+ "200": {
+ "content": {
+ "text/html": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
+ "description": "Successful Response"
+ }
+ },
+ "summary": "Get Portal",
+ "tags": [
+ "その他"
+ ]
+ }
+ },
"/accent_phrases": {
"post": {
"description": "テキストからアクセント句を得ます。\nis_kanaが`true`のとき、テキストは次のAquesTalk 風記法で解釈されます。デフォルトは`false`です。\n* 全てのカナはカタカナで記述される\n* アクセント句は`/`または`、`で区切る。`、`で区切った場合に限り無音区間が挿入される。\n* カナの手前に`_`を入れるとそのカナは無声化される\n* アクセント位置を`'`で指定する。全てのアクセント句にはアクセント位置を1つ指定する必要がある。\n* アクセント句末に`?`(全角)を入れることにより疑問文の発音ができる。",
diff --git a/test/e2e/single_api/__snapshots__/test_get_root.ambr b/test/e2e/single_api/__snapshots__/test_get_root.ambr
new file mode 100644
index 000000000..5233f5ea6
--- /dev/null
+++ b/test/e2e/single_api/__snapshots__/test_get_root.ambr
@@ -0,0 +1,18 @@
+# serializer version: 1
+# name: test_get_root_200
+ '''
+
+
+
+ DUMMY Engine
+
+
+ DUMMY Engine
+ DUMMY Engine へようこそ!
+
+
+ '''
+# ---
diff --git a/test/e2e/single_api/test_get_root.py b/test/e2e/single_api/test_get_root.py
new file mode 100644
index 000000000..a1e4b665c
--- /dev/null
+++ b/test/e2e/single_api/test_get_root.py
@@ -0,0 +1,12 @@
+"""
+/ API のテスト
+"""
+
+from fastapi.testclient import TestClient
+from syrupy.assertion import SnapshotAssertion
+
+
+def test_get_root_200(client: TestClient, snapshot: SnapshotAssertion) -> None:
+ response = client.get("/")
+ assert response.status_code == 200
+ assert snapshot == response.content.decode("utf-8")