blatui について
BlatUI は Laravel Blade 向けの UI コンポーネントライブラリで、CLI を使ってユーザー自身のプロジェクトにコードをコピーします。Blade、Laravel、Alpine、Tailwind からなる BLAT スタックの開発者を対象とし、WCAG AA に準拠したアクセシビリティを目指しています。
主な機能
- 01CLI でプロジェクトにコンポーネントをコピー
- 02ARIA ロールとキーボード操作に対応
- 03フォーム要素での Livewire wire:model 双方向バインディング
- 04CSS 変数によるテーマ設定とライト・ダークモード
- 05インストール済みコンポーネントのファイル単位の差分比較と更新
活用シーン
- 01Laravel プロジェクトでフォームやカードを素早く構築
- 02Blade と Tailwind でカスタマイズ可能な管理画面を作成
- 03MCP 経由で AI エディターからコンポーネントを検索・インストール
MCP 対応
blatui:mcp コマンドを提供し、stdio 経由で MCP サーバーを起動します。AI エディターからコンポーネントの検索とインストールが可能になります。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://blatui.remix-it.com/mcpclaude mcp add --transport http anousss007-blatui https://blatui.remix-it.com/mcp{"mcpServers":{"anousss007-blatui":{"type":"http","url":"https://blatui.remix-it.com/mcp"}}}Cursor で開く{"servers":{"anousss007-blatui":{"type":"http","url":"https://blatui.remix-it.com/mcp"}}}VS Code で開く{"mcpServers":{"anousss007-blatui":{"type":"http","url":"https://blatui.remix-it.com/mcp"}}}{"mcpServers":{"anousss007-blatui":{"serverUrl":"https://blatui.remix-it.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
5| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| category | string | いいえ |
詳細
BlatUI
BLAT スタック向けの shadcn/ui — Blade · Laravel · Alpine · Tailwind
オープンソースのコピペ可能な UI コンポーネントをご自身のものとして Laravel プロジェクトに直接コピーする CLI です。
155 個のコンポーネント · 614 個のバリエーション · 64 個のブロック · 70 個のチャート · アクセシブル(WCAG AA) · Livewire 対応 · 完全なテーマ設定が可能 · ライト+ダーク · MIT
🧩 これは BlatUI のモノレポです。 Composer パッケージはリポジトリのルート(
src/+stubs/)にあります。 — Packagist はそこを直接読み込むため、composer require anousss007/blatuiはそのまま使え、apps/は dist tarball から除外されます。コンポーネントはapps/demo/で作成され、stubs/に生成されます。コンポーネントを編集する前に、コントリビューションをご覧ください。
BlatUI を選ぶ理由
- デフォルトでアクセシブルです。 WAI-ARIA のロール、完全なキーボードナビゲーションとフォーカス管理、WCAG AA の色コントラストを備えています。shadcn/ui の Base UI の動作を参考にし、実際のブラウザーで検証し、axe-core で監査しています。アクセシビリティは追加機能ではなく、すべてのコンポーネントに組み込まれています。
- コードはご自身のものです。 コンポーネントは
vendor/に隠されるのではなく、プロジェクトにコピーされます。自由に編集でき、パッケージを更新しても編集内容が上書きされることはありません。 - BLAT スタックです。 純粋な Blade コンポーネントに、インタラクティブ機能のための Alpine.js を少し加え、スタイリングには Tailwind CSS v4 を使用します。React は不要で、ビルド工程に縛られることもありません。
- Livewire 対応です。 すべてのフォームコントロール(入力欄、セレクト、チェックボックス、スイッチ、スライダー、日付/時刻ピッカー、ファイルアップロードなど)で
wire:modelが機能し、完全な双方向バインディングを利用できます。Flux Pro に代わる、無料でコードをご自身のものにできる選択肢です。Livewire ガイドを見る → - shadcn/ui に忠実です。 同じデザイン言語、コンポーネント API、ブロックを Laravel 流に移植しています。
- 徹底したテーマ設定が可能です。 すべてのトークンが CSS 変数です。
要件
- PHP 8.2+ · Laravel 11、12 または 13
- Tailwind CSS v4 · Alpine.js 3 · Node 18+
インストール
# 1. Install the CLI
composer require anousss007/blatui
# 2. Peer packages used by the components
composer require gehrisandro/tailwind-merge-laravel mallardduck/blade-lucide-icons
npm install -D alpinejs @alpinejs/anchor @floating-ui/dom @alpinejs/collapse @alpinejs/focus
# 3. Publish the foundations (theme tokens + Alpine/chart/calendar engine)
php artisan vendor:publish --tag=blatui-foundations
# → resources/css/blatui.css (oklch design tokens, presets, light/dark)
# → resources/js/blatui.js (greenfield bootstrap — boots Alpine for you)
# → resources/js/blatui-core.js (engine: registerBlatUI, for apps already running Alpine)
# 4. Verify your setup
php artisan blatui:init
公開された基盤ファイルを 2 つの Vite エントリーポイントに指定します。各ファイルの内容を置き換えてください。
/* resources/css/app.css */
@import "./blatui.css";
// resources/js/app.js
import "./blatui.js";
blatui.cssには Tailwind、デザイントークン、@themeマッピングが含まれます。blatui.jsは Alpine とそのプラグインを起動し、ApexCharts を遅延読み込みします。blatui:initを実行すると、すべて(パッケージ、トークン、インポート)が正しく設定されているか確認できます。
基盤ファイルは一度公開すれば、あとはご自身のものです。トークンを調整したり、チャートが不要なら チャートエンジンを削除したりできます。まだ不足しているものは
blatui:initが知らせてくれます。
既存のプロジェクトへのインストール
すべて追加のみです。ファイルを置き換える必要はありません。
- Tailwind v4 が必須です。 BlatUI は v4 専用の機能(
@theme inline、oklch)を使用します。Tailwind v3 をお使いの場合は、まずnpx @tailwindcss/upgradeで移行してください。blatui:initがバージョンを検出します。 - CSS: 既存の
app.cssで、@import "tailwindcss";の下に@import "./blatui.css";を追加します。 - JS — すでに Alpine を使用していますか?
blatui.jsはインポートしないでください(Alpine が二重に起動します)。代わりに、起動する前にご自身のインスタンスへ BlatUI を登録します。
import Alpine from 'alpinejs'
import { registerBlatUI } from './blatui-core.js'
registerBlatUI(Alpine) // plugins + theme store + chart/calendar engines
window.Alpine = Alpine
Alpine.start()
- JS — Livewire または Flux を使用していますか? Livewire は Alpine をバンドルして起動するため、
npm install alpinejsは実行しないでください(Alpine が二重になる原因になります)。また、blatui.jsもインポートしないでください。プラグインのみをインストールし(グラフを使用する場合に限りapexchartsも追加します)、alpine:initフックを使って Livewire の Alpine に BlatUI を登録します。
import { registerBlatUI } from './blatui-core.js'
document.addEventListener('alpine:init', () => {
registerBlatUI(window.Alpine)
})
BlatUI はダークモード用の theme ストアを登録します。Flux がすでにダークモードを制御している場合は、両方が .dark を切り替えないように、registerBlatUI(window.Alpine, { darkMode: false }) を渡してください。
コンポーネントの追加
# Add one or more — dependencies are resolved automatically
php artisan blatui:add button card input
# See everything you can add — components, blocks & charts
php artisan blatui:list
# Details for a single component
php artisan blatui:list select
# Everything at once
php artisan blatui:add --all
コンポーネントは resources/views/components/ui/ に Blade タグとして配置されます。
<x-ui.card class="max-w-sm">
<x-ui.card-header>
<x-ui.card-title>Welcome back</x-ui.card-title>
<x-ui.card-description>Sign in to continue.</x-ui.card-description>
</x-ui.card-header>
<x-ui.card-content class="space-y-3">
<x-ui.input type="email" placeholder="[email protected]" />
<x-ui.button class="w-full">Sign in</x-ui.button>
</x-ui.card-content>
</x-ui.card>
blatui:add は、コンポーネントに必要な追加の composer/npm パッケージを表示します(例:グラフでは apexcharts が必要です)。
コンポーネントを最新の状態に保つ
コピーしたファイルはご自身で管理するため、アップグレードが自動で行われることはありません。blatui:update で変更点を確認し、ファイルごとに更新するかどうかを決められます。
# What would change across everything you have installed?
php artisan blatui:update --dry-run --diff
# Update, confirming each file that differs from the version we ship
php artisan blatui:update
# Just these families, no questions asked (your version is kept as .bak)
php artisan blatui:update button card --force
ファイルに差分がある場合、それはカスタマイズしたファイルか、古くなったコピーのいずれかです。ディスク上の情報だけでは区別できないため、BlatUI は差分を表示して確認を求めずにファイルを上書きすることはありません。--force を指定しても、置き換えるファイルの隣に .bak が作成されます(--no-backup で無効にできます)。新しいリリースでファミリーに追加されたファイルは、そのまま追加されます。
resources/views に対して Pint や Prettier を実行していますか? フォーマッターがコピーしたすべてのコンポーネントのレイアウトを書き換えるため、すべてのファイルが変更されたものとして表示されます。これらは内容は同じで、再フォーマット済みとして別に集計され、--ignore-whitespace を指定すると除外されます。
php artisan blatui:update --dry-run --ignore-whitespace
CSS/JS の基盤はコピーではなく公開されるため、vendor:publish --tag=blatui-foundations --force で再同期します。エンジンが古くなっている場合は、blatui:init が通知します。
ブロックとグラフ
ブロック(ダッシュボード、サイドバー、ログインページなど)と70種類のグラフは、デモサイトからコピー&ペーストして使用します。フルページの構成であり、プリミティブではないため、インストールするのではなく、必要なソースをそのまま取得してください。
コマンド
| コマンド | 説明 |
|---|---|
blatui:init | Doctor — パッケージ、Tailwind v4、テーマトークン、Alpine/エンジンの連携を確認します |
blatui:list [component] | すべてのコンポーネントファミリーを一覧表示するか、1つの詳細を表示します |
blatui:add <components...> | コンポーネント(と依存関係)をプロジェクトにコピーします |
blatui:update [components...] | インストール済みコンポーネントとこのバージョンとの差分を表示し、更新します(--dry-run、--diff、--force、--ignore-whitespace) |
blatui:doctor [path] | Blade をスキャンし、既知の落とし穴(フォーム内の型指定がないボタン、閉じタグの漏れ)を検出します |
blatui:mcp | AI エディターがコンポーネントを検索・インストールできるよう、MCP サーバーを起動します(stdio) |
vendor:publish --tag=blatui-foundations | テーマ CSS と JS エンジンを公開します |
コントリビューション
BlatUI はモノレポです。リポジトリ、PR、CI はそれぞれ1つです。Composer パッケージはリポジトリのルートにあり、デモ/ドキュメントサイトとスターターキットは隣接するアプリです(.gitattributes により公開パッケージから除外されます)。
composer.json src/ stubs/ → the published package (this is what `composer require` gets)
apps/demo/ → authors AND renders every component; the live docs site
apps/starter/ → the Laravel starter kit
scripts/build-package.sh → regenerates stubs/ from apps/demo (CI enforces it)
コンポーネントは apps/demo/resources/views/components/ui/ で作成します(ここだけでレンダリングされるため、これが信頼できる唯一のソースです)。stubs/ は生成物なので、手動で編集しないでください。コンポーネントを変更したら、bash scripts/build-package.sh を実行し、両方をコミットしてください。差異があると CI は失敗します。詳しくは、CONTRIBUTING.md をご覧ください。
クレジット
BlatUI は、shadcn/ui を Laravel/Blade エコシステムに移植したものです。shadcn と貢献者の皆さんに感謝します。 アイコンは Lucide、チャートは ApexCharts を使用しています。
ライセンス
MIT — 個人利用および商用利用は無料です。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。