storage:link — 公開ディスクとstorageフォルダをリンクするコマンド

artisan

php artisan storage:linkpublic/storage というシンボリックリンクを作成し、storage/app/public に格納されたファイルを Web からアクセス可能にします。
開発・本番で同じコマンドを実行できるので、アップロード機能をすぐに動かせます。
※ Windows では管理者権限が必要です。

概要

  • カテゴリ: artisan
  • Laravel 版: 12
  • PHP 版: 8.4
  • 関連項目: public_disk, filesystem, public_folder, storage_path
  • 変更履歴
  • 5.0.0 で導入
  • 8.0 で --force オプションが追加

storage:linkconfig/filesystems.phppublic ディスクと連携し、ファイルアップロードやダウンロードの際に使われます。

シグネチャ

php artisan storage:link [--force]

引数(表)

引数必須既定値説明
--forcebool0false既に public/storage が存在している場合に上書きする

戻り値

意味
voidコマンドは標準出力に結果を出力し、終了コードで成功/失敗を示す

例外 / 副作用

種類内容発生条件対応
エラーThe storage link already exists.リンクが既存で --force 未指定--force で上書き
エラーSymlink failed.パーミッション不足・Windows権限適切な権限を付与、管理者権限で実行
エラーCommand not foundArtisan がインストールされていないcomposer install で再インストール

最小例

php artisan storage:link

実務例

# 既存リンクを上書きして作成
php artisan storage:link --force

# デプロイスクリプト内で実行
./vendor/bin/sail artisan storage:link

実行環境

  • PHP の symlink() が有効である必要があります。
  • Linux / macOS: 権限が許せばそのまま実行。
  • Windows: シンボリックリンクを作るには管理者権限が必要。icacls で権限付与、あるいは mklink /D を手動で実行。
  • CI 環境では --force を付けることで既存リンクの上書きが保証されます。

副作用

  • public/storage にシンボリックリンクを作成するので、ファイルパスが変わる。
  • 既存のリンクやディレクトリがある場合は上書きされます(--force で必ず上書き)。
  • シンボリックリンクが作れないとファイル公開ができません。

終了コード

コード意味
0成功
1失敗(エラー)

スケジューラ例

// app/Console/Kernel.php

protected function schedule(Schedule $schedule): void
{
    $schedule->command('storage:link')
             ->dailyAt('02:00')
             ->withoutOverlapping()
             ->runInBackground();
}

代替手段・比較

手段メリットデメリット推奨ケース
php artisan storage:linkLaravel 標準、設定が一元管理Windows で制限一般的に推奨
ln -s / mklinkOS レベルで柔軟手動で管理スクリプト化が必要
Cloud Storage 直接公開スケーラブル追加設定が必要大規模サービス

テスト例(Pest)

it('creates a storage link', function () {
    $this->artisan('storage:link')
         ->expectsOutput('The storage link has been successfully created.')
         ->assertExitCode(0);

    expect(public_path('storage'))->toBeDirectory();
});

トラブルシュート

症状原因対処
The storage link already exists.既存リンクがある--force オプションで上書き
Symlink failed.パーミッション不足 / Windows権限必要権限を付与、管理者権限で実行
Command not foundArtisan 未インストールcomposer install を実行

参考リンク(リンク名のみ)

  • Laravel 公式ドキュメント: Storage
  • PHP Manual: symlink()
  • Unix/Linux ln コマンドリファレンス

レン (Wren)

こんにちは。レンです。

Laravelのコードの森に住んでいる、小さな案内役です。
ルーティングの枝やクラスの影を歩きながら、コードの流れや仕組みを眺めています。

このサイトでは、Laravelの基本から実装のコツまで、開発で役立つポイントを静かに整理しています。
難しいことを増やすのではなく、コードの見通しが少し良くなるヒントを届けるのが役目です。

「この処理はどこに書くのがいいのか」
「Laravelではどう考えると整理できるのか」

そんな疑問に、小さなメモを残すような気持ちで記事を書いています。

コードを書いている途中で迷ったとき、
このサイトが少し立ち止まって整理できる場所になればうれしいです。

レン (Wren)をフォローする