【laravel】laravelのディレクトリ構造

# 概要
「laravel new プロジェクト名」または「composer create-project laravel/laravel プロジェクト名」で作成したプロジェクトフォルダの中身を簡単に整理します。
対象となるlaravelのバージョンは6です。
またlaravel6では対応するPHPのバージョンが7.2以降となっています。
※フォルダ名（プロジェクト名）の部分は「laravel」と表記します。

# laravel直下のファイルとフォルダ
プロジェクトを作成すれば自動で生成されるファイルとフォルダです。

## laravel直下のファイル
プロジェクトを作成すれば自動で生成されるファイル。

<table>
<tr>
<th>.editorconfig</th>
<td>エディタに関する汎用設定ファイル</td>
</tr>

<tr>
<th>.env、.env.example</th>
<td>動作環境に関する設定情報</td>
</tr>

<tr>
<th>.gitattributes、.gitignore</th>
<td>git利用に関する情報</td>
</tr>

<tr>
<th>.styleci.yml</th>
<td>StyleCIというコードチェッカー</td>
</tr>

<tr>
<th>artisan</th>
<td>artisanコマンド</td>
</tr>

<tr>
<th>composer.json、package.json</th>
<td>composerの利用に関するもの</td>
</tr>

<tr>
<th>phpunit.xml</th>
<td>PHPUnitに関するもの</td>
</tr>

<tr>
<th>server.php</th>
<td>サーバー起動時に利用されるプログラム</td>
</tr>

<tr>
<th>webpack.mix.js</th>
<td>webpackというJavaScript（npm）パッケージツールで使うもの</td>
</tr>
</table>

## laravel直下のフォルダ
プロジェクトを作成すれば自動で生成されるフォルダ。

<table>
<tr>
<th>app</th>
<td>アプリケーションのコアとなるコードを含むフォルダで、アプリケーション内のほとんどのクラスはこの中に設置されます。<br>
ディレクトリ内の詳細は下記する。
</td>
</tr>

<tr>
<th>bootstrap</th>
<td>フレームワークの初期処理を行うapp.phpファイルを含んでいます。<br>
その中のcacheディレクトリは初期処理のパフォーマンスを最適化するため、フレームワークが生成するルートやサービスのキャッシュファイルが保存されるフォルダです。
</td>
</tr>

<tr>
<th>config</th>
<td>アプリケーションの全設定ファイルが設置されています。
</td>
</tr>

<tr>
<th>database</th>
<td>データベースのマイグレーションとモデルファクトリ、初期値設定（シーディング）を配置します。<br>
また、SQLiteデータベースの設置場所としても利用できます。
</td>
</tr>

<tr>
<th>public</th>
<td>アプリケーションへの全リクエストの入り口となり、オートローディングを設定するindex.phpファイルがあります。<br>
また、画像、JavaScript、CSSなどを配置します。
</td>
</tr>

<tr>
<th>resources</th>
<td>ビューやアセットの元ファイル（LESS、SASS、JavaScript）で構成されています。また、すべての言語ファイルも配置します。</td>
</tr>

<tr>
<th>routes</th>
<td>アプリケーションの全てのルートを定義するディレクトリ。<br>
デフォルトでは web.php api.php console.php channels.php といったルートファイルが用意されています。<br>
ディレクトリ内の詳細は下記する。
</td>
</tr>

<tr>
<th>storage</th>
<td>コンパイルされたBladeテンプレート、セッションファイル、キャッシュファイルなど、フレームワークにより生成されるファイルが保存されます。<br>
このフォルダはapp、framework、logsの3つのディレクトリに分かれています。
</td>
</tr>

<tr>
<th>tests</th>
<td>PHPUnit のような自動テストを配置しています。<br>
各テストクラスはサフィックスとしてTestを付ける必要があります。
テストはphpunitまたは、php vendor/bin/phpunitコマンドにより実行できます。
</td>
</tr>

<tr>
<th>vendor</th>
<td>Composerによる依存パッケージが配置されています。<br>
継承元のクラスを参照したいときはlaravel/framework/src/illuminate以下を辿ると中身を確認できる。
</td>
</tr>
</table>

# appフォルダ
アプリケーションの主要部分が配置されるフォルダ。
このディレクトリはデフォルトで<a herf="https://www.php-fig.org/psr/psr-4/" target="_blank">PSR-4オートローディング規約</a>を使いComposerがオートロードしています。
「php artisan make:」コマンドでディレクトリを指定せずにモデルを生成するとappディレクトリ直下に生成される。

<table>
<tr>
<th>Console</th>
<td>アプリケーションの全カスタムArtisanコマンドで構成します。<br>
これらのコマンドクラスはmake:commandコマンドにより生成されます。<br>
コンソールカーネルもこのディレクトリ内にあり、カスタムArtisanコマンドや、タスクのスケジュールを登録します。
</td>
</tr

<tr>
<th>Exceptions</th>
<td>例外に関する処理を配置するところです。<br>
\Handler.phpを修正すれば例外のログやレンダリングをカスタマイズできる。
</td>
</tr>

<tr>
<th>Http</th>
<td>コントローラ、ミドルウェア、フォームリクエストが設置されています。
webアプリケーションにアクセスしたときのリクエストを処理するほとんどのロジックがこのディレクトリ内に設置されている。
</td>
</tr>

<tr>
<th>Providers</th>
<td>アプリケーションの全サービスプロバイダにより構成しています。<br>
サービスプロバイダは、サービスをコンテナと結合したりイベントの登録やリクエストを処理するために必要な用意をするタスクを実行するなど、アプリケーションの事前準備を行います。
</td>
</tr>

<tr>
<th>User.php</th>
<td>ユーザー認証に関するスクリプトです。</td>
</tr>
</table>

# routesフォルダ
ルーティングに関する情報をまとめているフォルダ。
Webページに公開する情報はweb.phpにルート情報を記述する。

<table>
<tr>
<th>api.php</th>
<td>APIのルーテイングです。例えばユーザー認証などのように、プログラム内から利用するAPIの機能を特定のアドレスに割り当てるのに利用されます。</td>
</tr>

<tr>
<th>channels.php</th>
<td>ブロードキャストチャンネルのためのルーテイングです。</td>
</tr>

<tr>
<th>console.php</th>
<td>コンソールプログラムのためのルーテイングです。</td>
</tr>

<tr>
<th>web.php</th>
<td>一股的なWebページとしてアクセスするためのルーテイングです。</td>
</tr>
</table>

# 参考
<a href="https://readouble.com/laravel/6.x/ja/structure.html"  target="_blank">Laravel 6.* ディレクトリ構造</a>