diff --git "a/docs/\343\202\250\343\203\263\343\202\270\343\203\263\345\221\250\343\202\212\343\201\253\343\201\244\343\201\204\343\201\246.md" "b/docs/\343\202\250\343\203\263\343\202\270\343\203\263\345\221\250\343\202\212\343\201\253\343\201\244\343\201\204\343\201\246.md"
new file mode 100644
index 0000000000..8283a2ed37
--- /dev/null
+++ "b/docs/\343\202\250\343\203\263\343\202\270\343\203\263\345\221\250\343\202\212\343\201\253\343\201\244\343\201\204\343\201\246.md"
@@ -0,0 +1,84 @@
+# エンジン周りについて
+
+VOICEVOXはマルチエンジン機能を介して複数のVOICEVOX AIP準拠エンジンを扱うことができます。
+それ以外にも多様な概念が存在するため、ここでまとめてドキュメント化しています。
+
+## 用語説明
+
+| 用語 | 説明 |
+| ------------------------- | -------------------------------------------------------------------------------------------- |
+| VOICEVOX API 準拠エンジン | VOICEVOX API に準拠したエンジンのこと。 |
+| マルチエンジン | エディタ内で複数のエンジンを扱う機能のこと。 |
+| デフォルトエンジン | エディタに付属しているエンジンのこと。
デフォルトエンジンがないとエディタが起動しない。 |
+| VVPP | VOICEVOXにインストールできるエンジンのパッケージファイル。
エンジンやエンジン情報を含む。 |
+
+## マルチエンジン
+
+エンジンの追加は VVPP ファイルをインストールする形と、エンジンディレクトリのパスを指定する形があります。
+
+| | VVPP | パス |
+| -------------------- | ------------------------------------ | ----------------------------------- |
+| `EngineInfo`の`type` | `"vvpp"` | `"path"` |
+| 追加時の処理 | zipファイルを所定のフォルダに展開 | エンジンのパスを`config.json`に保存 |
+| 読み込み時の処理 | 所定のフォルダ内にあるものを読む | `config.json`に保存されたパスを読む |
+| 削除時の処理 | 所定のフォルダ内のディレクトリを削除 | `config.json`からパスを削除 |
+
+## デフォルトエンジンの更新情報
+
+デフォルトエンジンの更新情報をjson形式で管理しています。
+更新情報には最新のパッケージ(VVPP・VVPPPファイル)のURLやバージョンなどを記載しています。
+パッケージの情報はOS・アーキテクチャ・デバイスごとに分けています。
+
+ファイルフォーマットは以下の通りです。
+
+```JSONC
+{
+ //[number] ファイル構造バージョン(仕様変更毎にインクリメントされる)
+ "formatVersion": 1,
+
+ // Windowsの情報
+ "windows": {
+ "x64": {
+ "CPU": {
+ //[string] バージョン
+ "version": "x.x.x",
+
+ // vvppやvvpppの情報
+ "packages": [
+ {
+ //[string] ダウンロードURL
+ "url": "https://example.com/example.vvpp",
+
+ //[string] ファイル名
+ "name": "example.vvpp",
+
+ //[number] バイト数
+ "size": 123456,
+
+ //[string(Optional)] ハッシュ値
+ "hash": "xxxxxxx",
+ },
+ //...
+ ]
+ },
+ "GPU/CPU": { /* 同上 */ }
+ }
+ },
+
+ "macos": {
+ "x64": {
+ "CPU": { /* 同上 */ }
+ },
+ "arm64": {
+ "CPU": { /* 同上 */ }
+ }
+ },
+
+ "linux": {
+ "x64": {
+ "CPU": { /* 同上 */ },
+ "GPU/CPU": { /* 同上 */ }
+ }
+ }
+}
+```
diff --git "a/docs/\347\264\260\343\201\213\343\201\204\350\250\255\350\250\210\346\226\271\351\207\235.md" "b/docs/\347\264\260\343\201\213\343\201\204\350\250\255\350\250\210\346\226\271\351\207\235.md"
index 5647b95a5d..3c999d57b6 100644
--- "a/docs/\347\264\260\343\201\213\343\201\204\350\250\255\350\250\210\346\226\271\351\207\235.md"
+++ "b/docs/\347\264\260\343\201\213\343\201\204\350\250\255\350\250\210\346\226\271\351\207\235.md"
@@ -38,74 +38,3 @@ export const hogeFugaSchema = z.object({
export type HogeFugaType = z.infer;
```
-
-## マルチエンジン
-
-エンジンの追加は VVPP ファイルをインストールする形と、エンジンディレクトリのパスを指定する形があります。
-
-| | VVPP | パス |
-| -------------------- | ------------------------------------ | ----------------------------------- |
-| `EngineInfo`の`type` | `"vvpp"` | `"path"` |
-| 追加時の処理 | zipファイルを所定のフォルダに展開 | エンジンのパスを`config.json`に保存 |
-| 読み込み時の処理 | 所定のフォルダ内にあるものを読む | `config.json`に保存されたパスを読む |
-| 削除時の処理 | 所定のフォルダ内のディレクトリを削除 | `config.json`からパスを削除 |
-
-## デフォルトエンジンの更新情報
-
-デフォルトエンジンの更新情報をjson形式で管理しています。
-更新情報には最新のパッケージ(VVPP・VVPPPファイル)のURLやバージョンなどを記載しています。
-パッケージの情報はOS・アーキテクチャ・デバイスごとに分けています。
-
-ファイルフォーマットは以下の通りです。
-
-```JSONC
-{
- //[number] ファイル構造バージョン(仕様変更毎にインクリメントされる)
- "formatVersion": 1,
-
- // Windowsの情報
- "windows": {
- "x64": {
- "CPU": {
- //[string] バージョン
- "version": "x.x.x",
-
- // vvppやvvpppの情報
- "packages": [
- {
- //[string] ダウンロードURL
- "url": "https://example.com/example.vvpp",
-
- //[string] ファイル名
- "name": "example.vvpp",
-
- //[number] バイト数
- "size": 123456,
-
- //[string(Optional)] ハッシュ値
- "hash": "xxxxxxx",
- },
- //...
- ]
- },
- "GPU/CPU": { /* 同上 */ }
- }
- },
-
- "macos": {
- "x64": {
- "CPU": { /* 同上 */ }
- },
- "arm64": {
- "CPU": { /* 同上 */ }
- }
- },
-
- "linux": {
- "x64": {
- "CPU": { /* 同上 */ },
- "GPU/CPU": { /* 同上 */ }
- }
- }
-}
-```
diff --git a/src/backend/common/envEngineInfoSchema.ts b/src/backend/common/envEngineInfoSchema.ts
new file mode 100644
index 0000000000..3a9f3b91ad
--- /dev/null
+++ b/src/backend/common/envEngineInfoSchema.ts
@@ -0,0 +1,16 @@
+import { z } from "zod";
+
+import { engineIdSchema } from "@/type/preload";
+
+/** .envに書くエンジン情報のスキーマ */
+export const envEngineInfoSchema = z.object({
+ uuid: engineIdSchema,
+ host: z.string(),
+ name: z.string(),
+ executionEnabled: z.boolean(),
+ executionFilePath: z.string(),
+ executionArgs: z.array(z.string()),
+ path: z.string().optional(), // FIXME: typeがpathのときは必須
+ type: z.union([z.literal("path"), z.literal("vvpp")]).default("path"),
+ latestDefaultEngineInfosUrl: z.string().optional(), // FIXME: typeがvvppのときは必須
+});
diff --git a/src/backend/electron/manager/engineManager.ts b/src/backend/electron/manager/engineManager.ts
index 6c32171316..daae2b9ad7 100644
--- a/src/backend/electron/manager/engineManager.ts
+++ b/src/backend/electron/manager/engineManager.ts
@@ -39,6 +39,13 @@ function createDefaultEngineInfos(defaultEngineDir: string): EngineInfo[] {
const defaultEngineInfosEnv =
import.meta.env.VITE_DEFAULT_ENGINE_INFOS ?? "[]";
+ /*
+ 先リファクタリング入れたほうが良いかも。
+ 2. エンジン情報マネージャーとエンジンプロセスマネージャーを分ける?
+ 3. ついでにelectronへの依存をなくしてもよい
+ 4. .envの情報から、エラー情報を返す関数作っても良いかも、あとでも良いかも(エンジンが見つからないとか、vvppが未インストールとか)
+ */
+
const envSchema = envEngineInfoSchema.array();
const engines = envSchema.parse(JSON.parse(defaultEngineInfosEnv));
diff --git a/src/type/preload.ts b/src/type/preload.ts
index 6b0d7e6826..d925f0f7af 100644
--- a/src/type/preload.ts
+++ b/src/type/preload.ts
@@ -700,17 +700,6 @@ export const configSchema = z
.merge(rootMiscSettingSchema);
export type ConfigType = z.infer;
-export const envEngineInfoSchema = z.object({
- uuid: engineIdSchema,
- host: z.string(),
- name: z.string(),
- executionEnabled: z.boolean(),
- executionFilePath: z.string(),
- executionArgs: z.array(z.string()),
- path: z.string().optional(),
-});
-export type EnvEngineInfoType = z.infer;
-
// workaround. SystemError(https://nodejs.org/api/errors.html#class-systemerror)が2022/05/19時点ではNodeJSの型定義に記述されていないためこれを追加しています。
export class SystemError extends Error {
code?: string | undefined;