フレームワークを真似てフォルダを作る。PHPでSNSを作成してみる#03

フレームワークを真似てフォルダを作る。 PHP

こんにちは。
今回も前回の記事に引き続いてPHPでSNSの実装を記していきます。

フレームワークを真似てフォルダを作る

フレームワークとは、システムやアプリ開発において土台となる機能を予め用意している箱のようなモノです。

そのため開発において似た処理は予め雛形として作っておくことで開発効率が上がります。また、オープンソースのため属人化することなく運用面でもメリットが大きいです。
脆弱性が発見されてもパッチが出るためバージョンの管理をすればよいためセキュリティも高めやすいのです。

そんな便利そうなフレームワークですが、難しいです。
というのも、既にあるコードに追記、改変、設定変更を施す必要があるため
プログラミングスキルと共にフレームワークの知識も要求されるわけです。

そのためプログラミングスキルを身につけずフレームワークを利用すると
破茶滅茶な設計になってしまうわけです。
また、フレームワークに依存して汎用的な技術を身につけることができません。

なので最初のステップとしてスクラッチ開発。いわゆるゼロからつくってみるということが重要です。

そして今回はフレームワークの設計思想でも使われるMVCに沿った設計にします。

 

フォルダ構成

ある程度決め打ちでフォルダを作成しました。

sns_training
├── api
├── app
│   ├── auth
│   ├── config
│   ├── constants
│   ├── controllers
│   ├── helper
│   ├── kernel
│   ├── models
│   ├── services
│   └── utill
├── routes
└── views
    ├── assets
    ├── components
    ├── css
    ├── js
    └── pages

では各フォルダの用途をご説明します。

api

今回は、RDBのMySQLを使ったDBを構築するので
そのやりとりをapi化する目的で作成しました。

個人的ですが、SQL文を書くのであれば一箇所にまとまっていた方が
改修が楽ということで今回はapi方式を採用しました。

app

主に内部処理系をapp配下に置きます。
サーバ側で実行されるものを基本的に書いていきます。

auth

暗号化やハッシュ化といったセキュアな管理、
またSession管理などをこちらのフォルダ配下で管理します。

フォルダ名が「auth」で役割とフォルダ名が合っているかは微妙ですが、、
今回は「auth」配下に認証やセッション、セキュアな面を管理させます。

例:パスワードハッシュのソルトやストレッチング回数、セッション登録やチェック、削除

config

環境変数ファイルを置くフォルダです。
フォルダを作るほどでもありませんが、環境変数ファイルから呼び出す処理も加わるため今回はconfigというフォルダを作成しました。

例:ソルト値、データベースの接続値、パス

constants

定数管理をするフォルダです。
データベースで管理するほどでもない情報を管理します。

例:1ページに表示する投稿数(20件)、ポップアップメッセージ(エラー等)

controllers

viewの表示やviewトリガーの処理を受け持つ役割をします。
システムの司令塔的な役割を果たします。

例:ユーザが登録ボタンをクリックした後の”登録処理”を管理、
初期表示、画面遷移

helper

viewを持たないがcontrollerのような司令塔の役割が必要な場合に使うフォルダです。

例:Session値をチューニングしてViewやServicesに送る

kernel

システムの中核部分です。
一番はじめに処理される部分です。

models

controllerとservices間、servicesとapi間を行き来するオブジェクトです。
ネット通販でいうと段ボール的な役割です。商品(変数)を包んで運ぶ。

現在のPHPでは型は不要なので必要ありませんが
組織での開発や他言語を使う場合、型を意識する必要があるのでmodelは必要な存在になります。

services

apiへ値の送受信を行い、結果をcontrollerに受け渡す役割をします。
データのチューニングを行ったりします。
複数回apiにリクエストを送る場合もservicesで再呼び出しをした後、結果をcontrollerに送ります。

utill

使いまわせる関数を管理するフォルダです。
複数ファイルに跨って同じ処理を必要とする場合に
utill内で関数を定義して使用します。

例:エラーコードとエラーメッセージを整形する関数

routes

ルーティング管理をするフォルダです。
リクエストURLと表示するページ(view)の紐付けを行います。

例:loginのリクエストがあったらloginビューを表示する。

views

ユーザから見える”フロントエンド処理”を管理するフォルダです。

assets

写真や動画、フォルダを管理するフォルダです。
更に細かくフォルダで分けてもよいです。

components

ビュー側の共通部分を管理するフォルダです。

例:ページ内のヘッダーとフッター部品の共通化

js / css

jsはフロントエンドで実行されるJavaScriptの管理フォルダ。
cssはデザイン管理フォルダ。

pages

ユーザに見える部分の管理

おわりに

今回は、フォルダについて細かく分けてみました。

フレームワークのようなフォルダ構成にするとフレームワークはどう作ってるんだろうって探究心がくすぐられますよね。
内部構成は違えど、面白いので是非一度見てみてください。

 

コメント

タイトルとURLをコピーしました