Traitとは
PHPのTraitは、クラスにメソッドを追加できる仕組みです。通常、PHPではクラスの継承は1つしかできません(単一継承)。しかし、Traitを使うことで、異なるクラスに共通の機能を簡単に再利用できるようになります。
LaravelでのTraitの活用
Laravelでは、Traitを利用することでコードの再利用性を高め、より効率的な開発が可能になります。例えば、モデルやコントローラーで共通の処理をまとめる際によく使用されます。
Traitの基本的な書き方
まずは、簡単なTraitの定義を記載してみます。
<?php
namespace App\Traits;
trait Loggable
{
public function log($message)
{
echo "[LOG]: " . $message . "\n";
}
}
上記、Loggable Traitにはlogメソッドがあり、引数のメッセージをログとして出力する機能を持っています。
Traitの使い方
Traitを使用するには、下記のようにuseキーワードを使ってクラスに組み込みます。
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use App\Traits\Loggable;
class Post extends Model
{
use Loggable;
}
この Post クラスは Loggable Trait を使っているため、log メソッドを利用できます。
$post = new Post();
$post->log(“記事が作成されました!”);
Traitでプロパティを定義する
Trait内でプロパティを定義することもできます。
<?php
namespace App\Traits;
trait HasStatus
{
public $status = 'draft';
public function setStatus($status)
{
$this->status = $status;
}
}
このTraitを利用すれば、クラスに status プロパティを簡単に追加できます。
class Article
{
use HasStatus;
}
$article = new Article();
echo $article->status; // draft
$article->setStatus('published');
echo $article->status; // published
Traitのメソッドを上書きする
Traitで定義したメソッドは、クラス内で上書きすることができます。
trait Greetable
{
public function greet()
{
return "こんにちは!";
}
}
class User
{
use Greetable;
public function greet()
{
return "Hello!";
}
}
$user = new User();
echo $user->greet(); // Hello!
クラス内で同じメソッドを定義すると、Traitのメソッドよりも優先されます。
Traitの活用例(Laravelのモデル)
実際にLaravelのモデルでTraitを活用する例を紹介します。
例えば、すべてのモデルに uuid を自動生成する機能を追加したい場合、以下のようにTraitを作成できます。
<?php
namespace App\Traits;
use Illuminate\Support\Str;
trait HasUuid
{
protected static function bootHasUuid()
{
static::creating(function ($model) {
$model->uuid = Str::uuid();
});
}
}
このTraitを User モデルに適用すると、uuid が自動で生成されます。
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use App\Traits\HasUuid;
class User extends Model
{
use HasUuid;
protected $fillable = ['name', 'email', 'password', 'uuid'];
}
まとめ
- Traitはクラスに共通の機能を追加できる便利な仕組み。
- Laravelでは、モデルやコントローラーの共通処理をまとめる際によく使用される。
- use キーワードでクラスに組み込むだけで簡単に活用できる。
- Trait内でプロパティを定義したり、メソッドを上書きしたりも可能。
Laravel開発でTraitを活用すると、コードの重複を減らし、メンテナンスしやすい設計ができます。ぜひ試してみてください!
参考サイト

PHP: トレイト - Manual
PHP is a popular general-purpose scripting language that powers everything from your blog to the most popular websites in the world.