shadcn/uiのドキュメントのViteの設定方法は間違いなので、エラーになる

shadcn/uiとは

shadcn/uiはReact + Tailwind CSS環境で利用できるコンポーネントライブラリです。

shadcn/uiを使用すれば視覚的に美しいUIコンポーネントと柔軟性の高いデザインのWebサイトが作成できます。

shadcn/ui

shadcn/uiの読み方

shadcn/uiの読み方は「シャドシーエヌ」です。

日本だけでなく欧米でもこの読み方をしている人が多数で、多くの人は語尾の「ユーアイ」の部分までは読みません。

ドキュメント通りにViteを設定するとエラーになる

shadcn/uiの公式サイトにはViteでのインストールおよび設定方法が記載されています。

Install and configure Vite.

しかし、設定の手順について間違っている箇所があるため、ドキュメント通りにインストールしようとしてもエラーになってインストールできません。

shadcn/uiの正しい設定手順

最初にViteを以下のコマンドでインストールしてください。

npm create vite@latest my-shadcn-ui -- --template react-swc-ts
cd my-shadcn-ui
npm install

インストールしたら、tailwindcss postcss autoprefixer @types/nodeをインストールしてください。

npx tailwindcss init -p を実行するとtailwind.config.jsとpostcss.config.jsが生成されます。

npm i -D tailwindcss postcss autoprefixer @types/node
npx tailwindcss init -p

tailwind.config.jsが生成されたらtailwind.config.js内のcontentにTailwind CSSを適用したいファイルのパスを指定してください。

shadcn/uiはTailwind CSSを使用しているので、適用したいファイルのパスを記載しないと適用されません。

tailwind.config.js
/** @type {import('tailwindcss').Config} */
export default {
  // Tailwindを適用したいファイルのパス
  content: ["./src/**/*.{js,jsx,ts,tsx}"],
  theme: {
    extend: {},
  },
  plugins: [],
}

また、index.cssにはTailwind CSSを読み込むための以下のコードを書いてください。

shadcn/uiはTailwind CSSを使用しているので、@tailwindでCSSを読み込まないと使用できません。

index.css
@tailwind base;
@tailwind components;
@tailwind utilities;

次に '@' のエイリアスを追加するのですが、公式サイトのドキュメントだと「import react from "@vitejs/plugin-react"」となっているため、SWC (stands for Speedy Web Compiler)を使用している場合はそのままコピーしてはいけません。

vite.config.ts
import path from 'path'
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react-swc'

export default defineConfig({
  plugins: [react()],
  resolve: {
    alias: {
      '@': path.resolve(__dirname, './src'),
    },
  },
})

tsconfig.jsonとtsconfig.app.jsonのcompilerOptionsのbaseUrlとpathsを追加します。

間違えてtsconfig.node.jsonを修正しないように注意してください。

tsconfig.json
{
  "files": [],
  "references": [
    { "path": "./tsconfig.app.json" },
    { "path": "./tsconfig.node.json" }
  ],
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/*": ["./src/*"]
    }
  }
}
tsconfig.app.json
{
  "compilerOptions": {
    "target": "ES2020",
    "useDefineForClassFields": true,
    "lib": ["ES2020", "DOM", "DOM.Iterable"],
    "module": "ESNext",
    "skipLibCheck": true,
    "baseUrl": ".",
    "paths": {
      "@/*": [
        "./src/*"
      ]
    },
    // 以降は同じ設定
}

最後にnpx shadcn@latest initを実行して、shadcn/uiで使用するスタイルなどの設定を行います。

3つほど聞かれますが、初回はすべてEnterキーを押してデフォルト設定で問題ありません。

npx shadcn@latest init
 Preflight checks.
 Verifying framework. Found Vite.
 Validating Tailwind CSS.
 Validating import alias.
 Which style would you like to use?  New York
 Which color would you like to use as the base color?  Neutral
 Would you like to use CSS variables for theming?  no / yes
 Writing components.json.
 Checking registry.
 Updating tailwind.config.js
 Updating src/index.css
 Installing dependencies.
 Created 1 file:
  - src/lib/utils.ts

Success! Project initialization completed.
You may now add components.

index.cssの@tailwindの読み込みが書かれていないと以下のエラーが発生します。

shadcn/uiのインストール手順で、「Validating Tailwind CSS.」のエラーを発生させてしまうケースが多いので、index.cssに@tailwindを書き忘れないよう注意が必要です。

npx shadcn@latest init
 Preflight checks.
 Verifying framework. Found Vite.
 Validating Tailwind CSS.
 Validating import alias.

No Tailwind CSS configuration found at /Users/workspace/my-shadcn-ui.
It is likely you do not have Tailwind CSS installed or have an invalid configuration.
Install Tailwind CSS then try again.
Visit https://tailwindcss.com/docs/guides/vite to get started.

Buttonコンポーネントを読み込む

ここまで完了したらshadcn/uiが使える状態になっているので、早速Buttonコンポーネントを読み込んで使用してみましょう。

まず、以下のコマンドでButtonコンポーネントを読み込みます。

npx shadcn@latest add button

あとはApp.tsxを以下のように書き換えれば、Buttonコンポーネントの表示を確認できます。

TSX
import { Button } from "@/components/ui/button"

export default function App() {
  return (
    <div>
      <Button onClick={() => alert('Hello!')}>Click</Button>
    </div>
  )
}
shadcn/ui Buttonコンポーネント

ほかのコンポーネントもインストールしてimportするだけで使えますので、色々試してみてください。