0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【環境構築3ステップ】Laravel完全ガイド【個人開発12ステップ】

Posted at

この記事は、【メリット3つ】PHP完全ガイド|未経験から始める最短ルート の続編です。

PHPの基礎(変数、配列、関数、フォーム処理)を学んだ皆さん、おめでとうございます! $_POST でデータを受け取ったり、ファイルに情報を保存したりできるようになりましたね。

しかし、実際の開発現場では、セキュリティ、データベース管理、コードの整理(いわゆる「スパゲッティコード」の回避)など、考慮すべきことが山積みです。

そこで登場するのが、**PHPフレームワーク「Laravel」**です。

この記事では、PHPの基礎を終えたあなたが、最短ルートでモダンなWeb開発スキルを身につけるための「Laravel学習ガイド」をお届けします。

目次

    1. なぜPHPの次にLaravelなのか
    1. Laravelの3つの圧倒的メリット
    • 2-1. 開発が「楽しく」なる(開発者体験)
    • 2-2. 必要な機能が「全部入り」(フルスタック)
    • 2-3. 学習リソースが「世界一」豊富
    1. 開発環境を整える(ComposerとSail)
    • 3-1. Composerのインストール
    • 3-2. Laravel Sail (セイル) で環境構築
    1. Laravelの基礎知識 (MVCモデル)
    • 4-1. ルーティング (routes/web.php)
    • 4-2. コントローラー (Controller)
    • 4-3. ビュー (View) と Blade
    • 4-4. モデル (Model) とマイグレーション
    1. 超実践!簡単なブログシステムを作る (CRUD完全版 手取り足取りガイド)
    • ステップ1: Laravelプロジェクトを作成する
    • ステップ2: 作成したフォルダに移動する
    • ステップ3: 開発環境 (Laravel Sail) を準備する
    • ステップ4: 開発環境を起動する
    • ステップ5: データベースの設計図 (マイグレーション) を作る
    • ステップ6: マイグレーションファイル(設計図)を編集する
    • ステップ7: データベースにテーブルを作成する
    • ステップ8: コントローラー(司令塔)を作成する
    • ステップ9: ルーティング(URLの受付窓口)を設定する
    • ステップ10: ビュー(HTML画面)を作成・編集する
      • 10-1. 作成フォーム (create.blade.php) - 新規作成
      • 10-2. 一覧表示 (index.blade.php) - 新規作成&編集・削除ボタン追加
      • 10-3. 編集フォーム (edit.blade.php) - 新規作成
    • ステップ11: コントローラー(司令塔)のロジックを記述する
    • ステップ12: 動作確認
    1. 次のステップ
    1. まとめ

1. なぜPHPの次にLaravelなのか

「PHPを学んだけど、次は何をすれば?」
「WordPressのカスタマイズはできるけど、本格的なWebサービスを作りたい」

そう思ったなら、答えはLaravel一択です。

  • PHPは「言語」(道具を作るための素材)
  • Laravelは「フレームワーク」(高性能な工具箱・設計図)

process.php のようなファイルを作ってフォーム処理をしていたのが、Laravelを使うと、はるかに安全で、整理され、効率的に開発を進められます。

2. Laravelの3つの圧倒的メリット

2-1. 開発が「楽しく」なる(開発者体験)

Laravelは「開発者体験(DX)」を非常に重視しています。

  • Artisan (アルチザン) コマンド: ターミナルから php artisan make:controller のようにコマンドを打つだけで、必要なファイル(設計図)を自動生成してくれます。
  • 美しいコード: 文法が直感的で、読みやすいコードを自然と書けるように設計されています。

2-2. 必要な機能が「全部入り」(フルスタック)

Webサービスに必要な機能の「面倒な部分」は、あらかじめLaravelが用意してくれています。

  • 認証機能: ログイン、新規登録、パスワードリセット。php artisan breeze:install と数コマンド打つだけで、高機能な会員システムが完成します。
  • Eloquent (エロクエント) ORM: データベース(MySQLなど)を、PHPの「オブジェクト」として直感的に操作できます。SQLを直接書く必要がほとんどありません。
  • Blade (ブレード) テンプレート: HTMLとPHPをきれいに分離できます。もうHTMLタグの途中に <?php echo ...; ?> と書く必要はありません。

2-3. 学習リソースが「世界一」豊富

Laravelは世界で最も人気のあるPHPフレームワークです。

  • 公式ドキュメント(日本語): 非常に高品質で、翻訳も充実しています。
  • Laracasts (ララキャスツ): 「LaravelのNetflix」と呼ばれる公式の動画学習サイト。質・量ともに圧倒的です。
  • コミュニティ: 利用者が多いため、日本語の情報も豊富。エラーで困っても、検索すればすぐに解決策が見つかります。

3. 開発環境を整える(ComposerとSail)

PHP習得ガイドでは XAMPP / MAMP を使いましたが、Laravelではより現代的な方法を使います。

3-1. Composerのインストール

LaravelはComposer (コンポーザー) という「PHPのパッケージ管理ツール」を使ってインストールします。
composer は、Laravel本体や、その他必要なライブラリ(部品)を自動でダウンロードしてくれるツールです。まずはこれをインストールしましょう。
https://getcomposer.org/

3-2. Laravel Sail (セイル) で環境構築

XAMPPの代わりに、Laravel Sail を使いましょう。
Sailは、Dockerという技術を使い、あなたのPC(Windows, Mac, Linux)に影響を与えずに、Laravel開発用の完璧な環境(Webサーバー、PHP、データベース)を自動で構築してくれます。

  1. プロジェクトの作成
    ターミナル(コマンドプロンプト)で以下のコマンドを実行します。
    my-laravel-app の部分は好きな名前に変えてください)

    # (my-laravel-app というフォルダが作られます)
    composer create-project laravel/laravel my-laravel-app
    
  2. Sailのインストール
    作成されたフォルダに移動し、Sailをインストールします。

    cd my-laravel-app
    php artisan sail:install
    

    (途中で mysql などを選択する画面が出ます。[0] を選んでEnterでOKです)

  3. Sailの起動

    ./vendor/bin/sail up -d
    

たったこれだけです。 http://localhost にアクセスすると、Laravelの初期画面が表示されるはずです。

4. Laravelの基礎知識 (MVCモデル)

Laravelは MVC (Model - View - Controller) という設計思想に基づいています。

  1. Model (モデル): データベースとのやり取り担当。
  2. View (ビュー): ユーザーに見えるHTMLの部分。
  3. Controller (コントローラー): ユーザーからのリクエストを受け取り、ModelとViewを指揮する「司令塔」。

4-1. ルーティング (routes/web.php)

PHPの基礎では process.php のようにファイル名がURLになりましたが、Laravelは違います。
routes/web.php ファイルが、どのURLにアクセスが来たら、どのコントローラーの処理を呼ぶかを定義します。

例: routes/web.php

<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PostController;

// URL「/posts」に来たリクエストを、PostControllerのindexメソッドに渡す
Route::get('/posts', [PostController::class, 'index']);

// URL「/posts/create」に来たリクエストを、PostControllerのcreateメソッドに渡す
Route::get('/posts/create', [PostController::class, 'create']);

// URL「/posts」(POST送信)に来たリクエストを、PostControllerのstoreメソッドに渡す
Route::post('/posts', [PostController::class, 'store']);

4-2. コントローラー (Controller)

「司令塔」です。artisan コマンドで作成します。

php artisan make:controller PostController

例: app/Http/Controllers/PostController.php

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request; // フォーム情報を受け取るために必要
use App\Models\Post;         // データベース操作のために必要

class PostController extends Controller
{
    // 一覧表示 ( /posts )
    public function index()
    {
        $posts = Post::all(); // データベースから全投稿を取得
        return view('posts.index', ['posts' => $posts]); // 'posts.index'ビューにデータを渡す
    }

    // 登録フォーム表示 ( /posts/create )
    public function create()
    {
        return view('posts.create');
    }

    // 登録処理 ( /posts へのPOST )
    public function store(Request $request)
    {
        // (ここでバリデーション処理)
        
        $post = new Post();
        $post->title = $request->input('title'); // フォームの'title'を受け取る
        $post->body = $request->input('body');   // フォームの'body'を受け取る
        $post->save(); // データベースに保存

        return redirect('/posts'); // 終わったら一覧ページに戻る
    }
}

$_POST['title'] と書いていた部分が $request->input('title') になっていることに注目してください。

4-3. ビュー (View) と Blade

resources/views/ フォルダに置かれるHTMLファイルです。Laravelでは .blade.php という拡張子を使います。

例: resources/views/posts/create.blade.php (登録フォーム)

<!DOCTYPE html>
<html lang="ja">
<head>
    <title>新規投稿</title>
</head>
<body>
    <h1>新しい投稿を作成</h1>

    <form action="/posts" method="POST">
        @csrf
        <div>
            <label>タイトル:</label>
            <input type="text" name="title">
        </div>
        
        <div>
            <label>内容:</label>
            <textarea name="body"></textarea>
        </div>
        
        <button type="submit">送信</button>
    </form>
</body>
</html>

例: resources/views/posts/index.blade.php (一覧表示)

<!DOCTYPE html>
<html lang="ja">
<head>
    <title>投稿一覧</title>
</head>
<body>
    <h1>投稿一覧</h1>

    @foreach ($posts as $post)
        <div>
            <h2>{{ $post->title }}</h2>
            <p>{{ $post->body }}</p>
        </div>
    @endforeach
</body>
</html>

<?php foreach(...): ?>@foreach に、 <?php echo htmlspecialchars(...) ?>{{ ... }} に変わり、非常にスッキリしました。

4-4. モデル (Model) とマイグレーション

データベースとのやり取りを担当します。

1. マイグレーション(データベースの設計図)
artisan コマンドでModelと同時にマイグレーションファイルを作成します。

# Postモデルと、postsテーブル用のマイグレーションファイル(-m)を作成
php artisan make:model Post -m

database/migrations/xxxx_create_posts_table.php が作成されます。

// ...
public function up()
{
    Schema::create('posts', function (Blueprint $table) {
        $table->id(); // 自動で増える番号 (主キー)
        $table->string('title'); // タイトル (文字列)
        $table->text('body');    // 内容 (長文テキスト)
        $table->timestamps(); // created_at と updated_at (作成日時・更新日時)
    });
}
// ...

2. データベースの実行
この設計図を元に、データベースにテーブルを作成します。

./vendor/bin/sail artisan migrate

これでMySQL内に posts テーブルが作成されます。

3. モデル (app/Models/Post.php)
このファイルが、posts テーブルとPHPのコードを繋ぐ役割をします。
artisan が自動生成するので、基本的には中身は空のままでOKです)

5. 超実践!簡単なブログシステムを作る (CRUD完全版 手取り足取りガイド)

PHPの基礎を終えた方がLaravelを使い、Webサービスの基本機能であるCRUD(作成・一覧・更新・削除)をすべて備えたシンプルなブログシステムを作る手順を、全コマンドと全コード付きで具体的に解説します。

ステップ1: Laravelプロジェクトを作成する

ターミナル(コマンドプロンプトやPowerShellなど)を開き、作業したいフォルダで以下のコマンドを実行します。my-blog-app というプロジェクトが作成されます。

composer create-project laravel/laravel my-blog-app

ステップ2: 作成したフォルダに移動する

これ以降のコマンドは、すべてこのプロジェクトフォルダ内(my-blog-app)で実行します。

cd my-blog-app

ステップ3: 開発環境 (Laravel Sail) を準備する

Laravel Sail(開発環境)をインストールします。

php artisan sail:install

(途中で [0] mysql を選んでEnterを押します)

ステップ4: 開発環境を起動する

Sailを起動します。初回は環境構築のため5〜10分ほどかかります。

./vendor/bin/sail up -d

起動したら、ブラウザで http://localhost にアクセスし、Laravelの初期画面が表示されることを確認してください。

ステップ5: データベースの設計図 (マイグレーション) を作る

ブログの「投稿 (Post)」に必要なデータベース設計図(マイグレーション)と、それに対応する「モデル (Model)」を一度に作成します。
(これ以降、php artisan の代わりに ./vendor/bin/sail artisan を使います)

./vendor/bin/sail artisan make:model Post -m

ステップ6: マイグレーションファイル(設計図)を編集する

database/migrations/ フォルダ内に作られた ...create_posts_table.php ファイルを開き、up メソッドに「タイトル (title)」と「本文 (body)」のカラム定義を追加します。

ファイル: database/migrations/xxxx_..._create_posts_table.php

public function up(): void
{
    Schema::create('posts', function (Blueprint $table) {
        $table->id();
        // ↓ この2行を追加 ↓
        $table->string('title'); // タイトル
        $table->text('body');    // 本文
        // ↑ この2行を追加 ↑
        $table->timestamps();
    });
}

ステップ7: データベースにテーブルを作成する

編集した設計図を元に、データベースに posts テーブルを作成します。

./vendor/bin/sail artisan migrate

ステップ8: コントローラー(司令塔)を作成する

リクエストを処理する PostController を作成します。

./vendor/bin/sail artisan make:controller PostController

ステップ9: ルーティング(URLの受付窓口)を設定する

routes/web.php ファイルを開き、CRUD操作(一覧、作成フォーム、作成処理、編集フォーム、更新処理、削除処理)に対応するURLをすべて定義します。

ファイル: routes/web.php

<?php

use Illuminate\Support\Facades\Route;
// ↓ この行を追加 ↓
use App\Http\Controllers\PostController;

// 最初からあるウェルカムページ (そのまま)
Route::get('/', function () {
    return view('welcome');
});

// ↓ 以下のCRUDルートをすべて追加 ↓

// 1. 一覧表示 (Read)
Route::get('/posts', [PostController::class, 'index'])->name('posts.index');

// 2. 作成フォーム表示 (Create)
Route::get('/posts/create', [PostController::class, 'create'])->name('posts.create');

// 3. 作成処理 (Create)
Route::post('/posts', [PostController::class, 'store'])->name('posts.store');

// 4. 編集フォーム表示 (Update)
// {post} の部分には投稿のIDが入る (例: /posts/1/edit)
Route::get('/posts/{post}/edit', [PostController::class, 'edit'])->name('posts.edit');

// 5. 更新処理 (Update)
Route::put('/posts/{post}', [PostController::class, 'update'])->name('posts.update');

// 6. 削除処理 (Delete)
Route::delete('/posts/{post}', [PostController::class, 'destroy'])->name('posts.destroy');

ステップ10: ビュー(HTML画面)を作成・編集する

resources/views/ フォルダ内に、新しく posts フォルダを作成します。そこに以下のファイルを作成・配置します。

10-1. 作成フォーム (create.blade.php) - 新規作成

ファイル: resources/views/posts/create.blade.php

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>新規投稿作成</title>
    <style>
        body { font-family: sans-serif; margin: 40px; background-color: #f9f9f9; }
        .container { max-width: 600px; margin: 0 auto; background: #fff; padding: 20px; border-radius: 8px; box-shadow: 0 2px 5px rgba(0,0,0,0.1); }
        h1 { margin-top: 0; }
        div { margin-bottom: 15px; }
        label { display: block; margin-bottom: 5px; font-weight: bold; }
        input[type="text"], textarea { width: 100%; padding: 8px; box-sizing: border-box; border: 1px solid #ccc; border-radius: 4px; }
        button { background: #007bff; color: white; padding: 10px 15px; border: none; cursor: pointer; border-radius: 4px; }
        button:hover { background: #0056b3; }
        .back-link { margin-top: 20px; display: inline-block; }
    </style>
</head>
<body>
    <div class="container">
        <h1>新規投稿作成</h1>

        <form action="{{ route('posts.store') }}" method="POST">
            @csrf <div>
                <label for="title">タイトル:</label>
                <input type="text" id="title" name="title" required>
            </div>
            <div>
                <label for="body">本文:</label>
                <textarea id="body" name="body" rows="5" required></textarea>
            </div>
            
            <button type="submit">投稿する</button>
        </form>

        <a href="{{ route('posts.index') }}" class="back-link">← 投稿一覧に戻る</a>
    </div>
</body>
</html>

10-2. 一覧表示 (index.blade.php) - 新規作成&編集・削除ボタン追加

ファイル: resources/views/posts/index.blade.php

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>投稿一覧</title>
    <style>
        body { font-family: sans-serif; margin: 40px; background-color: #f9f9f9; }
        .container { max-width: 700px; margin: 0 auto; background: #fff; padding: 20px; border-radius: 8px; box-shadow: 0 2px 5px rgba(0,0,0,0.1); }
        h1 { margin-top: 0; }
        .create-link a { background: #28a745; color: white; padding: 10px 15px; text-decoration: none; border-radius: 4px; display: inline-block; margin-bottom: 20px; }
        .create-link a:hover { background: #218838; }
        .post-item { border: 1px solid #eee; padding: 15px; margin-bottom: 15px; border-radius: 5px; }
        .post-item h2 { margin: 0 0 10px 0; }
        .post-item p { margin: 0 0 15px 0; color: #333; line-height: 1.6; }
        .post-actions { display: flex; gap: 10px; }
        .edit-btn { background: #ffc107; color: #333; padding: 5px 10px; text-decoration: none; border-radius: 4px; font-size: 14px; }
        .delete-btn { background: #dc3545; color: white; padding: 5px 10px; border: none; cursor: pointer; border-radius: 4px; font-size: 14px; }
    </style>
</head>
<body>
    <div class="container">
        <h1>投稿一覧</h1>

        @if (session('success'))
            <div style="color: green; margin-bottom: 15px;">
                {{ session('success') }}
            </div>
        @endif

        <div class="create-link">
            <a href="{{ route('posts.create') }}">+ 新規投稿を作成する</a>
        </div>

        @if ($posts->isEmpty())
            <p>まだ投稿がありません。</p>
        @else
            @foreach ($posts as $post)
                <div class="post-item">
                    <h2>{{ $post->title }}</h2>
                    <p>{!! nl2br(e($post->body)) !!}</p>
                    
                    <div class="post-actions">
                        <a href="{{ route('posts.edit', $post) }}" class="edit-btn">編集</a>
                        
                        <form action="{{ route('posts.destroy', $post) }}" method="POST" onsubmit="return confirm('本当に削除しますか?');">
                            @csrf
                            @method('DELETE') <button type="submit" class="delete-btn">削除</button>
                        </form>
                    </div>
                    </div>
            @endforeach
        @endif
    </div>
</body>
</html>

10-3. 編集フォーム (edit.blade.php) - 新規作成

ファイル: resources/views/posts/edit.blade.php
create.blade.php をコピーして作ると早いです)

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>投稿編集</title>
    <style>
        body { font-family: sans-serif; margin: 40px; background-color: #f9f9f9; }
        .container { max-width: 600px; margin: 0 auto; background: #fff; padding: 20px; border-radius: 8px; box-shadow: 0 2px 5px rgba(0,0,0,0.1); }
        h1 { margin-top: 0; }
        div { margin-bottom: 15px; }
        label { display: block; margin-bottom: 5px; font-weight: bold; }
        input[type="text"], textarea { width: 100%; padding: 8px; box-sizing: border-box; border: 1px solid #ccc; border-radius: 4px; }
        button { background: #007bff; color: white; padding: 10px 15px; border: none; cursor: pointer; border-radius: 4px; }
        button:hover { background: #0056b3; }
        .back-link { margin-top: 20px; display: inline-block; }
    </style>
</head>
<body>
    <div class="container">
        <h1>投稿編集</h1>

        <form action="{{ route('posts.update', $post) }}" method="POST">
            @csrf
            @method('PUT') <div>
                <label for="title">タイトル:</label>
                <input type="text" id="title" name="title" value="{{ $post->title }}" required>
            </div>
            <div>
                <label for="body">本文:</label>
                <textarea id="body" name="body" rows="5" required>{{ $post->body }}</textarea>
            </div>
            
            <button type="submit">更新する</button>
        </form>

        <a href="{{ route('posts.index') }}" class="back-link">← 投稿一覧に戻る</a>
    </div>
</body>
</html>

ステップ11: コントローラー(司令塔)のロジックを記述する

app/Http/Controllers/PostController.php を開き、ステップ9で定義したすべての処理(index, create, store, edit, update, destroy)の中身を記述します。

ファイル: app/Http/Controllers/PostController.php

<?php

namespace App\Http{namespace App\Http\Controllers;

use Illuminate\Http\Request;
// ↓ モデル(Post)を使うために追加 ↓
use App\Models\Post;
// ↓ バリデーションの例外を扱うために追加 (今回はstoreのみで使用) ↓
use Illuminate\Validation\ValidationException;

class PostController extends Controller
{
    /**
     * 1. 一覧表示 (Read)
     */
    public function index()
    {
        // 投稿を新しい順にすべて取得
        $posts = Post::orderBy('created_at', 'desc')->get();
        // viewヘルパーで 'posts.index' ビューを返す
        // compact('posts') は ['posts' => $posts] と同じ意味
        return view('posts.index', compact('posts'));
    }

    /**
     * 2. 作成フォーム表示 (Create)
     */
    public function create()
    {
        return view('posts.create');
    }

    /**
     * 3. 作成処理 (Create)
     */
    public function store(Request $request)
    {
        // バリデーション
        $request->validate([
            'title' => 'required|max:255', // titleは必須、255文字以内
            'body'  => 'required',         // bodyは必須
        ]);

        // データベースに保存
        $post = new Post();
        $post->title = $request->input('title');
        $post->body  = $request->input('body');
        $post->save();

        // 一覧ページにリダイレクトし、成功メッセージをセッションに保存
        return redirect()->route('posts.index')->with('success', '投稿が完了しました。');
    }

    /**
     * 4. 編集フォーム表示 (Update)
     *
     * @param  \App\Models\Post  $post (ルートモデルバインディング)
     */
    public function edit(Post $post)
    {
        // ルートモデルバインディングにより、URLのIDに対応するPostモデルが自動的に$postに渡される
        return view('posts.edit', compact('post'));
    }

    /**
     * 5. 更新処理 (Update)
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\Post  $post (ルートモデルバインディング)
     */
    public function update(Request $request, Post $post)
    {
        // バリデーション
        $request->validate([
            'title' => 'required|max:255',
            'body'  => 'required',
        ]);

        // データを更新
        $post->title = $request->input('title');
        $post->body  = $request->input('body');
        $post->save(); // データベースに保存(更新)

        // 一覧ページにリダイレクト
        return redirect()->route('posts.index')->with('success', '投稿を更新しました。');
    }

    /**
     * 6. 削除処理 (Delete)
     *
     * @param  \App\Models\Post  $post (ルートモデルバインディング)
     */
    public function destroy(Post $post)
    {
        $post->delete(); // データベースから削除

        // 一覧ページにリダイレクト
        return redirect()->route('posts.index')->with('success', '投稿を削除しました。');
    }
}

ステップ12: 動作確認

お疲れ様でした! これでCRUD機能がすべて揃いました。
ブラウザで動作を確認しましょう。

  1. 一覧 ( http://localhost/posts )
    「+ 新規投稿を作成する」をクリック。
  2. 作成 ( http://localhost/posts/create )
    タイトルと本文を入力して「投稿する」。
  3. 一覧 ( http://localhost/posts )
    投稿が追加され、「投稿が完了しました。」とメッセージが出ることを確認。
  4. 編集 (一覧ページ →「編集」ボタン)
    投稿内容がフォームに入った状態で編集ページが開くことを確認。
    内容を書き換えて「更新する」ボタンを押す。
  5. 一覧 ( http://localhost/posts )
    内容が更新され、「投稿を更新しました。」とメッセージが出ることを確認。
  6. 削除 (一覧ページ →「削除」ボタン)
    確認ダイアログ(「本当に削除しますか?」)が出ることを確認。
    「OK」を押すと投稿が消え、「投稿を削除しました。」とメッセージが出ることを確認。

これで、Laravelによる基本的なWebアプリケーションの完成です!

6. 次のステップ

Laravelの世界は広大です。

  1. 認証機能: sail artisan breeze:install を実行してみましょう。一瞬でログイン機能が完成し、驚くはずです。
  2. Eloquent ORM: Post::find(1) (ID=1の投稿取得), Post::where('title', '...')->get() (タイトルで検索) など、高度なデータベース操作を学びましょう。
  3. Laracasts: 最高の学習サイトです。基礎を終えたら、ぜひ覗いてみてください。

7. まとめ

PHPの基礎を終えた今、あなたは「Laravel」という強力なロケットを手に入れる準備ができました。

XAMPPで htdocs にファイルを作っていた時代は終わりです。
これからは artisan コマンドでコードを自動生成し、Sail でクリーンな環境を動かし、Eloquent でスマートにデータベースを操作し、Blade で美しいHTMLを出力しましょう。

ようこそ、モダンなPHP開発の世界へ!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?