はじめに:Laravelってなんだろう?
Laravelは、現在世界中で最も人気のあるPHPフレームワークの一つです。エレガントで分かりやすい構文が特徴で、Webアプリケーション開発を効率的かつ楽しく進めることができます。
PHPのコードをより構造化し、再利用しやすくするために設計されており、特に中規模から大規模なアプリケーション開発に適しています。
Laravelの主な特徴:
- MVCアーキテクチャ: アプリケーションの関心事をモデル(Model)、ビュー(View)、コントローラ(Controller)に分離し、コードの見通しを良くします。
- Artisanコンソール: データベースのマイグレーション、コード生成、タスク実行など、開発を助ける便利なコマンドラインツールです。
- Eloquent ORM: データベース操作をオブジェクト指向的に、直感的に行えるようにします。
- Bladeテンプレートエンジン: PHPコードをHTML内にシンプルに記述でき、レイアウトの継承なども簡単に実現できます。
- 豊富な組み込み機能: ルーティング、ミドルウェア、認証、キャッシュ、キューなど、Web開発に必要な多くの機能が標準で提供されています。
Laravelを学ぶことで、モダンなPHP開発の手法を身につけ、より効率的に高品質なWebアプリケーションを構築できるようになります。さあ、一緒にLaravelの世界を探検しましょう!
ステップ1:Laravelを導入してみよう!
必要なもの
Laravelプロジェクトを開始するには、まず以下のツールがコンピュータにインストールされている必要があります。
- PHP: Laravel 11 (2024年3月リリース) を利用する場合、PHP 8.2以上が必要です。それ以前のLaravelバージョンでは要求されるPHPバージョンが異なります。
- Composer: PHPのパッケージ管理ツールです。Laravel本体や関連ライブラリのインストールに使用します。
まだインストールしていない場合は、それぞれの公式サイトを参照してインストールしてください。
Composerでプロジェクト作成
Composerが利用可能になったら、ターミナル(コマンドプロンプト)を開き、プロジェクトを作成したいディレクトリに移動して、以下のコマンドを実行します。
composer create-project laravel/laravel my-laravel-app
my-laravel-app
の部分は、あなたの好きなプロジェクト名に変更してください。このコマンドは、最新安定版のLaravelプロジェクトをダウンロードし、必要な依存関係をインストールします。
特定のLaravelバージョンを指定してインストールしたい場合は、次のようにバージョン番号を追加します。(例:Laravel 10系)
composer create-project laravel/laravel my-laravel-app "10.*"
プロジェクトの構造 (一部抜粋)
プロジェクトが作成されると、様々なディレクトリやファイルが生成されます。主要なものをいくつか見てみましょう。
ディレクトリ/ファイル | 主な役割 |
---|---|
app/ | アプリケーションのコアコード(モデル、コントローラ、プロバイダなど)が格納されます。 |
config/ | データベース接続情報やキャッシュ設定など、アプリケーションの設定ファイルが格納されます。 |
database/ | データベースマイグレーションやシーディング(初期データ投入)に関するファイルが格納されます。 |
public/ | Webサーバーから直接アクセスされる公開ディレクトリです。index.php (アプリケーションのエントリポイント)やCSS/JSファイルなどが置かれます。 |
resources/ | ビューファイル(Bladeテンプレート)、言語ファイル、未コンパイルのアセット(CSS/JS)などが格納されます。 |
routes/ | アプリケーションのルーティング(URLと処理のマッピング)定義ファイルが格納されます。主に web.php と api.php を使用します。 |
storage/ | コンパイルされたBladeテンプレート、セッションファイル、キャッシュ、ログファイルなどが格納されます。Webサーバーからの書き込み権限が必要です。 |
vendor/ | Composerによってインストールされた依存パッケージが格納されます。 |
.env | 環境固有の設定(データベース接続情報、APIキーなど)を定義するファイルです。バージョン管理には含めないように注意しましょう。 |
ステップ2:基本的な動かし方を見てみよう!
開発用サーバーの起動
Laravelには、開発に便利な組み込みのWebサーバーが用意されています。プロジェクトディレクトリに移動し、以下のArtisanコマンドを実行してみましょう。
cd my-laravel-app
php artisan serve
サーバーが起動すると、通常は http://127.0.0.1:8000
または http://localhost:8000
でアクセスできるようになります。ブラウザでこのURLを開くと、Laravelのウェルカムページが表示されるはずです。
ルーティング:リクエストの入り口
Webアプリケーションは、特定のURLへのアクセスに対して、対応する処理を実行します。この「URLと処理を結びつける」仕組みがルーティングです。Laravelでは、主に routes/web.php
ファイルでWeb用のルートを定義します。
routes/web.php
ファイルを開いてみましょう。初期状態では、ウェルカムページを表示するためのルートが定義されています。
<?php
use Illuminate\Support\Facades\Route;
// ルートURL ('/') へのGETリクエストがあった場合に、
// 'welcome' という名前のビューを返すクロージャ(無名関数)を実行する
Route::get('/', function () { return view('welcome');
});
// 新しいルートを追加してみましょう!
// '/hello' へのGETリクエストがあった場合に、文字列を返す
Route::get('/hello', function () { return 'Hello Laravel! ';
});
ファイルを保存した後、ブラウザで http://localhost:8000/hello
にアクセスしてみてください。「Hello Laravel! 」と表示されれば成功です!
コントローラ:処理をまとめる場所
ルート定義の中に直接処理(クロージャ)を書くこともできますが、アプリケーションが複雑になってくると、関連する処理をクラスにまとめた方が管理しやすくなります。この処理をまとめるクラスがコントローラです。
以下のArtisanコマンドで、新しいコントローラを作成してみましょう。
php artisan make:controller WelcomeController
このコマンドにより、app/Http/Controllers/WelcomeController.php
ファイルが作成されます。中身を以下のように編集してみましょう。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request; // Requestクラスを使わない場合は不要
use Illuminate\View\View; // Viewクラスを使うことを明示 (必須ではない)
class WelcomeController extends Controller
{ /** * ウェルカムページを表示するメソッド */ public function index(): View // 戻り値の型を宣言 (PHP 7.4以降) { $userName = 'Laravel User'; // ビューに渡すデータ // 'greeting' ビューを表示し、'name' というキーで $userName を渡す return view('greeting', ['name' => $userName]); } /** * 挨拶メッセージを表示するメソッド */ public function hello(): string // 戻り値の型を宣言 { return 'Hello from WelcomeController! '; }
}
次に、routes/web.php
を編集して、ルートからこのコントローラのメソッドを呼び出すように変更します。
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\WelcomeController; // 作成したコントローラをuse
// '/' へのGETリクエストを WelcomeController の index メソッドに割り当て
Route::get('/', [WelcomeController::class, 'index']);
// '/hello' へのGETリクエストを WelcomeController の hello メソッドに割り当て
Route::get('/hello', [WelcomeController::class, 'hello']);
// 以前のクロージャ定義はコメントアウトまたは削除します
// Route::get('/', function () {
// return view('welcome');
// });
// Route::get('/hello', function () {
// return 'Hello Laravel! ';
// });
これで、URLへのアクセスがあると、対応するコントローラのメソッドが実行されるようになりました。ただし、/
にアクセスすると、まだ greeting
というビューが存在しないためエラーになります。次のステップでビューを作成しましょう。
ステップ3:ビューとBladeテンプレートエンジン
ビューは、ユーザーに表示されるHTMLなどを生成する役割を担います。Laravelでは、Bladeというシンプルで強力なテンプレートエンジンが標準で用意されています。Bladeを使うと、PHPのロジックをHTML内に簡潔に埋め込んだり、テンプレートの再利用を容易にしたりできます。
ビューファイルは resources/views
ディレクトリに配置し、ファイル名は .blade.php
という拡張子をつけます。
先ほどコントローラから呼び出すように設定した greeting
ビューを作成しましょう。resources/views/greeting.blade.php
というファイルを作成し、以下のように記述します。
<!DOCTYPE html>
<html lang="ja">
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>ごあいさつ</title> <!-- bulmaのCDNを追加してみましょう --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.4/css/bulma.min.css">
</head>
<body> <section class="section"> <div class="container"> <!-- {{ }} はPHPのhtmlspecialcharsを通して変数を安全に表示します --> <h1 class="title">こんにちは、 {{ $name }} さん!</h1> <!-- @ifディレクティブ: 条件分岐 --> @if (strlen($name) > 10) <p class="notification is-info">あなたの名前は長いですね!</p> @else <p class="notification is-success">あなたの名前は素敵ですね!</p> @endif <h2 class="subtitle">学習リスト</h2> <!-- @foreachディレクティブ: 配列のループ --> <ul> @foreach (['PHP', 'Laravel', 'Blade', 'Artisan'] as $item) <li>{{ $loop->iteration }}. {{ $item }}</li> <!-- $loop変数でループ情報にアクセス可能 --> @endforeach </ul> <!-- @issetディレクティブ: 変数が存在するかチェック --> @isset($extraMessage) <p class="mt-4 has-text-weight-bold">追加メッセージ: {{ $extraMessage }}</p> @endisset <!-- {!! !!} はエスケープせずにHTMLを表示します。信頼できないデータには使用しないでください --> <div class="mt-4">{!! '<strong>HTMLタグも表示できます</strong>' !!}</div> {{-- これはBladeのコメントです。HTMLソースには表示されません --}} </div> </section>
</body>
</html>
このファイルを保存した後、ブラウザで http://localhost:8000/
にアクセスしてみてください。コントローラから渡された名前が表示され、条件分岐やループが実行されているのが確認できるはずです。
レイアウトの継承
多くのWebページでは、ヘッダー、フッター、サイドバーなど共通のレイアウト部分があります。Bladeでは、レイアウトの継承機能を使って、これらの共通部分を一つの親レイアウトファイルにまとめ、各ページでそのレイアウトを再利用できます。
例:resources/views/layouts/app.blade.php
(親レイアウト)
<!DOCTYPE html>
<html lang="ja">
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- @yieldディレクティブ: 子ビューで定義されたセクションの内容をここに挿入します --> <!-- 第2引数はデフォルト値を指定できます --> <title>@yield('title', 'マイアプリケーション')</title> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.4/css/bulma.min.css">
</head>
<body> <nav class="navbar is-light" role="navigation" aria-label="main navigation"> <div class="navbar-brand"> <a class="navbar-item" href="/"> My App </a> </div> </nav> <section class="section"> <div class="container"> @yield('content') <!-- ここにメインコンテンツが入ります --> </div> </section> <footer class="footer"> <div class="content has-text-centered"> <p> 2025 My App. All rights reserved. </p> </div> </footer>
</body>
</html>
例:resources/views/child.blade.php
(子ビュー)
@extends('layouts.app') <!-- 親レイアウト 'layouts/app.blade.php' を継承 -->
@section('title', '子ページのタイトル') <!-- 親レイアウトの 'title' セクションを上書き -->
@section('content') <!-- 親レイアウトの 'content' セクションの内容を定義 --> <h1 class="title">ここは子ページです</h1> <p>親レイアウトを継承しています。ヘッダーとフッターは共通です。</p> <!-- ここに子ページ固有のコンテンツを追加できます --> <div class="box"> 子ページの内容が入ります。 </div>
@endsection <!-- セクションの終わり -->
このようにレイアウトを継承することで、コードの重複を減らし、メンテナンス性を向上させることができます。
まとめ
今回は、PHPフレームワークLaravelの導入方法と、基本的な操作について学びました。
- Composer を使ってLaravelプロジェクトを作成する方法
- Artisanコマンド (
serve
,make:controller
) の基本的な使い方 - ルーティング (
routes/web.php
) でURLと処理を結びつける方法 - コントローラ で処理をまとめる方法
- ビューとBladeテンプレートエンジン (
{{ }}
,@if
,@foreach
,@extends
,@yield
,@section
) を使って画面を生成する方法
これらの知識は、Laravelを使ったWebアプリケーション開発の第一歩です。実際に手を動かして、コードを書き換えてみることで、より理解が深まるはずです。
次のステップでは、Laravelの重要な設計思想であるMVCアーキテクチャについて、さらに詳しく掘り下げていきます。モデル(Model)の役割やデータベースとの連携方法などを学び、より本格的なWebアプリケーション開発への扉を開きましょう!