ゲーム開発
Unity
UnrealEngine
C++
ゲーム数学
ゲームAI
サウンド
アニメーション
GBDK
制作日記
3DCG
Houdini
Blender
USD
グラフィックス
テクノロジ
ツール開発
フロントエンド関連
サーバサイド関連
ソフトウェア設計
ハードウェア関連
おすすめ技術書
音楽
DTM
楽器・機材
ピアノ
その他
都会のエレキベア
ラーメン日記
四コマ漫画
おすすめアイテム
おもしろコラム
  • ゲーム開発
    • Unity
    • UnrealEngine
    • C++
    • ゲーム数学
    • ゲームAI
    • サウンド
    • アニメーション
    • GBDK
    • 制作日記
  • 3DCG
    • Houdini
    • Blender
    • USD
    • グラフィックス
  • テクノロジ
    • ツール開発
    • フロントエンド関連
    • サーバサイド関連
    • ソフトウェア設計
    • ハードウェア関連
    • おすすめ技術書
  • 音楽
    • DTM
    • 楽器・機材
    • ピアノ
  • その他
    • 都会のエレキベア
    • ラーメン日記
    • 四コマ漫画
    • おすすめアイテム
    • おもしろコラム
  1. ホーム
  2. 20231231_02_electron_vue

【Electron × Vue3】Electron × Vue3 × TypeScript × Vite でツール開発環境を整える

ツール開発JavaScriptフロントエンド関連ElectronVue.jsTypeScriptVite
2023-12-31

マイケル
マイケル
みなさんこんにちは! マイケルです!
エレキベア
エレキベア
こんにちクマ〜〜〜
マイケル
マイケル
今回は Electron というフレームワークを用いて ツールの開発環境を整えてみます!
エレキベア
エレキベア
Electron・・・確かフロントエンド技術で アプリ開発できるフレームワークだったクマね
マイケル
マイケル
そう、これまではちょっとしたツールはPythonで作ることが多かったけど いくつか不満もあったし、フロント技術もある程度扱えるようになってきたから手を出してみたんだ! そのあたりにも触れつつ、解説していこうと思います。
エレキベア
エレキベア
楽しみクマ〜〜〜

Electronの特徴

マイケル
マイケル
まず、Electronとはどのようなものかというと、 JavaScript、HTML、CSS等のWeb技術を用いてデスクトップアプリケーションを構築するためのフレームワーク になります。
✔ Electronとは
  • JavaScript、HTML、CSS等のWeb技術を用いてデスクトップアプリケーションを構築するためのフレームワーク
20231231_electron_vue_05

Electron - 公式ページ


エレキベア
エレキベア
Web技術がそのまま使用できるのは、 フロントエンドエンジニアからしたら有り難そうクマね
マイケル
マイケル
そう、ReactやVueといったUIフレームワークも扱えるから Web開発と同じような感覚でUI構築が行いやすいのが特徴だね
マイケル
マイケル
Python等を使用して開発する場合、どうしても環境依存の問題が出てきてしまいがちだけど Web技術をベースにしているためにプラットフォーム依存が少なくパッケージ化が容易い のもメリットです。 しかしその反面、Chromiumがそのまま組み込まれているためにアプリ容量が大きくなってしまう なのがデメリットになります・・・。
エレキベア
エレキベア
むむ、容量が大きくなるのは仕方ないクマね・・・
マイケル
マイケル
最近だと容量問題を解決した Tauri というRustベースのフレームワークもあるから、こちらもその内触ってみようと思います。 以上をまとめると、下記のような特徴になります!
メリット
  • Web技術を使用しているため、プラットフォーム依存が少ない
  • ReactやVueといったUIフレーワークを使用することができる
  • アプリ開発を前提に用意されているため、パッケージ化が容易い
デメリット
  • chroniumをそのまま組み込んでいるため容量が大きい
  • 使用できる機能がWeb技術に依存する所がある

エレキベア
エレキベア
大体どんなものか分かってきたクマ〜〜〜
マイケル
マイケル
それじゃさっそく触っていこう!

Electron開発環境の構築

マイケル
マイケル
今回作ったテンプレートは、下記のGitHubに上げています。 こちらもよければ参考にしてください!

GitHub - electron-vue-ts-template

エレキベア
エレキベア
自由に使ってくれて構わないクマ〜〜

開発環境の構成

マイケル
マイケル
今回は 下記のような構成 + TypeScriptを使用 できるよう 開発環境を構築しました!
種類
使用ライブラリ
フロントエンド
Vue3
バックエンド
Electron
ビルドツール
Vite
エレキベア
エレキベア
ほう・・・ Viteは確かビルドが高速なことで有名なビルドツールクマね フロントは何でVueにしたクマ??
マイケル
マイケル
Reactとどっちを使うか迷ったんだけど、 ツール開発は基本的に規模が小さい & Vueの方が実装量が少なそう といった理由からVueを使ってみることにしたよ! あとは単純にVueを使ったことがなかったので興味本位もありますね!
エレキベア
エレキベア
まあちょっとしたツール開発は規模も小さいクマからね 何かを試すにはいい機会クマ
マイケル
マイケル
最近だとSvelteも気になってはいるんだけどね・・・ 今回はViteCLIからテンプレートを作成するので、Vueが嫌な人は違うフレームワークを選択して進めてみてください!

Vue3×TypeScriptプロジェクトの雛形作成

マイケル
マイケル
それではまずは Vue3 * TypeScript の雛形プロジェクトを作成します。 作成方法としてはVueCLIを使用する方法もありますが、今回はUIフレームワークを変更した場合でも同様の手順で環境構築できるよう ViteCLI を使用して作成していきます。
エレキベア
エレキベア
Viteベースでプロジェクトを作成してElectronを追加導入する流れ クマね シンプルに環境が作れそうクマ
マイケル
マイケル
ViteCLIでプロジェクトを作成するには下記コマンドを実行します。 フレームワーク、言語を聞かれるので、そこでVue、TypeScriptを選択し npm install すれば完了です!
# Vue * TypeScript の雛形を作成
npm init vite@latest
✔ Project name: … electron-vue-ts-template
✔ Select a framework: › Vue
✔ Select a variant: › TypeScript

# npmモジュールインストール
cd electron-vue-ts-template/
npm install
エレキベア
エレキベア
簡単クマ〜〜〜〜
マイケル
マイケル
この時点で npm run dev を実行してURLにアクセスすると サンプルプロジェクトが開くことを確認できます。
npm run dev
20231231_electron_vue_01
▲URLにアクセスすると初期画面が表示される

エレキベア
エレキベア
あとはこれをElectronでアプリとして開けるようにすればいいクマね

Electronの導入

マイケル
マイケル
それではこのプロジェクトにElectronを導入していきます。 下記コマンドでインストールしましょう!
npm install --save-dev electron@latest
マイケル
マイケル
そしてElectron用のtsconfigを作成します。 ElectronのメインプロセスはNode.jsで動くので、commonjsとして認識するよう記載します。
# Electronメインプロセス用のtsconfigを作成
touch tsconfig.electron.json
{
    /* electron override settings */
    "extends": "./tsconfig.json",
    "compilerOptions": {
      /* commonjs */
      "target": "esnext",
      "module": "commonjs",
      "moduleResolution": "node",
      "sourceMap": true,
      "esModuleInterop": true,
      "lib": ["esnext", "DOM", "DOM.Iterable"],
      "skipLibCheck": true,
      
      /* bundler mode */
      "allowImportingTsExtensions": false,
      "noEmit": false,

      "outDir": "dist/electron"
    },
    "include": ["src/electron/**/*"]
  }
エレキベア
エレキベア
Vue.js側のtsconfigとは別に作成するのクマね
マイケル
マイケル
あとは src/electron フォルダ配下にElectron用のコードを作成します。 こちらは Electron公式のチュートリアル をベースにしています。

Electron - 公式チュートリアル

import { app, BrowserWindow } from "electron";
import * as path from "path";

function createWindow() {
  const mainWindow = new BrowserWindow({
    height: 600,
    width: 800,
    webPreferences: {
      preload: path.join(__dirname, "preload.js"),
    },
  });

  mainWindow.loadFile(path.join(__dirname, "../index.html"));

  // Open the DevTools.
  // mainWindow.webContents.openDevTools();
}

app.whenReady().then(() => {
  createWindow();

  app.on("activate", function () {
    if (BrowserWindow.getAllWindows().length === 0) createWindow();
  });
});

app.on("window-all-closed", () => {
  if (process.platform !== "darwin") {
    app.quit();
  }
});
window.addEventListener("DOMContentLoaded", () => {
  const replaceText = (selector: any, text: any) => {
    const element = document.getElementById(selector);
    if (element) {
      element.innerText = text;
    }
  };

  for (const type of ["chrome", "node", "electron"]) {
    replaceText(`${type}-version`, process.versions[type as keyof NodeJS.ProcessVersions]);
  }
});
エレキベア
エレキベア
メインプロセスの処理は main.ts レンダラープロセスの処理も呼び出す場合は preload.ts に書くクマね
マイケル
マイケル
あとは preload.ts で設定した値を確認するため、 vueファイルを一部修正します。 合わせて vite.config.ts のbase項目を設定しておきましょう。
<template>
・・・省略・・・

  <!-- electron preload test-->
  <div>
    We are using Node.js <span id="node-version"></span>,
    Chromium <span id="chrome-version"></span>,
    and Electron <span id="electron-version"></span>.
  </div>
</template>
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  base: './'
})
エレキベア
エレキベア
これで一通りの実装は完了クマね
マイケル
マイケル
package.json の変更は下記になります。 ・npmコマンドをそれぞれ定義 ・main項目にElectronのエントリポイントを指定 ・type: module 項目を削除
{
  "name": "electron-vue-ts-sample",
  "private": true,
  "version": "0.0.0",
  "scripts": {
    "vite:dev": "vite",
    "vite:build": "vue-tsc && vite build",
    "vite:preview": "vite preview",
    "electron:build": "tsc -p tsconfig.electron.json",
    "electron:dev": "electron .",
    "dev": "npm run build && npm run vite:dev",
    "build": "npm run vite:build && npm run electron:build",
    "app": "npm run build && npm run electron:dev"
  },
  "main": "dist/electron/main.js",
  "dependencies": {
    "vue": "^3.3.8"
  },
  "devDependencies": {
    "@vitejs/plugin-vue": "^4.5.0",
    "electron": "^27.1.3",
    "electron-builder": "^24.9.1",
    "typescript": "^5.2.2",
    "vite": "^5.0.0",
    "vue-tsc": "^1.8.22"
  }
}
マイケル
マイケル
npm run dev → ブラウザ確認 npm run app → アプリ確認 といった使い分けになります。
マイケル
マイケル
Viteにより npm run dev での確認時はホットリロードされますが、 アプリ確認時はホットリロードされません。 そのため基本はブラウザで確認しながら開発し、Eletron側の機能を確認したい時だけ npm run app する、といった形で進めることにしました。
# ビルドのみ行う
npm run build

# ブラウザで起動する
npm run dev

# アプリで起動する
npm run app
エレキベア
エレキベア
ブラウザで開発を進めながら、アプリを立ち上げて確認する感じクマね
マイケル
マイケル
アプリを立ち上げながらホットリロードする方法もあるようなので、 興味がある方は調べてみてください。
20231231_electron_vue_02
▲npm run dev でブラウザ起動した状態

20231231_electron_vue_03
▲npm run app でアプリを立ち上げた状態

マイケル
マイケル
上記のようにそれぞれ立ち上がれば完了です!
エレキベア
エレキベア
やったクマ〜〜〜

electron-forgeの導入

マイケル
マイケル
最後に、作成したアプリをパッケージ化するための環境を作ります。 こちらは公式チュートリアルでも使用されている electron-forge を使用しました。

Electron - クイックスタート

マイケル
マイケル
下記コマンドでインストールした後、 package.json内の記載を修正します。
npm install --save-dev @electron-forge/cli

# forge.config.js生成とpackage.jsonへの追加
npx electron-forge import
"scripts": {
・・・略・・・
    "app:package": "electron-forge package",
    "app:make": "electron-forge make"
  },
マイケル
マイケル
あとは下記のようにpackageコマンドを実行すると デフォルトでoutフォルダ配下に出力されるはずです!
# forge.config.jsの設定に基づいて配布可能なパッケージを出力
npm run app:package
20231231_electron_vue_04
▲outフォルダ配下にアプリが出力される

エレキベア
エレキベア
ちゃんとアプリとして出力されてるクマ〜〜〜
マイケル
マイケル
forge.config.js を修正することでアイコンを変えたりなどアプリの設定が行えるので、この辺りは各々調整してみてください!

electronforge create-and-add-icons

おわりに

マイケル
マイケル
今回はViteで作成したプロジェクトにElectronを組み込んで環境構築をしてみました! どうだったかな?
エレキベア
エレキベア
簡単にアプリが作成できて感動したクマ〜〜 Web開発と同じ感覚でホットリロード開発ができるのも嬉しいクマね
マイケル
マイケル
今回作った環境を使用して実際にツールを2つほど作ってみたので、 こちらも興味がある方は見てみてください! メインプロセスとレンダラープロセスの連携 周りも解説してあります!
【Electron × Vue3】画像をリサイズして任意の場所に保存するツールを作る
2023-12-31
【Electron × Vue3】カテゴリ情報のCSVデータを操作するツールを作る
2023-12-31
エレキベア
エレキベア
実践的なアプリ開発クマね
マイケル
マイケル
それでは今日はこの辺で! アデュー!!
エレキベア
エレキベア
クマ〜〜〜〜

【Electron × Vue3】Electron × Vue3 × TypeScript × Vite でツール開発環境を整える 〜完〜


ツール開発JavaScriptフロントエンド関連ElectronVue.jsTypeScriptVite
2023-12-31
記事をSNSで共有する
X
Facebook
LINE
はてなブックマーク
Pocket
LinkedIn
Reddit

著者の各種アカウント
フォローいただけると大変励みになります!
X
GitHub

関連記事
【Three.js】カスタムシェーダーでトゥーン+背面法アウトラインを実装する
2026-02-15
【Three.js】Three.js入門 - シーン構築・モデル読み込み・ポストプロセスまで
2026-02-15
【Astro】Astroの使い方と複数UIフレームワーク(React、Vue、Svelte)を組み合わせるサンプル
2026-02-01
【Houdini21.0】3Dビル群っぽいブログヘッダー画像を作成する
2026-01-10
【VSCode】ドラッグ&ドロップで画像ファイルをリサイズ・保存する拡張機能を作る
2025-11-22
【Unity】Timeline × Excelでスライドショーを効率よく制作する
2024-10-31
【ゲーム数学】第九回 p5.jsで学ぶゲーム数学「フーリエ解析」
2024-05-12
【Node.js】廃止されたAmazonアソシエイト画像リンクをAmazon Product Advertising API経由で復活させる
2024-01-08