medialibrary-development について
spatie/laravel-medialibrary を使う Laravel 開発者向けのスキルです。Eloquent モデルへのメディア紐付け、コレクション、変換、取得方法を扱います。
主な機能
- 01メディア対応モデルの設定
- 02ローカル・URL・リクエストから追加
- 03コレクションとストレージディスクの定義
- 04画像変換の設定
- 05メディアと変換 URL の取得
活用シーン
- 01ブログ記事への画像添付
- 02ユーザーモデルのアバターコレクション設定
- 03サムネイルの生成と取得
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ spatie/ laravel-medialibrary --skill medialibrary-developmentインストール後、Claude Code で/medialibrary-developmentを入力して読み込まれたか確認します。
同梱ファイルreferences/medialibrary-guide.md
詳細
メディアライブラリの開発
概要
spatie/laravel-medialibrary を使用して、ファイルを Eloquent モデルに関連付けます。画像・動画の変換、レスポンシブ画像、複数のコレクション、さまざまなストレージディスクに対応しています。
有効化するタイミング
- Laravel でファイルのアップロード、メディアの添付、画像処理を行う場合に有効化します。
- コードで
HasMedia、InteractsWithMedia、Mediaモデル、またはメディアコレクションや変換を参照している場合に有効化します。 - Eloquent モデルに添付されたファイルの追加、取得、変換、管理をユーザーが希望している場合に有効化します。
対象範囲
- 対象:メディアのアップロード、コレクション、変換、レスポンシブ画像、カスタムプロパティ、ファイルの取得、パスや URL の生成。
- 対象外:Eloquent との関連付けを伴わない一般的なファイルストレージ、Laravel 以外のフレームワーク。
ワークフロー
- タスクを特定します(モデルのセットアップ、メディアの追加、変換の定義、ファイルの取得など)。
references/medialibrary-guide.mdを読み、関連するセクションを確認します。- リファレンスのパターンを適用し、コードを最小限に保ち、Laravel 標準の書き方にします。
主な概念
モデルのセットアップ
メディアを扱うすべてのモデルは、HasMedia を実装し、InteractsWithMedia トレイトを使用する必要があります。
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
class BlogPost extends Model implements HasMedia
{
use InteractsWithMedia;
}
メディアの追加
$blogPost->addMedia($file)->toMediaCollection('images');
$blogPost->addMediaFromUrl($url)->toMediaCollection('images');
$blogPost->addMediaFromRequest('file')->toMediaCollection('images');
コレクションの定義
public function registerMediaCollections(): void
{
$this->addMediaCollection('avatar')->singleFile();
$this->addMediaCollection('downloads')->useDisk('s3');
}
変換の定義
use Spatie\MediaLibrary\MediaCollections\Models\Media;
use Spatie\Image\Enums\Fit;
public function registerMediaConversions(?Media $media = null): void
{
$this->addMediaConversion('thumb')
->fit(Fit::Contain, 300, 300)
->nonQueued();
}
メディアの取得
$url = $model->getFirstMediaUrl('images');
$thumbUrl = $model->getFirstMediaUrl('images', 'thumb');
$allMedia = $model->getMedia('images');
推奨事項と禁止事項
推奨事項:
InteractsWithMediaトレイトと併せて、必ずHasMediaインターフェースを実装します。registerMediaConversions()のパラメーターには?Media $media = nullを使用します。- メディアの追加を確定するには
->toMediaCollection()を呼び出します。 - 同期的に実行する変換には
->nonQueued()を使用します。 - ファイルを 1 つだけ保持するコレクションには
->singleFile()を使用します。 - fit メソッドには
Spatie\Image\Enums\Fitの列挙値を使用します。
禁止事項:
- マイグレーションの実行前に、必ず
php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="medialibrary-migrations"を実行してください。 - ディスクの設定に
env()を使用しないでください。config()を使用するか、config/media-library.phpで設定してください。 toMediaCollection()を呼び出さずにaddMedia()を呼び出さないでください。メディアが保存されません。registerMediaConversions()に登録されていない変換名を参照しないでください。
リファレンス
references/medialibrary-guide.md
コメント
Markdown 対応