[PHPのはじめ方] Part31: Laravelフレームワークの導入と基本操作

PHP

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

コメント

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