家計簿アプリを作る #10:Tailwind CSS v4 + Flowbite でUI スタイリング

家計簿アプリ作成シリーズの第10回です。今回は Tailwind CSS v4 と Flowbite Svelte を導入して UI をスタイリングします。

Flowbite を選んだ理由

Tailwind CSS でスタイリングする際、公式の UI コンポーネントサンプルとして Tailwind CSS Plus があります。ただし有料のため、無料で使えるコンポーネントライブラリを探した結果 Flowbite を選択しました。Flowbite は仕事でも使っているので使い慣れているというのも理由のひとつです。

UI スタイリングで感じたこと

UI の見た目はこだわり始めると延々と時間を使ってしまいます。「どこで止めるか」の判断が難しく、今回は機能実装の妨げにならない程度のスタイリングにとどめることにしました。

Tailwind CSS v4 + Flowbite Svelte のセットアップ

Step 1:Tailwind CSS のインストール

npx sv add tailwindcss

インストールされるバージョンは Tailwind CSS v4 です。

npm ls tailwindcss
# tailwindcss@4.3.0

Step 2:Flowbite Svelte のインストール

npm install flowbite flowbite-svelte

Step 3:app.css の設定

src/app.css に以下を追加します。

@import "tailwindcss";
@import "flowbite/src/themes/default.css";
@plugin "flowbite/plugin";
@source "../node_modules/flowbite-svelte/**/*.{html,js,svelte,ts}";

各行の役割:

役割
@import "tailwindcss" Tailwind CSS v4 の読み込み
@import "flowbite/src/themes/default.css" Flowbite のデザイントークン定義
@plugin "flowbite/plugin" Flowbite の Tailwind プラグイン
@source "..." Flowbite Svelte コンポーネントのクラスをスキャン対象に追加

ハマりポイント①:Tailwind v4 は tailwind.config.js を使わない

Tailwind v3 では tailwind.config.js でコンテンツのスキャン対象やプラグインを設定していましたが、Tailwind v4 では tailwind.config.js は不要です。すべて app.css 内の CSS ベースの設定で行います。

v3 の書き方(使わない):

// tailwind.config.js(v3 の方法)
module.exports = {
  content: ['./src/**/*.{html,js,svelte,ts}'],
  plugins: [require('flowbite/plugin')]
}

v4 の書き方(app.css で設定):

@import "tailwindcss";
@plugin "flowbite/plugin";
@source "../node_modules/flowbite-svelte/**/*.{html,js,svelte,ts}";

ハマりポイント②:Flowbite のデザイントークンが適用されない

Flowbite Svelte v1 のコンポーネントやサンプルコードでは、text-headingbg-brandbg-neutral-secondary-medium など、標準の Tailwind にはないクラスが使われています。

これらは Flowbite 独自のデザイントークンで、flowbite/src/themes/default.css で CSS 変数として定義されています。このファイルを @import しないとスタイルが一切適用されず、素の HTML のような見た目になってしまいます。

/* これが必要 */
@import "flowbite/src/themes/default.css";

ハマりポイント③:@source のパスの typo

app.css@source に誤ったパスを書いてしまい、Flowbite Svelte のクラスが Tailwind のスキャン対象にならないことがありました。

/* ❌ 誤り */
@source "app.html../node_modules/flowbite-svelte/**/*.{html,js,svelte,ts}";

/* ✅ 正しい */
@source "../node_modules/flowbite-svelte/**/*.{html,js,svelte,ts}";

Flexbox コンテナ内での幅の扱い

Flowbite のサンプルコードをそのまま貼り付けると、flex flex-col の中で入力フィールドが縮んで見えることがあります。

<div class="flex flex-col px-6 py-12">
  <form class="max-w-sm mx-auto">  <!-- ❌ w-full がないと縮む -->

Flexbox の子要素はデフォルトでコンテンツ幅に縮むため、w-full を追加する必要があります。

<form class="max-w-sm mx-auto w-full">  <!-- ✅ -->

まとめ

ポイント 内容
Tailwind v4 の設定 tailwind.config.js は不要。app.css@import@plugin@source を使う
Flowbite デザイントークン @import "flowbite/src/themes/default.css" が必要
@source のパス ../node_modules/flowbite-svelte/... と正確に記述する
Flexbox 内の幅 max-w-sm mx-auto に加えて w-full を指定する

次回は収支の集計・グラフ表示を実装します。

← トップページに戻る