はじめに
最近はご無沙汰なPHPフレームワークのLaravelをまた1から勉強し直して、これは理解しておいた方がいいなと思うものをピックアップして備忘録として残しておきます。
Laravelのメリット・デメリット
メリット
- Eloquent ORMやartisanコマンドで自動でコードを生成してくれる部分で開発効率が高い。
- MVC(Model-View-Controller)アーキテクチャで役割が明確になっているので、保守性が高い。
- セキュリティ面もCSRF(クロスサイトリクエストフォージェリ)やXSS(クロスサイトスクリプティング)、SQLインジェクションの対策が充実している。
- 他のフレームワーク(CakePHPやSymfonyなど)と比べると、Laravelの情報量が豊富で、コミュニティやサポートが充実している。
デメリット
- 他のフレームワーク(Slim, Lumenなど)と比較すると、パフォーマンスが遅いと感じることがある。
MVCとは
MVCアーキテクチャは、アプリケーションをModel, View, Controllerという3つの役割に分けて管理します。これによりコードが分かりやすく、保守性も向上します。
役割 | 意味 | 役割 | ディレクトリ |
---|---|---|---|
M | Model | データベースのリレーションなどの設定 | /database/ |
V | View | UI(ユーザーインターフェース)の設定 | /resources/views |
C | Controller | サーバー処理の設定 | /app/Http/ |
これにより、アプリケーションの構造が整理され、各部分の責任が明確になります。
デフォルトディレクトリの階層と役割
Laravelのプロジェクトには、複数の重要なディレクトリが含まれています。以下はその代表的な構造です:
/project-root
├── app/ # アプリケーションの主要なコード
│ ├── Http/ # HTTPリクエストに関連するコード(コントローラ、ミドルウェアなど)
├── database/ # データベース関連(マイグレーション、ファクトリ、シーディング)
│ ├── factories/ # データベースのファクトリ
│ ├── migrations/ # データベースのマイグレーションファイル
│ └── seeders/ # データベースのシーダー
├── resources/ # ビュー、言語ファイル、アセット
│ ├── views/ # Bladeテンプレート
├── routes/ # アプリケーションのルーティング
│ ├── web.php # ウェブのルート設定
│ └── api.php # APIルート設定
他にもさまざまなディレクトリがありますが、こちらは特に使用頻度の高いものです。
Blade
BladeはLaravelのテンプレートエンジンで、簡潔で表現力豊かな記述が可能です。ビューを構築するためのPHPコードをHTMLに埋め込むことができます。条件分岐やループなどの基本的な構文が簡単に使えるため、効率的にUIを構築できます。
Eloquent ORM
Eloquent ORMは、Laravelが提供するオブジェクトリレーショナルマッピングの機能です。これを使うことで、データベース操作をシンプルなオブジェクト指向の記述で行えるようになります。
- SQLを書かずにデータの取得、保存、更新、削除が可能です。
- データベースのレコードは、モデルクラスを通じて操作します。
- 例えば、
User
モデルを使って、データベースからユーザー情報を簡単に取得したり保存したりできます。
// ユーザーの全てを取得
$users = User::all();
// 新しいユーザーを作成
$user = User::create(['name' => 'Alice', 'email' => 'alice@example.com']);
// ユーザーを更新
$user->name = 'Bob';
$user->save();
マイグレーションについて
マイグレーションは、データベースのスキーマ(構造)をバージョン管理するための仕組みです。マイグレーションファイルを使うことで、チーム開発の際にも、どのようにデータベースのテーブルやカラムを変更したかを簡単に管理できます。
php artisan make:migration
コマンドでマイグレーションファイルを作成し、php artisan migrate
でマイグレーションを適用します。
例:
// マイグレーションファイル
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamps();
});
Laravelのアーキテクチャ
Laravelは、MVCアーキテクチャを採用しています。これにより、Model, View, Controllerが明確に分離され、役割が分かりやすくなり、保守性や拡張性が向上します。また、Laravelは非常にシンプルで柔軟なルーティングや依存性注入(DI)、ミドルウェア、リクエストライフサイクルなどが組み込まれており、開発者が効率よくアプリケーションを構築できる環境を提供します。
まとめ
今回はLaravelとはどういうものかを浅く広く理解しました。
今後はそれぞれをより深掘りして理解を深めていこうと思います。