GhostPHP(PHPの自作FWづくり)
■ GhostPHP
2023.7.26から始まった自作のPHPづくり。今年もバージョンアップして色々改善しました。
https://github.com/sh-kikuchi/GhostPHP
大きな流れは以下の通り。
Client
↓
index.php
↓
Router
↓
Controller (HttpRequestでバリデーション)
↓
Service
↓
Repository
↓
Entity
↓
Database
■ Layer Responsibilities
- index.php
- アプリケーションのエントリーポイント。
- bootstrap.php を読み込み、アプリケーションを初期化する。
- ルーティングを定義し、HTTPリクエストを処理する。
- Controller
- HTTPリクエストを受け取り、Service を呼び出す。
- 必要に応じて Response を返す。
- ビジネスロジックは持たず、各レイヤーの橋渡しを担当する。
- HttpRequest
- 入力データの検証・整形
- Validation / Data shaping
- Service
- ユースケース単位のビジネスロジック
- Repository を通じてデータを取得・保存
- Repository
- データアクセス(CRUD)をカプセル化
- Entity を用いてDBとデータをやり取りする
- Entity
- データベースとやり取りするデータ構造
■ Thin Framework Philosophy
Ghost PHP は Thin Framework を志向しています。最小限の構造のみを提供しつつ、
強いレイヤー分離と拡張前提の設計を採用しています。
すべてを内包するフレームワークではなく、拡張可能な最小限の基盤を提供することを目的としています。
■ Directory(ディレクトリ構成)
```txt
├─aura
│ ├─database // DB接続
│ ├─https // リクエスト・レスポンス管理
│ ├─routes // ルーティング
│ └─utils
│ ├─commands // CLIコマンド処理
│ └─functions // 主にView用関数
├─config // 設定ファイル
├─controllers // コントローラークラス
├─requests // フォームデータ管理クラス
├─interfaces // 各種インターフェース
├─logs // ログ
├─migrations // マイグレーション
│ ├─csv
│ ├─migrate
│ └─seed
├─entities
├─repositories
├─public // 公開用アセット
│ └─assets
│ ├─css
│ ├─img
│ └─js
├─services // サービス層
├─storage // 一時ファイルなど
│ ├─csv
│ └─doc
└─templates // テンプレート
├─errors // エラーページ
└─layouts // ヘッダー・フッター
```
■今後の展望
毎年、バージョンを1つ上げながら、年ごとの成長記録として開発を続けています。
様々な知見を取り入れながら、自分自身でアーキテクチャを設計し、実装していくことは決して簡単ではありませんが、この取り組みが一エンジニアとしての姿勢や、自分自身を表す名刺代わりのようなものになればと思っています。
これからはDBの簡単なクエリビルダーをつくってみたり、
まだ少ないバリデーションの種類を増やしてみたいと思います。