始めまして!いずれ魔法使いになるkahiroです。
基本的にReaDoubleの記述を引用して、初心者が解るように補足、もしくはリンクを張る感じで軽く解説します!
##目的
今熱いPHPのフレームワーク、Laravel5.3のディレクトリ構造を参考にディレクトリ構造の意味を学ぼうがテーマです!超簡単シリーズを作りたくてテーマに無理があるのは内緒
##対象読者
- 何となくフレームワークを使用していて、appディレクトリしか編集した事ない
私人とか! - ディレクトリ構造を上手く活用できなくて、汚しちゃう
私人とか!
##プロジェクトディレクトリ一覧
- appディレクトリ
appディレクトリは名前の示すとおり、アプリケーションのコアコードを配置します。このフォルダーの詳細は、このあとに説明します。しかし、アプリケーションのほとんど全部のクラスは、このディレクトリの中に設定されることを覚えておいてください。
注釈:サーバサイドがここ!
- bootstrapディレクトリ
bootstrapフォルダーはフレームワークの初期起動やオートローディングの設定を行うファイルを含んでいます。その中のcacheディレクトリは、初期処理のパフォーマンスを最適化するため、フレームワークが生成するルートやサービスのキャッシュファイルが保存されるフォルダーです。
理解を足す補足サイト:http://www.weblio.jp/content/bootstrap
- Configディレクトリ
configディレクトリは名前が示す通り、アプリケーションの全設定ファイルが設置されています。全ファイルに目を通し、設定可能なオプションに慣れ親しんでおくのは良い考えでしょう。
注釈:アプリケーションの環境周りの定数を格納する所って思えばよいです!
- databaseディレクトリ
databaseフォルダーはデータベースのマイグレーションと初期値設定(シーディング)を配置します。ご希望であれば、このファイルをSQLiteデータベースの設置場所としても利用できます。
注釈:DBのbootstrap見たいな所です!DDLとかを格納する所ですね
- publicディレクトリ
publicディレクトリは、アプリケーションへの全リクエストの入り口となるindex.phpファイルを持っています。また、このディレクトリにはアセット(画像、JavaScript、CSSなど)を配置します。
注釈:ドキュメントルートですね!皆ここを通ります!
- resourcesディレクトリ
resourcesディレクトリはビューやアセットの元ファイル(LESS、SASS、JavaScript)で構成されています。また、すべての言語ファイルも配置します。
注釈:フロントサイドがここ!
- routesディレクトリ
routesディレクトリはアプリケーションの全ルート定義により構成されています。デフォルトでは、web.php、api.php、console.phpの3ファイルが含まれています。
Web.phpファイルは、RouteServiceProviderのwebミドルウェアグループに属するルートで構成します。このミドルウェアは、セッションステート、CSRF保護、クッキーの暗号化機能を提供しています。もしアプリケーションがステートレスではなく、RESTフルなAPIを提供しないのであれば、すべてのルートはweb.phpファイルの中で定義されることになるでしょう。
api.phpファイルは、RouteServiceProviderのapiミドルウェアグループに属するルートで構成します。このミドルウェアはアクセス回数制限を提供しています。このファイル中で定義されるルートは、ステートレスであることを意図しています。つまり、これらのルートを通るアプリケーションに対するリクエストは、セッションステートにアクセスする必要がないように、トークンを使って認証されることを意図しています。
console.phpファイルは、クロージャベースの全コンソールコマンドを定義する場所です。それぞれのコマンドのIOメソッドと連携するシンプルなアプローチを提供するコマンドインスタンスと、各クロージャは結合します。厳密に言えば、このファイルはHTTPルートは定義していないのですが、コンソールベースのエントリポイントを定義しているという点で、ルート定義なのです。
注釈:つまり、api.phpにapiのルートを記載して、web.phpはviewへ遷移するルートを記載して、console.phpは結果をconsoleへ表示するルートを記載するんですね!
- storageディレクトリ
storageディレクトリにはコンパイルされたBladeテンプレート、ファイルベースのセッション、ファイルキャッシュなど、フレームワークにより生成されるファイルが保存されます。このフォルダーはapp、framework、logsディレクトリに分かれています。appディレクトリはアプリケーションにより生成されるファイルを保存するために利用します。frameworkディレクトリはフレームワークが生成するファイルやキャッシュに利用されます。最後のlogsディレクトリはアプリケーションのログファイルが保存されます。
storage/app/publicディレクトリにはプロファイルのアバターなどのようなユーザにより生成され、外部からアクセスされるファイルが保存されます。public/storageがこのディレクトリを指すように、シンボリックリンクを張る必要があります。リンクは、php artisan storage:linkコマンドを使い生成できます。
注釈:ブログとかで例えるとstorage/app/publicに画像とかを格納すれば良いって事ですね!
- testsディレクトリ
testsディレクトリには皆さんの自動テストを配置します。サンプルのPHPUnitテストが最初に含まれています。各テストクラスはサフィックスとしてTestを付ける必要があります。テストはphpunitか、php vendor/bin/phpunitコマンドにより実行できます。
注釈:テストコード等をこの中へ配置します!有効に使ってみてください!
- vendorディレクトリ
vendorディレクトリには、Composerによる依存パッケージが配置されます。
注釈:composerで導入したライブラリ等を格納する場所です!
##まとめ
良いディレクトリ構造は人を幸せにしますね!
##参考サイト一覧