小説執筆エディター 内部仕様書
1. アーキテクチャ概要
本アプリケーションは Electron + React (Typescript) で構成されています。
レンダリングプロセス(React)とメインプロセス(Electron)は preload.ts を介して IPC (Inter-Process Communication) で通信します。
技術スタック
- Frontend: React 19, TypeScript, CSS (Vanilla)
- Editor: Monaco Editor (@monaco-editor/react)
- Framework: Electron
- Icons: Lucide React
2. ディレクトリ構造 (Src)
main/: Electronメインプロセスmain.ts: エントリーポイント、IPCハンドラー定義launcher.ts: 最近使ったプロジェクトの管理git/: Git操作ロジックai/: AIプロバイダー(LM Studio, Gemini, OpenAI)
renderer/: Reactレンダリングプロセスcomponents/: UIコンポーネントEditor/: Monaco Editor関連Launcher/: 書庫選択画面 (ProjectLauncher)FileExplorer/: ファイルツリーCommon/: サイドパネル (SidePane), ステータスバー (StatusBar) 等
contexts/: 状態管理 (Settings, Git, Panel)layouts/: 画面レイアウト (MainLayout)
3. IPC インターフェース
| チャンネル名 | 説明 |
|---|---|
dialog:openDirectory |
フォルダ選択ダイアログを開く |
fs:readDirectory |
ディレクトリ内ファイル一覧を取得 |
fs:readFile / fs:writeFile |
ファイルの読み書き |
project:load / save-config |
プロジェクト設定 (.novelaid) の読み書き |
recent:get / add / remove |
最近開いたプロジェクトの管理 |
git:status / log / commit etc |
Gitリポジトリ操作 |
ai:generate / chat / listModels |
AIプロバイダーへの問い合わせ |
window:setTitle |
ウィンドウタイトルの更新 |
menu:go-home (on) |
ライブラリ画面への遷移指示 |
4. 画面・レイアウト構成
レイアウト仕様も参照
ProjectLauncher (ライブラリ画面)
- アプリ起動時のエントリーポイント。
- 最近使ったプロジェクトのリスト表示、新規作成、フォルダを開く機能。
MainLayout (エディタ画面)
- Left Pane: ファイルエクスプローラー、Git変更ステータス、履歴パネルなどを切り替えて表示。デフォルトはファイルエクスプローラー。
- Right Pane: AIチャットパネル、AI校閲パネルなどを表示。
- Editor Area: 分割表示(Split View)に対応した Monaco Editor。
- Status Bar: 開いているファイル名、文字数カウント(CharCounter)、設定ボタン、ホームボタン。
5. 状態管理 (Contexts)
- SettingsContext: テーマ、エディタ設定、AI APIキーなどの管理と永続化。
- GitContext: 現在のディレクトリのGitステータス、履歴の管理。
- PanelContext: サイドパネルの開閉状態、アクティブなパネルの管理。
6. セキュリティ
nodeIntegration: false,contextIsolation: trueを設定し、セキュリティを確保。preload.tsを通じて制限された機能のみをレンダラーに公開。