PHP × Laravel 学習(用語)

## はじめに

PHP、Laravelの用語について学んだことを記載していきます。

## PHP

Web開発向けの言語
サーバサイドで動くスクリプト言語

シンプルなためプログラミング初心者にもお勧めできる言語

- ビルトインサーバ
PHP5.4以降の動作確認用の機能
本番運用を想定したサーバではないためこの機能でのアプリ公開はNG

## Laravel

PHPで使われるMVCフレームワークでモダンな開発が可能

[【解説】MVCモデルとは？メリット・デメリット](https://system-kaihatu.com/archives/3204#:~:text=MVC%E3%83%A2%E3%83%87%E3%83%AB%E3%81%A8%E3%81%AF%E3%80%81%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0,%E5%9B%B3%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82)

https://zenn.dev/nameless_sn/articles/framework_and_library

学習コストが低く、直観的にプログラミングできる。
下記などの技術を導入している。

- Composer
パッケージ管理ツール
プロジェクトで依存する外部パッケージやライブラリの追加や更新がコマンドで管理できる。
従来はパッケージ追加などで依存性の衝突を手動解決をしていたらしく大変だったとか。

- Symfony
大規模開発向けのMVCフレームワーク

- Eloquent ORM
Object Relational Mapping
DBから取得したレコードをオブジェクトとして操作でき、DB操作を効率的にできる。

https://qiita.com/ts7i/items/c23e50b5ee29887c446c

- Bladeテンプレート
PHPのコードをHTMLに埋め込むことができ、コードの再利用がしやすくなる。

## 名前空間(namespace、ns)

ファイルはフォルダごとに適切に配置するが、
それをPHPだと名前空間というらしい。

## XAMPP(ザンプ)
最も人気のあるPHP開発環境
完全無償でApache、MariaDB、PHP、Perlが簡単にインストール・利用ができる。

## ルーティング
URLごとにどの処理を実行するか管理をする。
サーバへのリクエストはコントローラにリダイレクトされる。
/helloなどをルート、エンドポイントと呼ぶ。

## シングルアクションコントローラ

1つのコントローラに処理を何個も用意するのではなく1コントローラ1アクションにしたもの。

## マジックメソッド

PHPのクラスで用意されている処理で「__inveoke()」のように「__○○()」という感じになっている。

## ヒアドキュメント

文字列を記載したり、特殊文字を文字列に埋め込んだりできる。

``` php
$msg = <<<EOF
text1
text2
EOF;
```

## DI

アクションメソッドの引数はサービスコンテナにより対応するクラスのインスタンスが引数に渡されることでインスタンス生成され使用可能になる。
クラスに依存しないため、テストがしやすくなる。

indexメソッドの引数にRequest、Responseが記述されたことでRequest、Responseが使えるようになる。

``` php:HelloController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Http\Response;

class HelloController extends Controller
{
  
   public function index(Request $request, Response $response) {

        $html = <<<EOF
        <h3>Request</h3>
        <pre>{$request}</pre>
        <h3>Response</h3>
        <pre>{$response}</pre>
        EOF;
       $response->setContent($html);
       return $response;
   }

}
```

``` php:web:php
Route::get('/hello','App\Http\Controllers\HelloController@index');
```

- サービス
特定の機能や処理を提供するクラスやオブジェクト。
例：DB接続、メール送信、ユーザ認証、キャッシュ処理など
これらのサービスを利用する際にDIを通じてサービスを利用できるようにしている。

- サービスコンテナ
DI。
サービスをコンテナに登録し、その後コンテナからサービスを利用する。
特定のサービスを一度だけ生成し、そのインスタンスを再利用できる。

- サービスプロバイダ
サービスコンテナにサービスを登録するクラス。

## レンダリング

テンプレートに埋め込まれた変数などを処理して実際の見た目にすること。
これをテンプレートエンジンがやってくれる。

## クエリ―文字列

URLの「?xxx=aaa&yyy=bbb」みたいなもの。

## サブビュー

フォーマットが決まっているテンプレートに値を入れて使いまわすのが基本に対し、
値を入れずに使いまわせるもの。
例として共通のメニューバーとか。

## ビューコンポーザ

ビューにロジックを持たせたい場合に使う機能。
MVCだとControllerが本来ロジックを担当するが、ビューのためのロジックはViewに持たせた方がいいのかといった問題を解決できる。

## bootstrap

起動時処理のこと。CSSフレームワークのことではない。

## ミドルウェア

アプリケーションの前のレイヤー。
リクエストやレスポンスの前後にコントローラとは別に処理を行う。

## 余談

そういえばモダンってよく聞くけど具体的に何？ってなったのでchatGPTに質問しました。
以下回答です。

「モダン」という言葉は、特に技術や開発の文脈で使われる場合、一般的には「最新の」「現代的な」「今の時代に適した」という意味を持ちます。しかし、その具体的な意味は文脈によって異なることがあります。以下に、開発における「モダン」の一般的な意味合いを説明します。

### 1. **最新技術の利用**
   - 「モダン」と言われるとき、それは通常、最新の技術やツール、フレームワークを使用していることを意味します。例えば、モダンなWeb開発では、最新のJavaScriptフレームワーク（React, Vue.js, Angularなど）や新しい言語機能（ES6以降のJavaScript）を使って開発することを指します。

### 2. **ベストプラクティスに従った開発**
   - モダンな開発は、業界で一般的に認められているベストプラクティスに従って行われることが多いです。これには、テスト駆動開発（TDD）、継続的インテグレーション（CI）、継続的デリバリー（CD）、バージョン管理（Gitの使用）などが含まれます。

### 3. **アーキテクチャの進化**
   - モダンなアーキテクチャは、単一のモノリシックなシステムよりも、マイクロサービス、サーバーレス、コンテナ化されたアプリケーションなど、柔軟性やスケーラビリティを重視した設計を指すことが多いです。

### 4. **ユーザー体験（UX）の向上**
   - モダンな開発では、ユーザーインターフェース（UI）とユーザーエクスペリエンス（UX）が重要視されます。これには、レスポンシブデザイン、シングルページアプリケーション（SPA）、高速なパフォーマンス、そしてアクセシビリティへの配慮が含まれます。

### 5. **クラウドネイティブ開発**
   - クラウド環境を活用した「クラウドネイティブ」なアプローチも、モダンな開発と呼ばれます。これには、クラウドプラットフォーム上でのアプリケーション開発やデプロイ、インフラのコード化（Infrastructure as Code）、自動スケーリングなどが含まれます。

### 6. **開発の自動化と効率化**
   - モダンな開発環境では、自動化ツールの活用が一般的です。テスト、デプロイ、モニタリング、パフォーマンスチューニングなど、さまざまなプロセスが自動化されているのが通常です。

### 7. **セキュリティ意識の向上**
   - モダンな開発には、セキュリティを意識した設計・実装が含まれます。これには、データの暗号化、セキュアな認証・認可、セキュリティテストの自動化などが含まれます。

### 結論
「モダン」という言葉は、単に「最新」や「新しい」だけでなく、最新の技術やベストプラクティスに従い、効率的かつ安全に高品質なソフトウェアを開発することを指します。開発プロセスやツール、技術が進化し続ける中で、その時点での「モダン」が何を意味するのかは変わる可能性がありますが、常に「現在のベスト」を追求する姿勢を表しています。

## 参考記事

[PHPのComposerとは。WindowsとLinuxへのインストール方法と操作の基本を解説](https://www.miraiserver.ne.jp/column/about_php-composer/)

https://kinsta.com/jp/blog/symfony-vs-laravel/

https://www.apachefriends.org/jp/index.html

https://kinsta.com/jp/blog/laravel-routes/

https://qiita.com/tadsan/items/15657be653f6c1902d15

https://qiita.com/ichi_404/items/257b2c23aacef0b3cfdc

https://qiita.com/miyuki_samitani/items/f0d3d73d7315222f4e12

https://qiita.com/tatsuya_1995/items/50028a559806c8cae21a

https://qiita.com/hitochan/items/ec3ccfe0c051e8565f4a

https://qiita.com/tatsuya_1995/items/ad166e9bc7ee3969f1fc