ElectronでTailwind CSS 4.0とshadcn/uiを使おうとしたら上手くいかなかった話
electron-viteのGetting Startedだとエラーが出る
最初に上記のelectron-viteのGetting Startedを見て以下のコマンドからプロジェクトを始めました。
pnpm create @quick-start/electron
実行してみると以下のエラーが出てしまいました。
Cannot find module '@tailwindcss/vite' or its corresponding type declarations.
ググって調べてみると以下のStackOverFlowの投稿を見つけ
どうもquick-startのパッケージを使うのが良くないらしく、マニュアルで入れる必要があるようです。
viteを使いマニュアルでインストール
pnpm create vite@latest erd-editor-alpha
上記のコマンドを実行するとフレームワークを選ぶ選択肢が出てくるので、ここでOthersを選択します。

するとElectronの選択肢が出てくるのでここを選択

後の選択肢はとりあえずデフォルトを選び、最後にフロントに使うフレームワークを聞かれるので好きなものを選びます。

そうしたらディレクトリに入り、必要なものをインストールします。
cd electron-sample
pnpm install
いくつかのライブラリがセキュリティ上ビルドされないので以下のコマンドで対応します。
pnpm approve-builds
実行
pnpm run dev
WSLから実行した場合、そのままだと実行されないので以下の対応をしていく
私はWSL環境で実行したのですが、WSLだとElectronに必要な共有ライブラリが無いのでインストールしていく必要がありました。下記のライブラリはおそらく手元の環境で変わると思います。
sudo apt install libnspr4 libnss3 libasound2t64
ついでにElectron内のリンクでwindows側のブラウザが使えるようにします。
sudo vim /usr/local/bin/xdg-open
#!/bin/bash
# WSL2用のxdg-openラッパー
powershell.exe -Command "Start-Process '$1'"
sudo chmod +x /usr/local/bin/xdg-open
WSLで起動すると90年代テイストのbarが出てくるので消すためにソースコードのapp.tsに以下を追記します。
const mainWindow = new BrowserWindow({
width: 900,
height: 670,
show: false,
+ frame: false,
+ autoHideMenuBar: true, //Mac用タイトルバーに閉じるボタンを残す
titleBarStyle: 'hidden',
...(process.platform === 'linux' ? { icon } : {}),
webPreferences: {
preload: join(__dirname, '../preload/index.js'),
sandbox: false,
}
})
Tailwind CSSを設定
公式ガイド通りにTailwindを導入します。
pnpm add -D tailwindcss postcss autoprefixer @tailwindcss/vite
Tailwind v4からはnpx tailwindcss init -pの必要性が無くなったらしくやらなくてよいです。
参考URL: https://tailwindcss.com/docs/installation/using-vite
configにTailwindの設定を入れます。
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
+ import tailwindcss from '@tailwindcss/vite'
// https://vite.dev/config/
export default defineConfig({
+ plugins: [react(), tailwindcss()],
})
最後にShadcn/UI を導入してみます
tsconfig.json とtsconfig.app.json に以下を追加
compilerOptionsが既にあれば2つ項目を追加するだけ
"compilerOptions": {
+ "baseUrl": ".",
+ "paths": { "@/*": ["./src/*"] }
}
Node.jsの型定義もインストール
pnpm add -D @types/node
以下も追加
import { defineConfig } from 'vite'
import path from 'node:path'
import electron from 'vite-plugin-electron/simple'
import react from '@vitejs/plugin-react'
import tailwindcss from '@tailwindcss/vite'
export default defineConfig({
plugins: [
//~~~~省略~~~~
],
+ resolve: {
+ alias: {
+ '@': path.resolve(__dirname, 'src'),
+ },
+ },
})
どうもshadcnがまだTailwind v4に対応していないらしく以下を追記する必要がありました。
index.cssに以下を追加 (参考: https://zenn.dev/linux_club/articles/dd03b7fdfe48f8)
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
以下で初期化
pnpm dlx shadcn@latest init
これで無事使えるようになります。
Discussion