FilamentPHPとは——LaravelにAdminパネルを追加する
FilamentPHPとは
FilamentPHPは、Laravelアプリケーションに管理パネル(Admin Panel)を素早く追加するためのフルスタックフレームワークです。Laravel・Livewire・Alpine.js・Tailwind CSSをベースに構築されており、コードを書くだけでCRUD画面・ダッシュボード・フォームが自動生成されます。
従来、管理画面を作るには「コントローラー・ビュー・ルート」をすべて手書きする必要がありました。FilamentPHPを使えば、その手間を大幅に削減できます。
Filamentが解決する問題
| 課題 | Filamentの解決策 |
|---|---|
| CRUD画面を毎回手書きする | make:filament-resource で自動生成 |
| フォームバリデーションUIが煩雑 | フォームフィールドにバリデーションを宣言的に追加 |
| テーブルに検索・ソートを実装するのが大変 | ->searchable() / ->sortable() を1行で追加 |
| ダッシュボードのKPIウィジェット | make:filament-widget で生成 |
バージョン情報
このシリーズでは Filament v5 を使用します。v5はLaravel 11以降に対応しており、PHP 8.2以上が必要です。
Filament v5.x
├── Laravel 11.x / 12.x
├── PHP 8.2以上
├── Livewire v4
└── Alpine.js v3
インストール手順
前提条件
Laravelプロジェクトが用意されていることを確認します。
# 新規プロジェクト作成の場合
composer create-project laravel/laravel my-admin-app
cd my-admin-app
データベースの設定を .env に記述しておきます。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=my_admin_app
DB_USERNAME=root
DB_PASSWORD=secret
マイグレーションを実行してデフォルトのテーブルを作成します。
php artisan migrate
Filamentをインストールする
composer require filament/filament:"^5.0"
インストールが完了したら、パネルプロバイダーを生成します。
php artisan filament:install --panels
このコマンドを実行すると、以下のファイルが生成されます。
app/Providers/Filament/AdminPanelProvider.php
インストール中に「Which panel ID would you like to use?」と聞かれます。デフォルトの admin でそのままEnterを押してください。
管理ユーザーを作成する
管理画面にログインするためのユーザーを作成します。
php artisan make:filament-user
対話形式で名前・メールアドレス・パスワードを入力します。
Name:
> 管理者
Email address:
> admin@example.com
Password:
> ••••••••
Successfully created admin@example.com!
Userモデルへの FilamentUser インターフェース追加
既存のUserモデルが FilamentUser インターフェースを実装していない場合、すべてのユーザーがアクセス可能になります。本番環境では必ず canAccessPanel() を定義しましょう。
<?php
// 📁 app/Models/User.php
namespace App\Models;
use Filament\Models\Contracts\FilamentUser;
use Filament\Panel;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable implements FilamentUser
{
// ...
public function canAccessPanel(Panel $panel): bool
{
// 管理者メールのみアクセスを許可する例
return str_ends_with($this->email, '@example.com');
}
}
/admin でアクセス確認
開発サーバーを起動します。
php artisan serve
ブラウザで http://localhost:8000/admin にアクセスすると、ログイン画面が表示されます。先ほど作成したメールアドレスとパスワードでログインしてください。
ログインに成功すると、シンプルなダッシュボードが表示されます。まだリソースを作成していないため、左サイドバーはほぼ空の状態です。
Panelプロバイダーの仕組み
Filamentの設定は AdminPanelProvider.php に集約されています。
<?php
// 📁 app/Providers/Filament/AdminPanelProvider.php
namespace App\Providers\Filament;
use Filament\Http\Middleware\Authenticate;
use Filament\Http\Middleware\DisableBladeIconComponents;
use Filament\Http\Middleware\DispatchServingFilamentEvent;
use Filament\Pages;
use Filament\Panel;
use Filament\PanelProvider;
use Filament\Support\Colors\Color;
use Filament\Widgets;
use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse;
use Illuminate\Cookie\Middleware\EncryptCookies;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken;
use Illuminate\Routing\Middleware\SubstituteBindings;
use Illuminate\Session\Middleware\AuthenticateSession;
use Illuminate\Session\Middleware\StartSession;
use Illuminate\View\Middleware\ShareErrorsFromSession;
class AdminPanelProvider extends PanelProvider
{
public function panel(Panel $panel): Panel
{
return $panel
->default()
->id('admin') // パネルのID(URLに使用)
->path('admin') // アクセスURL: /admin
->colors([
'primary' => Color::Amber, // テーマカラー
])
->discoverResources(in: app_path('Filament/Resources'), for: 'App\\Filament\\Resources')
->discoverPages(in: app_path('Filament/Pages'), for: 'App\\Filament\\Pages')
->pages([
Pages\Dashboard::class,
])
->discoverWidgets(in: app_path('Filament/Widgets'), for: 'App\\Filament\\Widgets')
->widgets([
Widgets\AccountWidget::class,
Widgets\FilamentInfoWidget::class,
])
->middleware([
EncryptCookies::class,
AddQueuedCookiesToResponse::class,
StartSession::class,
AuthenticateSession::class,
ShareErrorsFromSession::class,
VerifyCsrfToken::class,
SubstituteBindings::class,
DisableBladeIconComponents::class,
DispatchServingFilamentEvent::class,
])
->authMiddleware([
Authenticate::class, // 認証ミドルウェア
]);
}
}
重要なメソッド
| メソッド | 役割 |
|---|---|
->id('admin') | パネルを識別するID |
->path('admin') | アクセスURLのパス |
->colors([]) | テーマカラーの設定 |
->discoverResources() | Resourceの自動検出ディレクトリ |
->discoverWidgets() | Widgetの自動検出ディレクトリ |
->authMiddleware([]) | 認証に使うミドルウェア |
ディレクトリ構造
Filamentのファイルは app/Filament/ 以下に集約されます。
app/
├── Filament/
│ ├── Resources/ ← CRUDリソースを配置
│ │ └── PostResource/
│ │ ├── PostResource.php
│ │ └── Pages/
│ │ ├── ListPosts.php
│ │ ├── CreatePost.php
│ │ └── EditPost.php
│ ├── Pages/ ← カスタムページを配置
│ │ └── Dashboard.php
│ └── Widgets/ ← ウィジェットを配置
│ └── StatsOverview.php
└── Providers/
└── Filament/
└── AdminPanelProvider.php
まとめ
- FilamentPHPはLaravel向けの管理パネルフレームワークで、v5はLaravel 11/12に対応
composer require filament/filament:"^5.0"でインストールphp artisan filament:install --panelsでパネルプロバイダーを生成php artisan make:filament-userで管理ユーザーを作成http://localhost:8000/adminでアクセス可能- すべての設定は
AdminPanelProvider.phpに集約されている
次回はFilamentの核心機能「リソース」を作成し、一覧・作成・編集画面を完成させます。