🔰基礎技術

モダンなUIを一瞬で作る魔法の道具|「Tailwind CSS」と「shadcn/ui」の導入ガイド

「機能は動いたけど、見た目がいまいち。。。」
「でも、CSSを勉強してオシャレにするセンスも時間もない。。。」

個人開発者の多くが抱える悩みが「デザイン」です。
しかし、安心してください。現代の開発では、デザインの才能はあまり必要ありません。「良い道具」を知っているかどうかだけで決まります。

今回は、前回作ったNext.jsアプリを、一瞬でプロっぽい見た目に変える魔法の道具「Tailwind CSS」「shadcn/ui」について解説します。

1. そもそも「CSS」を書くのは大変

通常、Webサイトのデザインを作るには「CSS(スタイルシート)」という言語を書く必要があります。
しかし、これは初心者にとってかなり面倒な作業です。

  • ファイルを行ったり来たりしないといけない(HTML ⇄ CSS)。
  • クラス名(.button-primary-active など)を考えるのが大変。
  • スマホ対応(レスポンシブ)のために計算が必要。

これを解決するために生まれたのが、今回紹介するツールです。
本来なら、実績のあるWEBデザイナーへの依頼が一番安心ですが、個人開発の初期導入フェーズでは予算の捻出に苦労する方も多いと思います。
WEBデザイナーほどオシャレになるわけではありませんが、シンプルで統一感のある安っぽくないデザインならこれらのツールで十分に実現可能です。

2. 魔法のシール:Tailwind CSS とは?

Tailwind CSS(テイルウィンド・シーエスエス)は、一言で言うと「あらかじめ用意されたデザイン用シール」です。

従来のCSSでは「赤いボタン」を作るために、別ファイルに色やサイズコードを書いていました。
しかしTailwindでは、HTMLの中に直接魔法の言葉(クラス名)を書くだけでデザインが反映されます。

📝 具体例:赤いボタンを作りたい時

  • 今まで: style.css を作って、background-color: red; color: white; padding: 10px; ...と書く。
  • Tailwind: bg-red-500 text-white p-2 と書くだけ。

「背景を赤く(bg-red-500)」「文字を白く(text-white)」「余白を入れる(p-2)」というシールをペタペタ貼っていく感覚で、爆速でデザインが作れます。

前回の記事で、Next.jsのインストールの際に「Tailwind CSSを使いますか? 👉 Yes」と答えましたよね?
※ インストールバージョンによって異なります
つまり、あなたの環境ではすでにこの魔法が使える状態になっています。

3. 高級家具セット:shadcn/ui とは?

Tailwind CSSのおかげで色は簡単に塗れるようになりました。
でも、「かっこいいボタン」や「使いやすい入力フォーム」の形そのものを作るのは、やはりセンスが必要です。

そこで登場するのが、現在エンジニア界隈で絶大な人気を誇る「shadcn/ui(シャドシーエヌ・ユーアイ)」です。

これは「ライブラリ」ではない

ここが少し特殊なのですが、shadcn/uiは一般的なインストール型の部品集(ライブラリ)ではありません。
「完成されたコードを自分のプロジェクトにコピー&ペーストして使う」というスタイルのツールです。

例えるなら、家具屋で既製品の椅子を買うのではなく、「プロが作った椅子の設計図と材料キット」をもらってくるようなものです。
自分の家(プロジェクト)の中で組み立てるので、後から「角をなめらからにしたい(カスタマイズしたい)」と思った時に、自由自在に改造できるのが最大の特徴です。

4. なぜこのセットが「最強」なのか?

Next.js、TypeScript、Tailwind CSS、そして shadcn/ui。
この組み合わせは「Vercel Ship」などのカンファレンスでも頻繁に登場する、いわば現代のWeb開発の「鉄板構成」です。

ツール名役割(例え)メリット
Tailwind CSSデザイン用シールCSSファイルを書かなくていい。
スマホ対応が楽。
shadcn/ui高級組み立て家具コピーして使うので所有権が自分にある。
デザインがシンプルで美しい。
Next.js + TS家と設計図これらのツールと相性抜群。
設定なしですぐ使える。

他の選択肢(メジャーなUIライブラリ)

もちろん、他にも有名なデザインツールはあります。

  • MUI (Material UI): Googleっぽいデザイン。歴史が古く機能は多いが、データサイズが重くなりがち。
  • Chakra UI: 使いやすいが、少しカスタマイズに癖がある。
  • Bootstrap: 一昔前の定番。「あ、Bootstrapで作ったな」とバレやすいデザイン。

これらと比較しても、現在は「軽量・自由・今っぽい」という点で shadcn/ui が頭一つ抜けています。

5. 実践!導入の流れを確認しよう

それでは、前回の my-first-app に shadcn/ui を入れて、「いい感じのボタン」を表示させてみましょう。

いきなりコマンドを打つ前に、これからやる作業の全体像を把握してください。

🗺️ これからやる作業マップ

  1. 土台の確認: デザインシール(Tailwind CSS)が入っているか確認します。
  2. カタログの取り寄せ: プロジェクトに「shadcn/ui」を使えるように初期設定します。
  3. 家具の注文: カタログから「ボタン」という部品を選んでダウンロードします。
  4. 配置: 画面(page.tsx)にボタンを置いて表示させます。

STEP 0: Tailwind CSSの準備確認

shadcn/uiを使うには、土台としてTailwind CSSが必須です。
前回のNext.jsインストール時に「Tailwind CSS」を Yes にしていれば入っているはずですが、念のため確認しましょう。

確認方法:
VSCodeでプロジェクトを開き、src/app/globals.css というファイルを開きます。
1,2行目あたりに以下のコードが入っていれば、Tailwind CSSを使える状態ですので、そのままSTEP1に進んでください。

@import "tailwindcss";

⚠️ 上記の記述が無い場合

もし記述が見当たらない場合は、後から追加することもできますが、複数ファイルを修正する必要があります。
復習がてら、前回の記事を見てプロジェクトを作り直すのが確実です。
(別名で新規作成してもいいし、フォルダごと削除して、もう一度my-first-appを作成してもOK)

STEP 1: shadcn/ui の初期設定(カタログの取り寄せ)

次は、shadcn/uiを使える状態にするための「初期化コマンド」を実行します。
これは、「家具を置くためのルール決め」のような作業です。

ターミナルに以下を入力してEnterを押してください。

npx shadcn@latest init

実行すると、いくつか質問されます。デザインの好みを聞かれているだけなので、迷ったら全て「Enter(デフォルト)」で大丈夫です。

質問内容(英語)意味と推奨回答
Which style would you like to use?New York デザインの雰囲気です。「New York」は洗練された細い線が特徴で、今の主流です。
Which color would you like to use as base color?Zinc (またはお好みで) メインとなるテーマカラーです。後で詳しく解説します。
Do you want to use CSS variables...?Yes 色の調整が楽になる設定です。必ずYesにしましょう。

🎨 カラー設定(Base Color)の選び方

「Zinc, Slate, Stone...」といきなり言われてもイメージが湧かないと思います。 これは、「白・黒・グレーの色味」をどうするか?という質問です。
導入後に app/globals.css の中の数値を書き換えることで、自分の好きなカラーにできるのであまり深く考えずに選択してOKです。

Success! と出れば、カタログの準備は完了です。

STEP 2: ボタン部品の追加(家具の注文)

shadcn/uiは「全部入り」ではなく、「欲しい家具だけ個別にダウンロードする」方式です。
今回は「ボタン」が欲しいので、以下のコマンドで注文します。

npx shadcn@latest add button

これを実行すると、自動的に components/ui/button.tsx というファイルが生成されます。
これが「プロが作ったボタンの設計図」です。中身を見てみると、Tailwind CSSでびっしりとデザインが書かれているのが分かります。

STEP 3: 画面に表示する(配置)

最後に、前回記事で作成した(src/app/contract/page.tsx)を以下のように変更してみましょう。

// src/app/contact/page.tsx
import { Button } from "@/components/ui/button"

export default function Contact() {
  return (
    <main className="min-h-screen flex flex-col items-center justify-center bg-gray-50 p-6">
      
      {/* フォーム全体を囲むカード */}
      <div className="w-full max-w-md bg-white p-8 rounded-xl shadow-lg border border-gray-200">
        
        <h1 className="text-2xl font-bold text-gray-800 mb-6 text-center">
          お問い合わせ
        </h1>

        <div className="space-y-4">
          
          {/* お名前 */}
          <div>
            <label className="block text-sm font-medium text-gray-700 mb-1">お名前</label>
            <input 
              type="text" 
              className="w-full p-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-gray-400 outline-none"
              placeholder="山田 太郎"
            />
          </div>

          {/* メールアドレス */}
          <div>
            <label className="block text-sm font-medium text-gray-700 mb-1">メールアドレス</label>
            <input 
              type="email" 
              className="w-full p-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-gray-400 outline-none"
              placeholder="example@mail.com"
            />
          </div>

          {/* 内容 */}
          <div>
            <label className="block text-sm font-medium text-gray-700 mb-1">お問い合わせ内容</label>
            <textarea 
              className="w-full p-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-gray-400 outline-none h-32"
              placeholder="ここに内容を入力してください"
            ></textarea>
          </div>

          {/* 送信ボタン:ここだけshadcn/uiのButtonコンポーネントを使用 */}
          <Button className="w-full font-bold py-6">
            送信する
          </Button>

        </div>
      </div>
    </main>
  );
}

保存してブラウザ(http://localhost:3000)を見てください。
マウスを乗せると色が変わり、クリックすると波紋が広がるボタンが表示されていれば成功です!

まとめ

今回は、デザインの強力な味方を紹介しました。

  • Tailwind CSS: 色や形を自由に調整できる魔法のシール。
  • shadcn/ui: コピペで使える、使いやすい家具セット。

これらを使えば、デザインに悩む時間をだいぶ削れます。
あるものを組み合わせて、パズル感覚で画面を作っていきましょう。

さて、これで「アプリを作る準備」は整いました。
次回は、今回書いたコードが消えてしまわないように、「Git(ギット)」と「GitHub(ギットハブ)」を使って、インターネット上の倉庫に保存する方法を解説します。

-🔰基礎技術