Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

EditorUIをElectron非依存状態でも動かせるようにする #1204

Open
1 of 6 tasks
yamachu opened this issue Feb 14, 2023 · 3 comments
Open
1 of 6 tasks

EditorUIをElectron非依存状態でも動かせるようにする #1204

yamachu opened this issue Feb 14, 2023 · 3 comments

Comments

@yamachu
Copy link
Member

yamachu commented Feb 14, 2023

内容

#1042
で nodeIntegration を使用しない状態のUIが実現された。

Electronが担っている機能としてはFile I/Oだったり設定のmigrationなど、UIの動作には直接寄与しないものが多い。
File I/Oなどの機能はMockで再現可能ではあるため、テストレベルであればElectronを使用しなくても動作するはずである。

将来的にWeb版を展開することにも繋げられるため、Electronに依存しないUIを実現したい。

Pros 良くなる点

  • Webアプリケーションのテストをするのと同じような形になる
  • 様々な条件のテストの状態が作りやすくなる(はず
    • electronのipc周りのMockやエンジンとの通信のMockなどで
  • ビルドツールの変更が容易に(to Viteなど)
  • パッケージの更新なども容易に

Cons 悪くなる点

  • ないはず
  • 実現方法のPh2? に記載したworkspaceの分離などを行うと、今出ているPR全てとコンフリクトする

実現方法

段階的に進めることになりそう

Ph1

  • type ディレクトリ以下の整理
    • UIからも読み込む型のファイルからElectron(Node)に関する型やimportを互換性のあるものに変更
    • UIのみに依存するファイルか、Electron側とやり取りするために必要な型のファイルであるかの分別
  • UIに関するファイルから node に関するモジュールのimportやオブジェクトへのアクセスの削除

Ph2?

  • preload.ts の Sandbox をbrowser環境で動作する形で実装
    • 最新のChromeで実現できるものは多そう
    • この時点でElectron非依存のテストなどが可能になる
  • ディレクトリの分離やworkspaceの分離(別Issueっぽいけど…)
    • Electron依存のライブラリであるのか、UIのためのライブラリなのかがpackage.jsonが分かれていることによってわかりやすくなるため、ライブラリのアプデの影響範囲が調査しやすくなり、セキュリティアップデートや機能追加のためのアプデが容易になる

VOICEVOXのバージョン

0.?.0

OSの種類/ディストリ/バージョン

  • Windows
  • macOS
  • Linux

その他

https://github.com/yamachu/voicevox/tree/project-structure-cleaning
で実験中

@Hiroshiba
Copy link
Member

issue作成ありがとうございます!!夢があって良い・・・!!

最終ゴールを「web UIで動くこと」にして、やりたいこととタスクの重要度を設定しておくと迷子になりづらそうに思いました!
例えばpackage.jsonの分離やディレクトリ分離などは、webUIで動くことには必須じゃなさそう、みたいな。

@sevenc-nanashi
Copy link
Member

sevenc-nanashi commented Apr 2, 2023

add/electron-mock比較) でwindow.electronのモックを作ってみました。(自分のフォークにpushしようとしてミスってしまった)

  • src/electron/mock.ts にほとんど詰まっています。
  • テーマを読み込むのに vite.config.ts のdefineを使っています。
  • onReceivedIPCMsgのモックとしてwindowのmessageイベントを使用しています。IpcRendererを返せなくなりますが、どこでも使われていなかったので多分大丈夫?

@yamachu
Copy link
Member Author

yamachu commented Apr 2, 2023

Mockの流し方の最初のたたき台として良さそうに思えます!
テストとかの時はその辺り使ってUIテストとかできそうですね

onReceivedIPCMsgに関しては私もここは void にして対応していたので、いいんじゃないかなぁと思っています

sevenc-nanashi さんの実装と前試したやつを元に自分ももうちょい考えてみました
frontend-compat

background.ts で担っている File I/O 周りだったり localStorage をWorkerに流せるようにしてみています。
mockだったり実装は main.ts 側からは意識しない形(ファイル内にもimportとかがない状態)にするのはどうかなと思いまして。
Workerでローカルディレクトリを読んで実際のファイルを使用しながら、APIの向き先はEngineに向ける、みたいのが容易に出来るかなと…!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants