目次
Astro StarlightとTailwind CSSを使用したプロジェクトに、shadcn/uiを導入する方法を紹介します。
shadcn/uiは、美しくカスタマイズ可能なUIコンポーネントを提供するライブラリです。
Starlightは現状、Tailwind CSS v3を使用しているため、shadcn/uiも同様にTailwind CSS v3で導入します。
前提条件
- 既にAstro Starlightプロジェクトが作成されていること
- Tailwind CSS v3が導入されていること
shadcn/uiの導入
- プロジェクトのルートディレクトリにある
tsconfig.json
ファイルを開き、以下のコードを追加してパスを解決します:
# tsconfig.json
{
"compilerOptions": {
// ...
"baseUrl": ".",
"paths": {
"@/*": [
"./src/*"
]
}
// ...
}
}
- shadcn/uiをセットアップするために、以下のコマンドを実行します:
pnpm:
pnpm dlx [email protected] init
npm:
npx [email protected] init
yarn:
npx [email protected] init
- このコマンドを実行すると、プロジェクトの設定に関するいくつかの質問が表示されます。
プロジェクトに適した選択肢を選んでください。
私は下記のように選択しました。
- reactがインストールされていない場合、以下のコマンドを実行してreactをインストールします:
pnpm:
pnpm astro add react
npm:
npx astro add react
yarn:
yarn astro add react
- shadcn/uiを追加すると下記のようにCSSが追加されます。
# src/styles/tailwind.css
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer base {
:root {
--background: 0 0% 100%;
--foreground: 240 10% 3.9%;
--card: 0 0% 100%;
--card-foreground: 240 10% 3.9%;
--popover: 0 0% 100%;
--popover-foreground: 240 10% 3.9%;
--primary: 240 5.9% 10%;
--primary-foreground: 0 0% 98%;
--secondary: 240 4.8% 95.9%;
--secondary-foreground: 240 5.9% 10%;
--muted: 240 4.8% 95.9%;
--muted-foreground: 240 3.8% 46.1%;
--accent: 240 4.8% 95.9%;
--accent-foreground: 240 5.9% 10%;
--destructive: 0 84.2% 60.2%;
--destructive-foreground: 0 0% 98%;
--border: 240 5.9% 90%;
--input: 240 5.9% 90%;
--ring: 240 10% 3.9%;
--chart-1: 12 76% 61%;
--chart-2: 173 58% 39%;
--chart-3: 197 37% 24%;
--chart-4: 43 74% 66%;
--chart-5: 27 87% 67%;
--radius: 0.5rem
}
.dark {
--background: 240 10% 3.9%;
--foreground: 0 0% 98%;
--card: 240 10% 3.9%;
--card-foreground: 0 0% 98%;
--popover: 240 10% 3.9%;
--popover-foreground: 0 0% 98%;
--primary: 0 0% 98%;
--primary-foreground: 240 5.9% 10%;
--secondary: 240 3.7% 15.9%;
--secondary-foreground: 0 0% 98%;
--muted: 240 3.7% 15.9%;
--muted-foreground: 240 5% 64.9%;
--accent: 240 3.7% 15.9%;
--accent-foreground: 0 0% 98%;
--destructive: 0 62.8% 30.6%;
--destructive-foreground: 0 0% 98%;
--border: 240 3.7% 15.9%;
--input: 240 3.7% 15.9%;
--ring: 240 4.9% 83.9%;
--chart-1: 220 70% 50%;
--chart-2: 160 60% 45%;
--chart-3: 30 80% 55%;
--chart-4: 280 65% 60%;
--chart-5: 340 75% 55%
}
}
@layer base {
* {
@apply border-border;
}
body {
@apply bg-background text-foreground;
}
}
いくつかのカスタムプロパティが追加され、ダークモードのスタイルも追加されます。
これによってStarlightのデフォルトのスタイルが上書きされます。
適宜カスタマイズしましょう。
ちなみに、Starlightとshadcn/uiはダークモードとライトモードの設定が逆なので入れ替えておく必要があります。
フレームワーク | ダークモード | ライトモード |
---|---|---|
Starlight | :root | :root[data-theme="light"] |
shadcn/ui | .dark | :root |
注記:
- shadcn/uiの元の設定(ダークモード: .dark、ライトモード: :root)を変更しています。
- ダークモードとライトモードの設定を統一するために、shadcn/uiの
.dark
を:root
に、:root
を:root[data-theme="light"]
に変更しています。 - この変更により、StarlightとshadcnのCSS設定が一致し、両フレームワークで同じセレクタを使用してダークモードとライトモードのスタイルを定義できるようになります。
コンポーネントの追加
セットアップが完了したら、shadcn/uiのコンポーネントを追加できます。
例えば、Buttonコンポーネントを追加するには以下のコマンドを実行します。
pnpm:
pnpm dlx [email protected] add button
npm:
npx [email protected] add button
yarn:
npx [email protected] add button
コンポーネントの使用
追加したコンポーネントは、以下のように使用できます。
例えば、src/docs/index.mdx
ファイル
# src/docs/index.mdx
import { Button } from "@/components/ui/button"
<Button>Click me</Button>