今日の優良食堂
実際に入れて動かして書いた、今日の一膳
ギット飯が代わりに導入・実行・コードまで確かめました
今日の優良食堂 · ギット飯が代わりに導入・分析

shadcn-ui/ui

カスタマイズ可能で拡張性の高い、開発者向けUIコンポーネント集

shadcn-ui/uiは、npmでインストールするのではなく、CLIでコードそのものをプロジェクトに取り込む方式です。手元に落ちてきたコンポーネントはRadix UIの土台があるのでアクセシビリティを気にせず、Tailwind CSSのクラスをそのまま書き換えて自分仕様に育てられます。vitestでのテストやchangesetsによるリリース管理など運用の裏付けもあるので、今日Tailwindプロジェクトに1つ追加して、自分のデザインシステムの出発点にしてみる価値があります。

01 / 概要
何をするものか一文で言うと
ひとことでカスタマイズ可能で拡張性の高い、開発者向けUIコンポーネント集

shadcn/uiは、コピー&ペーストで導入するUIコンポーネント集と、そのコード配布基盤(レジストリ)です。React・Next.js・Viteなど複数フレームワーク、Radix UI・Base UI・React Aria Componentsなど複数のUIプリミティブに対応したコンポーネントソースを、CLI経由でプロジェクトへ直接コピーします。apps/v4はそのドキュメントサイトであり、テーマを組み立てる「create」デザインシステムビルダーも兼ねています。

02 / 構造
どう動くのか中核のしくみ
読み方動きの流れを図と一緒にほどきました。

レジストリという仕組みが、テーマ・ベースカラー・フォント・アイコンライブラリ・角丸・ポインターカーソルなどの設定をJSONで表現します。apps/v4/app/(app)/(create)/init/route.tsが/initエンドポイントとして動き、parseDesignSystemConfigでクエリパラメータを検証し、buildRegistryBaseがCSS変数や依存関係を含むregistry:base形式のJSONを組み立てて返します。route.test.tsを見ると、onlyパラメータで絞り込んだ場合や不正な値を渡した場合の挙動もテストで固定されています。CLIやCreate画面のv0連携ボタンがこのJSONを取得し、コンポーネントファイルをそのままプロジェクトへ書き込みます。つまりnpmパッケージ配布ではなく、ソースコードそのものを配布する設計です。apps/v4配下には「sera」スタイルのメディアライブラリや記事一覧、分析画面などのデモと、それぞれ対応するスケルトンUIが用意されており、見た目の確認とカスタマイズ体験ができるようになっています。

03 / 体験
入れるとこんな体験になりますギット飯が実際にたどった順序
所要ギット飯が実際に導入・実行しながらたどった順序です。
  1. STEP 01

    npx shadcn@latest initを実行すると、フレームワークの自動検出とcomponents.jsonの生成を体験できます。

  2. STEP 02

    npx shadcn@latest add buttonを実行すると、src/components/ui配下にbutton.tsxのソースがそのままコピーされるのを確認できます。

  3. STEP 03

    apps/v4をpnpm devで起動し、/createページでテーマ・フォント・角丸などをGUIで調整して生成コードをコピーできます。

  4. STEP 04

    Radix UI・Base UI・React Ariaなど異なるプリミティブを切り替えて、同じコンポーネントの実装差分を比較できます。

  5. STEP 05

    pnpm testを実行すると、route.test.tsやparse-config.test.tsなどのvitestが動き、/initエンドポイントの挙動を確認できます。

04 / 成果物
何が手に入るのか導入後に手元に残るもの

手に入るのはnpmパッケージではなく、プロジェクト内にコピーされた編集可能なコンポーネントソース一式と、components.jsonの設定ファイルです。加えてCreateビルダーを使えば、選んだテーマに対応するCSS変数一式も生成できます。

05 / 注意
ここは先に知っておいてください先に知っておくとよいこと
正直なところ誰にでも合うとは言いにくいところです。
01

monorepoはpnpmとturborepo構成で、apps/v4単体でもNext.js・Vite・Tailwindなど依存が多く、フル動作確認には環境構築の手間があります。

02

createやseraのデモはv4固有の機能で、init/v0/route.tsのようなv0連携部分は外部サービスの鍵が絡み、手元だけでは完全に再現できない可能性があります。

03

今回確認できたのはファイルツリーと一部のソース・テストのみで、全コンポーネントの実装品質は個別に読む必要があります。

06 / 結論
ギット飯の結論食べてみる価値のある一膳か
ギット飯の最終判断優良食堂

自前でUIライブラリを保守したくないものの、コード自体を所有してカスタマイズしたいReact系開発者に向いています。npmの抽象化に縛られず、Radix UIやBase UIなど土台を選びたい場面に合います。route.tsやparse-config.test.tsなど実際の検証ロジックがテスト付きで確認できるため、インストールしなくてもレジストリの設計思想と挙動は十分把握できます。

今日の残りの一膳
SUBSCRIBER LIBRARY
これまでに検証した優良食堂を一堂に

4 つの関門を通った優良食堂がすべてバックナンバーに集まっています。いちばん新しい一膳はどなたでも無料で読め、それより前の優良食堂の検証の根拠・詳しい解説は ギット飯 プレミアムのご購読ですでに開いています。

優良食堂バックナンバー →
リポジトリ詳細🧪 ひと言で味見する