はじめに
只今、案件で PHP Laravel 11 を使っています。よくよく考えてみたら、アイレットに入社してこのフレームワークをよく使っていますが「何がどういいの?」と問いかけられると自分の中でこれだ!という答えが無いことに気づきました。(恥ずかしい・・・)
ということで、Google Cloud を推奨している DX 開発事業部らしく Gemini Advanced を使って、ドキュメントを入手しつつ公式ドキュメントを読んで自分なりの答えを作って行こうと思います。
Gemini といっしょに学んでみて・・・早いけど結論
Gemini といっしょに学んでみて・・・早いけど結論。
大規模(ユーザー数やメモリ使用量、トラフィック量)やエンドユーザー数の増加が見込める開発では Laravel を選択したほうが良いです。なぜならメモリ増加をさばける環境が整っているのがこの Laravel だからです。また、1 人でフルスタックに開発ができるのも Laravel の良い点です。なぜなら、フロントのフレームワークを勉強することなく PHP だけで、HTML と CSS を少しプログラムするだけでよいからです。Web 開発をすることが全く初めてでもこれは大きなポイントだと感じます。
また、Laravel 11 は、PHP 初心者にとって、「Web 開発事前準備」を整えてくれ、面倒な作業を「自動化」し、そして「美しいコード」を書くためのガイドラインを提供してくれる、非常に優れたフレームワークです。
PHP 開発者が多い(基本的な文法を理解していること前提です)環境でしたら すぐに開発ができます。コミュニティ (StackOverFlow で質問) もあるので質問しやすく、公式ドキュメントが日本語で読めるのでおすすめです。
自分の経験
自分がなぜ Laravel 11 を使用しているのかです。
- PHP や MVC ( Model-View-Controller ) 、イベントドリブン設計での開発経験があり、ルーティング、コントローラ、ビューの連携フォルダー構成さえ掴めば楽に Web ページが作れると感じている。
- オブジェクト指向言語の経験があれば、インターフェイスやバッチの設計もコツを掴めばすぐに理解できる。
- 案件で Laravel 前提で進めることが多い。(受け身な理由ですが・・・)
蛇足
逆に、オブジェクト指向言語の経験がない方はどう感じるのか聞いてみたいです。わたしの経験なのですが、Java の多重継承やクラスやインターフェイスやカプセル化にはじめて遭遇したとき本気でわからなかったからです。あのとき、大学の教授や TA・SA に本気で長時間ヘルプしてもらって課題をこなし単位を取りました。。。大学時代の方には感謝しか有りません(泣)ポインタないから楽だと思ったらすってんころりんして起き上がれなくなりました。
Laravel 公式ドキュメントを読んでみた上での良いところ
Gemini に Laravel について良い点を書いている Laravel 公式ブログを抽出してもらいました!便利ですね。
読んだ記事: Laravel 11 Now Available
- Laravel Reverb
なんと、水平スケーリングに対応しています。これがエンドユーザーが多いために Laravel が使用されている理由の1つかもしれませんね。Futhermore, Reverb supports horizontal scaling via Redis’s publish / subscribe capabilities, allowing you to distribute your WebSocket traffic across multiple backend Reverb servers all supporting a single, high-demand application
- SQLite By Default
デフォルトで DB が使えるなんて、親切なんでしょう。自分の経験ですが、MySQL との接続をするように開発環境を作ったときは苦労しました。簡易な PoC 開発がすぐにできてしまいます。これは便利。 - New Artisan commands
個人的にこれがちょっと嬉しいです。他のファイルを探して、 enum や interface クラスを書いていたからです。コマンド叩けばテンプレが呼び出せるのですぐにファイル作成できますね。
Laravel 開発者の YouTube 見た
Taylor Otwell: 知られざる Laravel の起源、デザインパターン、Livewire vs Inertia、AI など! が 5月29日に公開にされたため見てきました!
やっぱり Ruby on Rails を意識しているんだなあと思いました。Ruby on Rails を使ってたことあるのですが、初めて Laravel 触ったときになんか似ている!?と思いました。
この Youtube では、エンジニアは AI に仕事を奪われるのか?についても言及しています。この点に関して、Framework の開発者は中堅やシニアのエンジニアはそんなことは思っていない、寧ろ生産性が上がっていると言及していました。私もそう思います。キーボードを叩いてデータを作るような単純作業は Gemini にまかせてやったのですが、手作業だと数時間かかるよな・・・となるような作業が 2 〜 3 秒で終わりました。実はこの文章に、英数字の前後に半角スペースいれるように最終的に校正のように修正しました。1 秒もかからず終わらせてくれました。ありがとう。
YouTube にて質問がでていたので考えましたが、このような単純作業を Gemini にリクエストするためにもプログラミングの知識が必要とも感じました。
Gemini に聞いてみた(ぐうの音も出ないほどわかりやすかったので、私の文章より後に来てもらいます)
次はGemini にきいてみましょう。Gemini のモデルは 2.5 Flash です。
—————————————————————————————————————————————–
なぜ「フレームワーク」を導入すると良いのか?
WebサイトやWebアプリケーションを開発する際、プログラミング言語(PHPなど)だけでゼロからすべてを構築することも可能です。しかし、これは非常に大変な作業です。
例えるなら、家を建てるのに、木材を伐採するところから始め、釘やネジも自分で作り、設計図も一から描くようなものです。
ここで「フレームワーク」が登場します。フレームワークは、Web開発でよく使われる機能(データベース接続、URLの管理、セキュリティ対策など)の「共通の骨組み」や「便利な部品」をあらかじめ提供してくれるツールです。
フレームワークを導入するメリットは以下の通りです。
★ 開発効率の向上 (Rapid Development):
- Webアプリケーションには、ユーザー認証、データベース操作、ルーティング(URLとコードのマッピング)、入力値の検証など、多くの共通機能が必要です。フレームワークはこれらの「定型的な処理(ボイラープレートコード)」を既に実装済み、または簡単に利用できる形で提供します。
- これにより、開発者はゼロからコードを書く手間を省き、アプリケーションの「ビジネスロジック(そのアプリケーション独自の機能)」の実装に集中できます。結果として、開発期間を大幅に短縮し、より早くアプリケーションをリリースできます。
★ コードの標準化と保守性 (Standardization & Maintainability):
多くのフレームワークは、MVC (Model-View-Controller) のような特定のアーキテクチャパターンを採用しています。LaravelもこのMVCパターンに従っており、コードを「Model(データ処理)」「View(表示)」「Controller(制御)」に明確に分離するよう促します。
この構造化されたアプローチにより、コードの場所が明確になり、チーム開発においてコードの統一性が保たれます。他の開発者が書いたコードも理解しやすくなり、将来的な機能追加や不具合修正(保守)も容易になります。
★ セキュリティの強化 (Enhanced Security):
- Webアプリケーションは、クロスサイトスクリプティング (XSS) やSQLインジェクション、クロスサイトリクエストフォージェリ (CSRF) など、様々なセキュリティ脅威にさらされています。
- フレームワークには、これらの一般的なWeb攻撃に対する組み込みの対策機能が提供されています。PHP初心者が気づきにくいセキュリティホールを防ぐのに役立ち、より安全なアプリケーションを開発できます。
★ コミュニティとドキュメント (Community & Documentation):
- Laravelのような人気のあるフレームワークには、世界中に活発な開発者コミュニティが存在し、豊富な公式ドキュメントや多くの学習リソース(チュートリアル、記事、動画など)が提供されています。
- 開発中に問題に直面した際、オンラインで解決策を見つけやすかったり、コミュニティに質問して助けを求めやすかったりします。
// =========================================== // フレームワークなし (全て手動で構築) // =========================================== /* - 自分でデータベース接続コードを書く - 自分でURLとPHPファイルの紐付けを管理する - 自分でセキュリティ対策を実装する - 自分でユーザー認証システムを構築する - ... (多くの定型作業) ❌ 時間と労力がかかる、ミスが多い、セキュリティ脆弱性 */ // =========================================== // ↓ // =========================================== // =========================================== // フレームワークあり (Laravel 11) // =========================================== /* ✅ データベース接続は設定ファイルで完結 ✅ ルーティングは専用ファイルで簡潔に定義 ✅ 組み込みのセキュリティ機能を利用 ✅ コマンド一つで認証機能を生成 ... (共通機能の自動化/部品化) ⭕ 早く完成する、コードが整理される、安全性が高い */
PHP初心者にとってLaravel 11が良い理由
Laravel 11は、上記のフレームワークのメリットを最大限に活かしつつ、特にPHP初心者にとって学習しやすいように設計されています。具体的な理由を専門用語を交えて見ていきましょう。
★ 簡素化されたアプリケーション構造と集中管理 (bootstrap/app.php)
Laravel 11の大きな変更点の一つは、初期のファイル構成が大幅に簡素化されたことです。Laravel 10までは多くの設定ファイルが config ディレクトリや app/Http/Middleware ディレクトリに散らばっていましたが、Laravel 11ではそれらが削減され、bootstrap/app.php ファイルに多くの設定が集中するようになりました。
[Image of Laravel 11 simplified application structure] 従来のLaravelのイメージ: config/ app.php auth.php database.php ... (多数の設定ファイル) app/Http/Kernel.php (ミドルウェア定義) app/Http/Middleware/ (各ミドルウェアファイル) Laravel 11のイメージ: bootstrap/ app.php (アプリケーションの初期設定、ミドルウェア、サービスプロバイダなどがここに集約) config/ (必要最低限のファイルのみ)
★ PHP初心者へのメリット
- 学習コストの低減: アプリケーションの初期設定や基本的な振る舞いを定義する場所が bootstrap/app.php に集約されたことで、どこに何を設定すれば良いか迷うことが減り、アプリケーションの全体像を把握しやすくなります。
- 設定の一元管理: ミドルウェア(後述)やサービスプロバイダといった重要な設定がこのファイルに集約されたことで、アプリケーションの振る舞いを一箇所で管理しやすくなります。
★ 強力なArtisanコマンドによる開発の自動化
Laravelには、Artisan (アーティザン) と呼ばれるコマンドラインインターフェース (CLI) ツールが付属しています。これは、開発者が頻繁に行う作業を自動化するための強力なツールです。
+-------------------------------------------------+ | あなた (開発者) | | ↓ `php artisan` を実行 | +-------------------------------------------------+ | | | +---------------------------------------------+ | | | Laravel Artisan (CLIツール) | | | | - コードのひな形生成 (例: モデル、コントローラー) | | | | - データベーススキーマ管理 (マイグレーション) | | | | - 認証機能の自動生成 | | | | - テスト実行 | | | | - ... その他多数 | | | +---------------------------------------------+ | | | | ↓ (自動化された結果) | +-------------------------------------------------+ | Webアプリケーション (機能追加・効率化) | +-------------------------------------------------+
具体的な例:
★ データベーススキーマ管理 (Migrations):
- 通常、データベースのテーブル構造を変更するには、CREATE TABLE や ALTER TABLE といったSQL文を直接書く必要があります。
- LaravelのMigration機能を使うと、PHPコードでテーブルの構造を定義し、php artisan make:migration create_products_table でひな形を、php artisan migrate で実際のテーブルをデータベースに作成できます。これにより、データベースの変更履歴をコードとして管理(バージョン管理)でき、チーム開発や環境構築が容易になります。
// database/migrations/YYYY_MM_DD_HHMMSS_create_products_table.php (一部抜粋) use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up(): void { Schema::create('products', function (Blueprint $table) { $table->id(); // 主キー (id) を自動生成 $table->string('name'); // 文字列型の name カラム $table->integer('price'); // 整数型の price カラム $table->timestamps(); // created_at と updated_at カラムを自動生成 }); } public function down(): void { Schema::dropIfExists('products'); } };
★ 認証機能の迅速な実装 (Laravel Breeze):
- ユーザー登録、ログイン、ログアウト、パスワードリセットといった認証機能は、Webアプリケーションで非常に一般的ですが、実装には多くの手間とセキュリティの考慮が必要です。
- Laravel 11では、composer require laravel/breeze と php artisan breeze:install という2つのコマンドを実行するだけで、これらの認証機能のUI(ビュー)、ルーティング、コントローラー、マイグレーションファイルが自動的に生成されます。PHP初心者がゼロから実装する労力を大幅に削減できます。
★ PHP初心者へのメリット:
- 複雑な作業の抽象化: データベース操作や認証機能といった、初心者には難しい部分をArtisanコマンドが代行してくれるため、本質的なアプリケーションロジックに集中できます。
- エラーの削減: 手作業によるミスが減り、安定した開発が可能です。
★ Eloquent ORMによる直感的なデータベース操作
Laravelの「Eloquent ORM (Object-Relational Mapping)」は、データベースのテーブルをPHPの「オブジェクト」として扱えるようにする機能です。これにより、SQL文を直接書かなくても、データベースとのやり取りが非常に簡単になります。
+---------------------+ +---------------------+ +---------------------+ | あなたのPHPコード | | Eloquent ORM | | データベース | | (オブジェクト操作) | | (SQLへの変換) | | (テーブル、データ) | +---------------------+ +---------------------+ +---------------------+ | User::find(1); | <--- > | SELECT * FROM users | <--- > | usersテーブル | | Product::create(...);| <--- > | INSERT INTO products| <--- > | productsテーブル | | $user->update(...); | <--- > | UPDATE users SET ...| <--- > | | +---------------------+ +---------------------+ +---------------------+
具体的な例:
ユーザーIDが1のユーザー情報を取得する:
// 通常のSQLの場合: SELECT * FROM users WHERE id = 1; // PHPでPDOなどを使ってSQLを実行し、結果を配列で受け取る // Eloquent ORMの場合: use App\Models\User; // Userモデルをインポート $user = User::find(1); // IDが1のユーザーを検索し、Userオブジェクトとして取得 echo $user->name; // オブジェクトのプロパティとしてユーザー名にアクセス
新しい商品を作成する:
// 通常のSQLの場合: INSERT INTO products (name, price) VALUES ('鉛筆', 100); // PHPでPDOなどを使ってSQLを実行 // Eloquent ORMの場合: use App\Models\Product; // Productモデルをインポート $product = Product::create([ // 配列でデータを渡し、新しいProductオブジェクトを作成し、データベースに保存 'name' => '鉛筆', 'price' => 100 ]);
★ PHP初心者へのメリット:
- SQL知識の軽減: 複雑なSQL文を覚える必要がなく、PHPのオブジェクト指向の知識でデータベースを操作できます。
- 可読性の向上: コードが直感的で読みやすくなります。
- セキュリティ (SQLインジェクション対策): Eloquentは、プリペアドステートメントをデフォルトで使用するため、ユーザーからの入力値が直接SQL文に埋め込まれることを防ぎ、SQLインジェクションといった一般的なデータベース攻撃から自動的に保護してくれます。
★ Bladeテンプレートエンジンによるビューの分離
Laravelは、MVC (Model-View-Controller) という設計パターンを採用しており、アプリケーションの役割を明確に分離しています。このうち「View(表示)」を担当するのが「Blade」というテンプレートエンジンです。
Bladeを使うと、PHPのロジックとHTMLをきれいに分離して記述できます。
商品一覧
@if (count($products) > 0) {{-- PHPのif文とほぼ同じ意味 --}}
-
@foreach ($products as $product) {{-- PHPのforeach文とほぼ同じ意味 --}}
- {{ $product->name }} - {{ $product->price }}円 {{-- 変数表示。自動でエスケープされる! --}} @endforeach
商品がありません。
@endif★PHP初心者へのメリット:
- コードの整理: HTMLの中にPHPのコードが混在して読みにくくなる「スパゲッティコード」を防ぎます。表示ロジックとビジネスロジックが明確に分離されます。
- 直感的な構文: @if や @foreach といったディレクティブ(Blade独自の命令)は、PHPの if や foreach に似ており、非常に直感的に理解できます。
- XSS対策: {{ $variable }} のように二重の波括弧で変数を表示すると、自動的にエスケープ処理(特殊文字を無害化)が行われ、クロスサイトスクリプティング (XSS) 攻撃を防ぐのに役立ちます。
★ ミドルウェアによるリクエスト処理の管理
ミドルウェアは、HTTPリクエストがアプリケーションのコアロジック(コントローラーなど)に到達する前、またはレスポンスがクライアントに返される前に、リクエストを処理する「中間層」のようなものです。
+-----------------------------------------------------------------+ | クライアント (ブラウザ) | | ↓ HTTPリクエスト | +-----------------------------------------------------------------+ | | | +-------------------------------------------------------------+ | | | Laravelアプリケーション | | | | +-------------------------------------------------------+ | | | | | ミドルウェア (例: 認証チェック、CSRF保護、ログ記録) | | | | | | → リクエストを処理/フィルタリング | | | | | +-------------------------------------------------------+ | | | | | ↓ (ミドルウェアを通過したリクエスト) | | | | | | コントローラー (アプリケーションのメインロジック) | | | | | | → データベース操作、ビジネスロジック | | | | | +-------------------------------------------------------+ | | | +-------------------------------------------------------------+ | | | | ↓ HTTPレスポンス | +-----------------------------------------------------------------+
★具体的な例:
- 認証ミドルウェア (auth): ログインしているユーザーのみがアクセスできるページ(例: 管理画面)を設定する際に使用します。リクエストが来たら、まずミドルウェアがユーザーがログインしているかチェックし、ログインしていなければログインページにリダイレクトします。
// routes/web.php (ルーティング定義の一部) use App\Http\Controllers\DashboardController; Route::middleware('auth')->group(function () { Route::get('/dashboard', [DashboardController::class, 'index']); }); // この '/dashboard' ルートは、'auth' ミドルウェアによって保護される
- CSRF保護ミドルウェア: クロスサイトリクエストフォージェリ (CSRF) 攻撃からアプリケーションを保護します。フォーム送信時に自動的にトークンを検証し、不正なリクエストをブロックします。
★PHP初心者へのメリット
- 関心の分離: 認証やログ記録、セキュリティチェックといった共通の処理をコントローラーから分離できるため、コントローラーのコードがシンプルで読みやすくなります。
- 再利用性: 一度書いたミドルウェアは、複数のルートやグループに適用できるため、コードの重複を防げます。
★パフォーマンスの向上
Laravel 11は、PHP 8.2以上の必須化と、ルーティング、DIコンテナ (Dependency Injection Container)、Eloquent ORMなどの内部処理において、パフォーマンスが大幅に改善されています。
★PHP初心者へのメリット:
- 意識せずに高速化: 初心者が自分でパフォーマンス最適化の複雑な手法を学ぶ必要なく、デフォルトで高速なアプリケーションを開発できます。PHP 8.2のJIT (Just-In-Time) コンパイルなどの恩恵も受けられます。
ここまで読んでくれた方へ 私なりのまとめ
Laravel はメジャーなフレームワークで、フロントエンドのフレームワークも選択しなくていいので使いやすいから選ばれているんだろうなと思いました。PHP 環境で、ユーザー数の増加が見込める開発に携わっているので Laravel を使っていることがわかってスッキリ!!です。ただ、HTML と CSS が苦手な私は .blade ファイルに四苦八苦しています。
エンジニア歴だけは 10 年近くという長い私ですが、Gemini のおかげでこんなに勉強したり、改めてフレームワークを選択するのはなんでだろうと、エンジニアとしての思考力と知識 UP に繋がったと感じます。
ここまで読んでいただき、ありがとうございました。