はじめに: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アプリケーション開発への扉を開きましょう!🚪
コメント