【Laravel】ディレクトリ構造の理解。どれが使うディレクトリ？各ディレクトリの意味。

Laravelでプロジェクトを作成すると自動で複数のディレクトリ　とファイルが作成される。

いじる必要のないディレクトリを知るなど理解を深める。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/7d128ea2-f7b0-5b79-d0b5-14dc674c78a8.png)

##よく触るディレクトリ

- app　　   （コントローラーがある）
- config 　　(環境設定)
- database 　(マイグレーションファイル)
- public 　　(画像やファビコンなど)
- resources　(ビュー）
- routes　　（ルーティング）



<br>
##あまり触らないディレクトリ

- bootstrap　（フレームワークの自動処理）　
- storage　　（コンパイル後のファイル）
- tests　　　（テスト用）
- vender　　（composerの依存ファイル）

最初から存在するか、コマンドやコンパイルで自動生成されるファイルが入る。




<br>
##appディレクトリ
artisanコマンドによって生成されたディレクトリが配置される。

ほぼすべてのクラスがこの中にある。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/c3ec7919-c7bf-3313-6c28-46792a3ebd11.png)

・`make` artisanコマンドを実行するとファイルがここに作成される。（`make:job`でjobクラスが生成される）


・`Console`ディレクトリ
`make:command`で作成した、カスタムのartisanコマンドが保存される。

・`Exceptions`ディレクトリ
例外処理を記述したファイルを保存する。

例外処理のログやレンダリングを変更する場合は、Handlerクラスを変更する。


・`Http`ディレクトリ
コントローラー、ミドルウェア、リクエストが保存される。


・`Providers`ディレクトリ
リクエストに対する対応方法を記載したファイルが保存されている。

デフォルトで必要なファイルが保存されている。必要に応じて追加可能。


・`Models`ディレクトリ
データベースを操作するためのeloquent modelクラスが保存されている。

DBの各テーブルに対応するモデルがあり、クエリを投げてDB操作ができるようになる。



・`Broadcasting`ディレクトリ
`make:channel`コマンドで生成したクラスが保存される。
デフォルトでは存在せず、コマンド実行時に生成される。

・`Events`ディレクトリ
`event:generated`や`make:event`コマンドで生成したイベントクラスが保存される。
デフォルトでは存在せず、コマンド実行時に生成される。


・`Mail`ディレクトリ
`make:mail`コマンドで生成したクラスが保存される。
デフォルトでは存在せず、コマンド実行時に生成される。

Mailオブジェクトには、`Mail::send`メソッドで実行するロジックが保存されている。




<br>
##bootstrapディレクトリ
基本触らないディレクトリ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/2e115744-d5fe-7129-bac9-514aa52c7b8b.png)

`app.php`はフレームワークの自動処理を行うためのファイル。
また、ページ表示の最適化のための`cache`もここに保存される。




<br>
##configディレクトリ
すべての環境設定ファイルがあるディレクトリ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/30b6b2ab-b979-ba6e-0220-e6f6ee087b4a.png)

**▼例：database.php**
DBに何を使うかを指定できる。



<br>
##databaseディレクトリ
DBを構築するための、マイグレーションファイルなどが設置される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/bf0e1f48-52a6-5ce8-50d1-07ba5b72fb22.png)

DBにSQLiteを使う場合は、DBとしても使える。



<br>
##Publicディレクトリ
ここの`index.php`はすべてのリクエストのエントリーポイントとなる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/a13413d1-7508-fe59-83e7-e71a149504dc.png)

また、クローラに指示を出す`robots.txt`や、ファビコンもこのディレクトリにある。

イメージもこのPublicディレクトリ内に保存する。（フォルダ名はimgやimagesが一般的）


<br>
##Resourcesディレクトリ
公開用のビュー（.blade.php）やリソースがあるファイル。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/03ac1945-083b-2f29-22bb-65374c370e40.png)

言語ファイルやcss, jsなどのコンパイル前のリソースもここに入る。



<br>
##Routesディレクトリ
ルートを定義したファイルが保存されている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/0882f8f2-55c4-328d-a0a1-492c826f0546.png)

・`web.php`
基本的にほぼすべてのルーティングをここに記載する。

>セッション情報を保存しない、statelessやRESTfull APIの場合は除く。





<br>
##Storageディレクトリ
コンパイル後のブレードテンプレート、
ログやセッション関連ファイル、キャッシュファイルなどが保存される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/2518b93a-e735-b5d1-2806-e907c917c77c.png)

・`appディレクトリ`
アプリによって生成されたファイルなどが保存される。

・`framework`
キャッシュなどが保存される。

・`logs`
ログファイルが保存される。


<br>
##testsディレクトリ
テスト用のファイルが保存されている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/1f3847b7-984f-1f6c-3a12-82e1326c8c59.png)

`php artisan test`でテストを実行できる。



<br>
##vendorディレクトリ
composerの依存ファイルが保存されている。
基本いじらない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/5c57efc7-0845-bc53-02ff-5cab5dd5d7f6.png)