メインコンテンツまでスキップ

ローカル開発

このガイドでは、Elftia のローカル開発環境を素早く構築してコーディングを始める方法を説明します。

前提条件

Node.js

このプロジェクトには Node.js v24 が必要です(プロジェクトルートの .nvmrc を参照)。バージョン管理には nvm または fnm の使用を推奨します:

nvm install
nvm use

ネイティブビルドツール

このプロジェクトは better-sqlite3 などのネイティブ Node.js モジュールに依存しており、C/C++ コンパイル環境が必要です:

プラットフォーム必要なツールインストール方法
WindowsVisual Studio Build Tools 2022npm install -g windows-build-tools または VS サイト からインストール
macOSXcode Command Line Toolsxcode-select --install
Linuxbuild-essential, python3sudo apt install build-essential python3(Debian/Ubuntu)

その他の依存関係

  • Git >= 2.30
  • ripgrep (rg) — postinstall スクリプトによって自動的にダウンロードされます。または手動でインストールしてください

プロジェクトの初期化

# 1. リポジトリをクローン
git clone <repo-url> elftia
cd elftia

# 2. 依存関係のインストール
npm install

npm install によって実行される postinstall スクリプトは、次の処理を自動的に行います:

  • ネイティブモジュール(better-sqlite3node-pty など)を現在の Electron バージョンに合わせて再コンパイル
  • プラットフォーム固有の ripgrep バイナリをダウンロード
# 3. 環境変数ファイルを作成
cp .env.example .env

.env を編集して API キーやその他の設定を入力してください。


開発モードの起動

npm run dev

electron-vite dev が起動し、3 つのターゲットのコード変更を同時に監視します:

ターゲットディレクトリホットリロード
メインプロセスpackages/desktop/app/main/メインプロセスを再起動
プリロードスクリプトpackages/desktop/app/preload/メインプロセスを再起動
レンダラーpackages/renderer/src/Vite HMR(ポート 5375
ヒント

初回起動時にネイティブモジュールエラーが発生した場合は、npm run rebuild を実行して再コンパイルを試してください。


すべての開発コマンド

コマンド説明
npm run devElectron + Vite 開発モードを起動(メイン + プリロード + レンダラー)
npm run dev:webレンダラーのみを起動(ウェブモード、Electron なし)
npm run dev:serverFastify ウェブサーバーを起動(オプション)
npm run build全パッケージをビルド(レンダラー + デスクトップ)
npm run build:rendererフロントエンドのみをビルド(Vite プロダクションモード)
npm run build:desktopElectron メインプロセスのみをビルド(tsup)
npm run build:officialオフィシャルリリースをビルド(署名付き)
npm run build:steamSteam バージョンをビルド
npm run lintESLint + TypeScript 型チェックを実行
npm run lint:eslintESLint のみを実行
npm run typecheckTypeScript コンパイルチェックのみを実行
npm run testVitest テストを実行
npm run format全コードを Prettier でフォーマット
npm run format:file <path>単一ファイルを Prettier でフォーマット
npm run verify:buildビルド成果物のサイズを検証(4 つの主要指標)
npm run analyze:buildバンドル構成を分析(チャンク統計)

デバッグ

メインプロセスのデバッグ

方法 1:--inspect フラグ

# package.json の dev スクリプトに --inspect を追加
# またはそのまま実行:
electron --inspect=9229 .

その後、Chrome で chrome://inspect を開いてメインプロセスに接続します。

方法 2:VS Code

.vscode/launch.json に以下の設定を追加します:

{
"type": "node",
"request": "attach",
"name": "Attach to Main Process",
"port": 9229,
"skipFiles": ["<node_internals>/**"]
}

レンダラープロセスのデバッグ

Ctrl+Shift+I(Windows/Linux)または Cmd+Option+I(macOS)を押して DevTools を開きます。

DevTools でサポートされている機能:

  • React DevTools — 対応するブラウザ拡張機能をインストールすると自動的に読み込まれます
  • Network — IPC 呼び出しを監視します(invoke リクエストとして表示されます)
  • Performance — レンダリングパフォーマンスを分析します

ログ

Elftia はログ管理に Winston を使用しています。

環境変数説明デフォルト
LOG_LEVELログレベル(debug / info / warn / errorinfo

ログファイルの保存場所:

プラットフォームパス
Windows%APPDATA%/elftia/logs/
macOS~/Library/Application Support/elftia/logs/
Linux~/.config/elftia/logs/

開発モードとプロダクションモードの違い

項目開発モードプロダクションモード
フロントエンド配信Vite Dev Server(HMR)静的ファイル(file://
ソースマップ有効無効
ミニファイなしTerser(console.log を削除)
コード分割フル読み込みルートごとに React.lazy
CSP緩和厳格
DevTools自動的に開くデフォルトで非表示(開発者モードで有効化可)
データベース開発用ユーザーデータディレクトリ本番用ユーザーデータディレクトリ
ログレベルdebuginfo

Worker スレッド

Elftia は IPC のブロッキングを防ぐため、メインプロセスで複数の Worker スレッドを生成します:

Workerファイル担当処理
db.workerworkers/db/SQLite の読み書き操作
fileSearch.workerworkers/fileSearch/ファイル内容の検索(ripgrep)
fileWatcher.workerworkers/fileWatcher/ファイルシステム変更の監視
mcp.workerworkers/mcp/MCP サーバーとの通信
diagnostics.workerworkers/diagnostics/システム診断情報の収集
project.workerworkers/project/プロジェクトディレクトリのインデックス作成

開発モードでは Worker は ts-node を通じて TypeScript ソースを直接実行します。プロダクションモードでは tsup によってスタンドアロンの JS ファイルにコンパイルされます。


よくある問題

ネイティブモジュールのコンパイル失敗

# クリーンインストール
rm -rf node_modules
npm install

# またはネイティブモジュールのみを再コンパイル
npm run rebuild

ポートが使用中

Vite Dev Server はデフォルトでポート 5375 を使用します。使用中の場合:

# ポートを使用しているプロセスを特定
lsof -i :5375 # macOS/Linux
netstat -ano | findstr :5375 # Windows

データベースのロック

「database is locked」エラーが表示された場合は、Elftia のインスタンスが複数起動していないことを確認してください。開発時には diagnostics API を使用してデータベースの状態をエクスポートできます:

window.api.diagnostics.dump()