Tech Starlog

Bladeコンポーネントの使い方(Laravel)

投稿日:2026/01/15

LaravelのView(Blade)では、画面の部品を Bladeコンポーネント として切り出すことができます。 ボタン・フォーム・カードなどのUI部品を再利用可能な単位で管理できるため、Viewの可読性と保守性が大きく向上します。

本記事では、Bladeコンポーネントの基本的な使い方について、次の内容を解説します。

  • Bladeコンポーネントとは何か
  • コンポーネントの作成方法
  • 値(props)の受け渡し方法
  • レイアウトとの使い分け
  • 利用シーン

Bladeコンポーネントとは?

Bladeコンポーネントとは、Viewの一部を部品化して再利用できる仕組みです。

たとえば、次のようなUIは複数画面で共通化されがちです。

  • ボタン
  • 入力フォーム
  • エラーメッセージ表示
  • カードレイアウト
  • モーダル

これらをBladeファイルとして切り出し、
というタグ形式で呼び出せるようにしたものがコンポーネントです。


コンポーネントの作成方法

artisanコマンドで作成する

以下のコマンドでコンポーネントを作成します。

php artisan make:component PrimaryButton

作成されるファイルは次の2つです。

app/View/Components/PrimaryButton.php
resources/views/components/primary-button.blade.php
  • PHPクラス:ロジック・props定義
  • Bladeファイル:HTMLテンプレート

※ 表示だけで完結する場合は、Bladeファイルのみ使用しても問題ありません。


コンポーネントの中身を作る

Bladeファイルを編集する

🔽 resources/views/components/primary-button.blade.php

<button class="px-4 py-2 bg-blue-600 text-white rounded">
    {{ $slot }}
</button>

$slot には、コンポーネントタグで囲んだ中身が入ります。


コンポーネントを呼び出す

任意のViewから、次のように使用できます。

<x-primary-button>
    保存する
</x-primary-button>

この記述は、HTML上では buttonタグとして展開されます。


props(値)を渡す

propsを受け取る

Blade側で @props を使って値を受け取ります。

@props([
    'type' => 'button',
])

<button type="{{ $type }}" class="px-4 py-2 bg-blue-600 text-white rounded">
    {{ $slot }}
</button>

呼び出し側から値を渡す

<x-primary-button type="submit">
    登録する
</x-primary-button>

動的な値を渡す場合は : を付けます。

<x-primary-button :type="$buttonType">
    送信
</x-primary-button>

属性(class・idなど)を透過的に渡す

コンポーネント側で $attributes を使うと、
呼び出し元から指定されたHTML属性をそのまま引き継げます。

<button {{ $attributes->merge(['class' => 'px-4 py-2 rounded']) }}>
    {{ $slot }}
</button>

呼び出し側:

<x-primary-button class="bg-red-500">
    削除
</x-primary-button>

classは自動的にマージされます。


レイアウトとコンポーネントの使い分け

用途 使うもの
ページ全体の枠組み レイアウト(@extends)
ボタン・フォームなどの部品 Bladeコンポーネント
繰り返し使う小さなUI Bladeコンポーネント

「ページ構造」「部品」 かで使い分けるのが基本です。


よくある利用シーン

  • 共通ボタン(保存・削除など)
  • 入力フォーム部品
  • エラー表示コンポーネント
  • タグ・バッジ表示
  • モーダルダイアログ

BreezeやJetstreamのViewを見ると、
多くのコンポーネントが使われていることが確認できます。


Bladeコンポーネントでやってはいけないこと

  • DBアクセスを書く
  • Serviceを呼び出す
  • 重いビジネスロジックを書く

コンポーネントは 「表示ロジック」に限定する のが原則です。


まとめ

  • BladeコンポーネントはViewの部品化・再利用の仕組み
  • タグで直感的に使える
  • props・slot・attributesで柔軟にカスタマイズできる
  • Viewの肥大化防止に非常に効果的