> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# ディレクトリ構造

> Laravelプロジェクトの主要なディレクトリとファイルの役割を解説します。

## はじめに

Laravelのデフォルトのアプリケーション構造は、大規模・小規模どちらのアプリケーションにも適した出発点を提供します。
ただし、アプリケーションをどのように構成するかは自由です。
Laravelはクラスの配置場所にほとんど制限を設けていません。Composerがクラスをオートロードできさえすれば問題ありません。

## ルートディレクトリ

新しいLaravelプロジェクトを作成すると、以下のようなディレクトリ構造が生成されます。

```
example-app/
├── app/
├── bootstrap/
├── config/
├── database/
├── public/
├── resources/
├── routes/
├── storage/
├── tests/
├── vendor/
├── .env
├── artisan
└── composer.json
```

### `app/` ディレクトリ

アプリケーションのコアコードを格納するディレクトリです。
コントローラー・モデル・ミドルウェアなど、アプリケーションのほぼすべてのクラスがここに置かれます。

デフォルトでは `Http`・`Models`・`Providers` サブディレクトリが含まれています。
Artisanコマンドでクラスを生成すると、他のサブディレクトリも自動的に作成されます。

### `bootstrap/` ディレクトリ

フレームワークを起動する `app.php` ファイルを含みます。
また、ルートキャッシュやサービスキャッシュなどのパフォーマンス最適化ファイルを格納する `cache/` ディレクトリも含まれます。

### `config/` ディレクトリ

アプリケーションのすべての設定ファイルを格納します。
これらのファイルを読んで、利用可能なオプションを把握しておくことを推奨します。

### `database/` ディレクトリ

データベースのマイグレーション・モデルファクトリー・シーダーを格納します。
SQLiteデータベースファイルもここに配置できます。

### `public/` ディレクトリ

アプリケーションへのすべてのリクエストのエントリーポイントである `index.php` を含みます。
また、画像・JavaScript・CSSなどのアセットもここに格納されます。

<Warning>
  WebサーバーのドキュメントルートはLaravelプロジェクトの `public/` ディレクトリに設定してください。
  プロジェクトルートやサブディレクトリを直接公開しようとすると、機密ファイルが露出するリスクがあります。
</Warning>

### `resources/` ディレクトリ

[ビュー](/jp/views)と、コンパイル前のCSSやJavaScriptなどの生アセットを格納します。

### `routes/` ディレクトリ

アプリケーションのすべてのルート定義を格納します。
デフォルトでは `web.php` と `console.php` の2つのルートファイルが含まれます。

| ファイル           | 用途                                                            |
| -------------- | ------------------------------------------------------------- |
| `web.php`      | ブラウザ向けのルート。セッション・CSRF保護・クッキー暗号化を提供する `web` ミドルウェアグループが適用されます。 |
| `console.php`  | Artisanコマンドをクロージャで定義するファイルです。                                 |
| `api.php`      | ステートレスなAPIルート。`install:api` コマンドで追加します。                       |
| `channels.php` | イベントブロードキャストチャンネルを登録するファイルです。                                 |

### `storage/` ディレクトリ

ログ・コンパイル済みBladeテンプレート・ファイルベースのセッション・ファイルキャッシュなど、フレームワークが生成したファイルを格納します。
`app/`・`framework/`・`logs/` の3つのサブディレクトリに分かれています。

### `tests/` ディレクトリ

自動化されたテストを格納します。
[Pest](https://pestphp.com)または[PHPUnit](https://phpunit.de/)によるユニットテストと機能テストのサンプルが最初から含まれています。

### `vendor/` ディレクトリ

[Composer](https://getcomposer.org)の依存関係を格納します。このディレクトリはソースコントロールにコミットしないでください。

## `app/` ディレクトリの詳細

`app` ディレクトリの多くのクラスはArtisanコマンドで生成できます。
利用可能なコマンドを確認するには、次を実行してください。

```shell theme={null}
php artisan list make
```

<AccordionGroup>
  <Accordion title="Http/ ディレクトリ">
    コントローラー・ミドルウェア・フォームリクエストを格納します。
    アプリケーションへのリクエスト処理ロジックのほぼすべてがここに置かれます。
  </Accordion>

  <Accordion title="Models/ ディレクトリ">
    [Eloquentモデル](/jp/eloquent)クラスをすべて格納します。
    各データベーステーブルに対応する「モデル」が存在し、データの照会や挿入に使います。
  </Accordion>

  <Accordion title="Providers/ ディレクトリ">
    アプリケーションのすべての[サービスプロバイダー](/jp/service-providers)を格納します。
    サービスプロバイダーはサービスをコンテナにバインドし、イベントを登録するなど、アプリケーションを起動するための処理を行います。
  </Accordion>

  <Accordion title="Console/ ディレクトリ">
    カスタムArtisanコマンドをすべて格納します。
    `make:command` コマンドで生成できます。
  </Accordion>

  <Accordion title="Exceptions/ ディレクトリ">
    アプリケーションのカスタム例外をすべて格納します。
    `make:exception` コマンドで生成できます。
  </Accordion>
</AccordionGroup>

## 重要なファイル

### `.env` ファイル

環境ごとに異なる設定値（データベース接続情報・APIキーなど）を管理します。
`config/` 内の設定ファイルから `env()` ヘルパーを通して参照されます。

```ini theme={null}
APP_NAME=Laravel
APP_ENV=local
APP_DEBUG=true
APP_URL=http://localhost

DB_CONNECTION=sqlite
```

### `artisan` ファイル

Artisanコマンドラインインターフェースのエントリーポイントです。
`php artisan <コマンド名>` の形式で実行します。

## 次のステップ

<Card title="ルーティング" icon="route" href="/jp/routing">
  ルートの定義方法とURLとアプリケーションロジックの紐付けを学びます。
</Card>
