Astro Starlight(Tailwand v3)にshadcn/uiを導入する

公開日:
目次

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の導入

  1. プロジェクトのルートディレクトリにあるtsconfig.jsonファイルを開き、以下のコードを追加してパスを解決します:
# tsconfig.json
{
    "compilerOptions": {
        // ...
        "baseUrl": ".",
        "paths": {
            "@/*": [
                "./src/*"
            ]
        }
        // ...
    }
}
  1. shadcn/uiをセットアップするために、以下のコマンドを実行します:

pnpm:

pnpm dlx [email protected] init

npm:

npx [email protected] init

yarn:

npx [email protected] init
  1. このコマンドを実行すると、プロジェクトの設定に関するいくつかの質問が表示されます。

プロジェクトに適した選択肢を選んでください。

私は下記のように選択しました。

Image from Gyazo

  1. reactがインストールされていない場合、以下のコマンドを実行してreactをインストールします:

pnpm:

pnpm astro add react

npm:

npx astro add react

yarn:

yarn astro add react
  1. 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: