【初心者向け】PHP Laravel解説

## はじめに
これまで、PHPのLaravelを用いた開発、保守、改修の経験を積んできました。
しかし、今後は別の言語にも挑戦したく、暫くPHPに触れる機会が減る予定です。
そのため、今後振り返りやすくするためにも、PHPに関する記事を作成しておこうと思います。

## PHPとは
PHP（PHP: Hypertext Preprocessor）は、動的なウェブアプリケーションの開発に適したプログラミング言語です。
ここでいう「動的な」とは、リアルタイムでページの内容を変更できることを指します。

私の経験から言うと、PHPは非常に理解しやすい初心者向けのプログラミング言語です。
多少雑なコーディングでも簡単に動作させることができるため、開発コストやタイムパフォーマンスの面で優れた特長があります。

## フレームワークとは
Laravelの説明に入る前に、「フレームワーク」について簡単に説明します。
フレームワークとは、開発に必要な土台があらかじめ用意された開発キットのようなものです。
フレームワークを使わなくても開発自体は可能ですが、毎回共通の土台を一から作成していては効率的とは言えません。
そのため、効率化のためのフレームワークが提供されており、開発のスピードや品質を向上させる役割を果たします。

## Laravelとは
Laravelは、先程説明したフレームワークの一種です。
つまり、PHPでの開発を効率化するための土台が、あらかじめ用意されています。

補足として、PHPのフレームワークにはLaravel以外にも、以下のようなものがあります。
* Symfony
* CodeIgniter
* Slim
* CakePHP
* Yii Framework

これらはそれぞれ特徴があり、用途に応じて使い分けられています。
ただし、現在最も使用されているフレームワークはLaravelだと言われることが多いです。

Laravelの主な特徴としては以下の点が挙げられます。
* 学習コストが低く、初心者でも対応しやすい
* 開発スピードが速い
* モジュール性が高く、保守・改修がしやすい

## Laravelのディレクトリ構造
この記事では、Laravelの導入方法については割愛し、導入後にあらかじめ用意されているディレクトリについて説明します。
Laravelのディレクトリ構造は、以下のようになっています。

```
Laravelプロジェクト名/
├── app/
├── bootstrap/
├── config/
├── database/
├── public/
├── resources/
├── routes/
├── storage/
├── tests/
├── .env
├── artisan
├── composer.json
├── package.json
└── .gitignore
 ```
 
### １. ```app/```（アプリケーションコード）
アプリケーションのメインとなる処理を記載するディレクトリ。
```app/```ディレクトリ内には主に以下が含まれています。

```
app/
├── Console/
├── Exceptions/
├── Http/
├── Models/
├── Providers
```

#### ```app/Console/```（コマンドライン関連）
コマンドを自作した際に、生成される。
用途としては、バッチ処理をコマンド実行する場合が挙げられる。

#### ```app/Exceptions/```（例外処理）
エラー発生時の出力先や出力方法を設定できる。

#### ```app/Http/```（HTTPリクエスト関連）
アプリケーションへのリクエストが発生した場合、処理するロジックを記載する。
主に使用するのは```app/Http/Controllers/```と```app/Http/Requests/```になる。
- ```app/Http/Controllers/```
　アプリケーションからのリクエストに対して、必要な情報を取得して、レスポンスを返す。
　今回詳細な説明は割愛するが、MVCモデルと呼ばれる内の"C"に該当する。
- ```app/Http/Requests/```
　リクエストされたパラメータに対して、バリデーションを行うクラスが格納される。
　コントローラー内でバリデーションを簡潔に記述することが可能。

#### ```app/Models/```（Eloquentモデル）
データベース（DB）へのデータ取得、登録、更新、削除などのDB処理を記載する。
MVCモデルと呼ばれる内の"M"に該当する。

### ２. ```database/```
アプリケーションにおけるデータベースに関連するファイルが格納される。
```database/```ディレクトリ内には主に以下が含まれています。

```
database/
├── factories/
├── migrations/
├── seeders/
```

#### ```database/migrations/```
ここで知っておきたいのは、マイグレーション（migrations）です。
マイグレーションとは、データベースのスキーマ（構造）を管理・変更するための方法のことを指します。
Laravelでは、マイグレーションを使ってデータベースのテーブル作成や変更をプログラムで定義し、バージョン管理ができるようにします。これにより、データベースの変更をコードで追跡でき、複数の開発者間で一貫性を保ちながら作業を進めることができます。

### ３. ```public/```
フロント（画面）側に表示する画像やJavaScript、CSSなどが格納される。
```public/```ディレクトリ内には主に以下が含まれています。

```
public/
├── css/
├── js/
├── images/
├── storage/
├── index.php
└── .htaccess (Apache用設定ファイル)
```

### ４. ```resources/```
フロント（画面）側の表示に必要な情報を記載する。
```resources/```ディレクトリ内には主に以下が含まれています。

```
resources/
├── lang/
├── views/
├── sass/
├── js/
├── ...
```

#### ```resources/lang/```（言語ファイル）
アプリケーションの多言語対応のための言語ファイルが格納される。

#### ```resources/views/```（ビュー）
HTMLテンプレートファイルが格納される。
MVCモデルと呼ばれる内の"V"に該当する。
Laravelでは、```.blade.php```という拡張子を持つファイルがビューとして使用されます。
共通のHTML構造（ヘッダー、フッター、ナビゲーションバーなど）は、```resources/views/layouts/```ディレクトリに格納し、使い回すことが可能。

### ５. ```routes/```（ルーティング設定）
アプリケーションのルーティング設定を行うファイルが格納されます。
簡単に言うと、「 https://XXXX.com/YYYYY 」というURLにアクセスした場合、どの処理に飛ぶべきかを設定してあるディレクトリです。
```routes/```ディレクトリ内には主に以下が含まれています。

```
routes/
├── api.php
├── channels.php
├── console.php
└── web.php
```

#### ```routes/web.php```
アプリケーションのルート（HTTPリクエスト）が定義されます。基本的なルーティングはここで設定します。

#### ```routes/api.php```
API関連のルートが定義されます。API認証やリソースルートを設定する場所です。

#### ```routes/console.php```
Artisanコマンドのルート設定を行います。カスタムコマンドを追加する際に使います。

### ６. ```storage/```
アプリケーションで生成されたファイルを保存するディレクトリ。
ログファイルやアップロードされたファイルなどが保存されます。
```storage/```ディレクトリ内には主に以下が含まれています。

```
storage/
├── app/
├── framework/
└── logs/
```

### ７. ```vendor/```
Laravelの便利機能の処理が記載されているディレクトリ。
特に理由がなければ、手を加える必要はない。

### ８. ```.env/```
環境設定ファイル。
データベースの接続情報やアプリケーションキー、APIキーなどがここで設定されます。

## まとめ
以上、PHP Laravelの初心者向け解説になります。
久々にPHP Laravelを触れる際の参考になれば幸いです。