- カテゴリ: helper
- 掲載バージョン: Laravel 12・PHP 8.4
- 名前空間 / FQCN / コマンド:
app_path(string $path = '') - 関連: base_path / storage_path / config_path / resource_path / public_path
- 変更履歴: なし
要点(TL;DR)
app/の絶対パス(+任意のサブパス)を得るapp_path('Models')- 罠: URLではない/存在確認はしない/書き込み用途は
storage_pathを使う
概要
app_path() は、プロジェクトのアプリケーションコードが置かれる app/ ディレクトリへの絶対パスを返します。引数にサブディレクトリ(例: Models)を渡すと結合したパスを返します。アプリケーションの配置パスをカスタマイズしていても、コンテナ設定に従って正しい場所を返します。
構文 / シグネチャ
string app_path(string $path = '');
- 引数(表)
| 引数 | 型 | 必須 | 既定値 | 説明 |
|---|---|---|---|---|
| $path | string | いいえ | '' | app/ 配下に連結する相対パス(例: 'Models', 'Services/Foo') |
- 戻り値:
string(絶対パス。存在確認は行わない) - 例外/副作用:なし(単純結合。ディレクトリの作成や権限変更はしない)
使用例
最小例
<?php
use Illuminate\Support\Facades\Route;
Route::get('/debug/app-path', function () {
// 例: /var/www/html/app/Models
return app_path('Models');
});
実務例(簡易ジェネレータで DTO クラスを作成)
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Filesystem\Filesystem;
class MakeDto extends Command
{
protected $signature = 'make:dto {name}';
protected $description = 'Create a simple DTO class';
public function handle(Filesystem $fs): int
{
$dir = app_path('DTOs');
if (! is_dir($dir)) {
$fs->makeDirectory($dir, 0755, true);
}
$class = trim($this->argument('name'));
$path = $dir . DIRECTORY_SEPARATOR . "{$class}.php";
$stub = <<<PHP
<?php
namespace App\\DTOs;
final class {$class}
{
public function __construct(
public array \$attributes = [],
) {}
}
PHP;
if ($fs->put($path, $stub) === false) {
$this->error('Failed to write DTO file.');
return self::FAILURE;
}
$this->info("Created: {$path}");
return self::SUCCESS;
}
}
よくある落とし穴・注意
- URLではない:ビューやリンクに使う場合は
asset()/route()を使う。 - 書き込み用途は不向き:実行時生成ファイルは
storage_path()を利用(権限面・運用分離)。 - 存在保証なし:返るのは文字列のみ。
is_dir()/file_exists()を必要に応じて実施。 - パス変更に追随:
app/を別名/別階層へ移動していても適切に解決。ハードコードしないこと。
代替・関連APIとの比較
base_path():プロジェクトルート。app_path()はその配下のapp/特化。storage_path():書き込み・キャッシュ等の実行時ファイル用。resource_path():resources/配下(ビュー・言語ファイル等)。public_path():公開ディレクトリ。URLにしたい場合はasset()を併用。
選定基準:
コード配置参照=app_path/ルート起点操作=base_path/実行時ファイル=storage_path。
テスト例(Pest)
<?php
it('resolves app directory paths', function () {
expect(app_path())->toBe(base_path('app'));
expect(app_path('Models'))->toBe(base_path('app/Models'));
});
トラブルシュート(エラー別)
| 症状/エラー | 原因 | 対処 |
|---|---|---|
Permission denied で書き込み失敗 | app/ は書き込み前提ではない | storage_path() を使い、権限はストレージ側で設定 |
| ブラウザで 404/アクセス不可 | 取得したのはファイルシステムのパス | 画面出力は asset() / route() を利用 |
file_get_contents(): failed to open stream | 指定したサブパスが存在しない | file_exists() で確認し、必要なら作成・配置 |
参考リンク
- Laravel Docs — Helpers: Path Helpers(
app_pathほか): https://laravel.com/docs/12.x/helpers#paths - Laravel Framework(ソース)—
helpers.phpのapp_path実装: https://github.com/laravel/framework/blob/12.x/src/Illuminate/Foundation/helpers.php - Laravel Docs — Filesystem(書き込み先の設計): https://laravel.com/docs/12.x/filesystem

