lalavel

Laravelのディレクトリ構造をみてみるの回

Laravelの 7.30.1をインストールした際に構築されたファイル群の構造を見ていってみる。
どんなもんかいな。

公式の日本語訳版の内容をみつつ、ちょっと分からなかった部分を調べつつ補足していってみる。

備考

initializeは初期化に近い意味?

appディレクトリ

アプリケーションのコアコードを配置する。
アプリケーションのほとんど全部のクラスは、このディレクトリの中に設定される

bootstrapディレクトリ

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

databaseディレクトリ

databaseフォルダはデータベースのマイグレーションとモデルファクトリ、初期値設定(シーディング)を配置する。
このディレクトリをSQLiteデータベースの設置場所としても利用できる。

マイグレーションはデータベースのテーブルの定義を書く。
英語で「移動・移行」という意味になる。

シーダーはデータベースにダミーデータを一斉に挿入できる機能。
英語で「種をまく人」という意味になります。(Seeding/シーディングとも表記されます)

モデルファクトリはEloquentモデルの各フィールドに入る値を定義します。
直訳すると、モデルの工場。

EloquentはLaravelでデータベースの操作を直感的に行えるやつ。
Eloquentは「雄弁」とかの意味。

主にシーダーやテストコードからモデルファクトリーは呼び出されます。

とにかく、DBに関する情報や便利機能が沢山ある感じなのですね!

こちらの記事が参考になりそう。
Laravel8で完成されたModelFactoryの使い方
Eloquent をおさらい

routesディレクトリ

アプリケーションの全ルート定義により構成されいる。
全ルートの定義。。。Laravelで作成するアプリに関する経路の定義によって構成されているということ!?

デフォルトでは、web.php、api.php、console.php、channels.phpファイルが含まれる。

  • web.php
    RouteServiceProviderのwebミドルウェアグループに属するルートで構成します。

このミドルウェアは、セッションステート、CSRF保護、クッキーの暗号化機能を提供している。
セッションステートは、セッションのステートなので、セッションの状態、と。

もしアプリケーションがステートレスではなく、RESTフルなAPIを提供しないのであれば、すべてのルートはweb.phpファイルの中で定義されることになる。

RESTフルはRESTの原則に則ったやつ。
なんというか、ストートレスなAPIを提供するならルートはweb.php以外でも提供されるということなのかな?

  • api.php
    RouteServiceProviderのapiミドルウェアグループに属するルートで構成する。
    このミドルウェアはアクセス回数制限を提供している。
    このファイル中で定義されるルートは、ステートレスであることを意図している。
    つまり、これらのルートを通るアプリケーションに対するリクエストは、セッションステートにアクセスする必要がないように、トークンを使って認証されることを意図している。

セッションステート、「セッションの状態」ということかな?
セッションの状態にアクセスする必要がない、つまりセッションの状態を使わず代わりにトークンによってアクセス回数制限機能とかを提供してます、ということなのかな?

  • console.php
    クロージャベースの全コンソールコマンドを定義する場所。
    それぞれのコマンドのIOメソッドと連携するシンプルなアプローチを提供するコマンドインスタンスと、各クロージャは結合します。
    厳密に言えば、このファイルでHTTPルートは定義していないのですが、コンソールベースのエントリポイントを定義しているという点で、ルート定義なのです。

クロージャは、関数と変数環境をあわせたもの。
これがベースとなってる、ということなのか。

  • channels.php
    アプリケーションでサポートする、全ブロードキャストチャンネルを登録する場所。

broadcastは
– テレビやラジオで番組を送る
– たくさんの人に情報を広める

といった意味を持つ。
サーバが特定のブラウザを指定して情報を送信しているわけではなく不特定多数のブラウザに向けて送信しているのでBroadcastingと呼ばれる。
Laravelサーバから送信された情報は送信されてくるのを待ち受けているブラウザによって受け取れれます。
サーバが特定のブラウザを指定して情報を送信しているわけではなく不特定多数のブラウザに向けて送信しているのでBroadcastingと呼ばれます。

storageディレクトリ

storageディレクトリにはコンパイルされたBladeテンプレート、ファイルベースのセッション、ファイルキャッシュなど、フレームワークに
より生成されるファイルが保存される。

BladeはLaravelのテンプレートエンジン。
他の人気のあるPHPテンプレートエンジンとは異なり、ビューの中にPHPを直接記述できる、らしい。
他の人気のあるPHPテンプレートエンジンが何を指すかは置いておいて。
Bladeは刀、laravekの名前もナルニア国物語から来ているということで、ちょっとファンタジーな要素を入れてあるのでしょうか?

このフォルダはapp、framework、logsディレクトリに分かれLaravelのテンプレートエンジンです。他の人気のあるPHPテンプレートエンジンとは異なり、ビューの中にPHPを直接記述することを許しています。ている。
appディレクトリはアプリケーションにより生成されるファイルを保存するために利用する。
frameworkディレクトリはフレームワークが生成するファイルやキャッシュに利用されます。
最後のlogsディレクトリはアプリケーションのログファイルが保存されます。

  • storage/app/public/

プロファイルのアバターなどのようなユーザーにより生成され、外部からアクセスされるファイルが保存されます。
public/storageがこのディレクトリを指すように、シンボリックリンクを張る必要があります。
リンクは、php artisan storage:linkコマンドを使い生成できます。

vendorディレクトリ

vendorディレクトリには、Composerによる依存パッケージが配置されている。

  • public
    publicディレクトリには、アプリケーションへの全リクエストの入り口となり、オートローディングを設定するindex.phpファイルがある。また、このディレクトリにはアセット(画像、JavaScript、CSSなど)を配置されている。

testsディレクトリ

testsディレクトリには自動テストの内容を配置します。
サンプルのPHPUnitテストが最初に含まれています。
各テストクラスはサフィックスとしてTestを付ける必要があります。
サフィックスはコンピューターで扱う文字列の末尾に付与され、何らかの意味や役割をもつものの事を指す。

テストはphpunitか、php vendor/bin/phpunitコマンドにより実行できます。

その他、Laravelをインストールしたら作成されたファイル・フォルダ群

  • resources/
  • config/
  • artisan
  • server.php
  • composer.json
  • composer.lock
  • phpunit.xml
  • README.md
  • package.json
  • webpack.mix.js

上記ファイルについては、特に公式の構造の節では触れられてなかったけれど。
分かる範囲で見ていってみる。

configディレクトリ

configはconfigurationの略。
なので、各種設定関連のファイルが置かれているのではないかと。
自信の環境では下記が作成されてました。

  • app.php
  • broadcasting.php
  • cors.php
  • filesystems.php
  • logging.php
  • queue.php
  • session.php
  • auth.php
  • cache.php
  • database.php
  • hashing.php
  • mail.php
  • services.php
  • view.php

resourcesディレクトリ

中をみると、下記ディレクトリが。
resources(リソース)、というからには資源的なものが格納されているんでしょう。

  • js
  • lang
  • sass
  • views

artisanファイル

Artisan とは Laravel 専用のコマンド。
アルチザン、アーティザンと読み、『職人』という意味になる。
Laravelに標準搭載されているコマンドラインインターフェースで、ファイルの作成や設定ファイルのキャッシュ、データベースの操作など様々な機能が含まれています。

拡張子も無いし、それらに関連するファイルが入っているのかな?

おわりに

ちょっと公式の解説読んでもおお!?
という感じで分からない箇所が多々。
ただ、いろいろつながっているところ少しづつ見えてきたのでもう少し深くみていってみたい。

参考記事

この記事わかりやすそう。
https://miyabi-lab.space/blog/22
verは5.6だけど、大枠の流れに参考になりそう。

%d人のブロガーが「いいね」をつけました。