#01 FilamentPHP基礎

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の核心機能「リソース」を作成し、一覧・作成・編集画面を完成させます。