Laravelで新規プロジェクトやCRUD機能をスムーズに作成する方法

はじめに

LaravelはPHPのフレームワークの一つで、データベースと連携したWebアプリケーションを構築するときに活用されることが多いです。 シンプルな記述でありながら、実用的な機能が充実しているため、初めて触る人でも開発の流れを把握しやすいでしょう。 一方で、抽象的な概念だけで勉強していると、具体的なイメージが掴みにくいかもしれません。

そこで、この記事ではLaravelでプロジェクトを新規作成し、CRUD機能を構築するまでの流れを、なるべくわかりやすく説明していきます。 実務での利用をイメージしやすいよう、コントローラやマイグレーション、モデルなどを紐付けて解説します。

皆さんが開発を進める際に「とりあえず最初はこうやって作るのか」というところが見えてくるはずです。 「これからLaravelに触れたいけど何から始めればいいんだろう?」という疑問を解消する参考になれば嬉しいですね。

この記事を読むとわかること

  • Laravelプロジェクトの新規作成手順
  • コントローラ・モデル・マイグレーションの基本的な作り方
  • 実務で役立つCRUD機能の実装イメージ
  • データの登録・編集を行うためのルーティングやビュー構成の考え方

Laravelプロジェクトを作成する流れ

Laravelの開発で最初に行うのは、プロジェクトの新規作成です。 一般的にはComposerというPHPのパッケージ管理ツールを使って、コマンド一つでLaravelの必要ファイルを一括ダウンロードすることが多いです。

具体的には以下のようなコマンドを実行します。

composer create-project laravel/laravel sample-app

上記のコマンドにより、"sample-app"というディレクトリが生成され、その中にLaravelのフォルダ構成一式が用意されます。 ディレクトリへ移動したら、サーバーを起動してブラウザで動作を確認することができます。

cd sample-app
php artisan serve

サーバーが起動すると、表示されるURLにアクセスするとLaravelの初期画面が表示されるでしょう。 この状態を起点に、コントローラやモデルの作成などを順番に行っていくと、アプリケーションを完成に近づけることができます。

コントローラを作成してみる

プロジェクトを立ち上げたら、次に行うことが多いのはコントローラの作成です。 Laravelではphp artisan make:controllerコマンドを使うことで、簡単にコントローラを生成できます。

たとえば"Article"という概念を取り扱うと想定している場合、以下のように入力すると"ArticleController"を作成できます。

php artisan make:controller ArticleController

これで、"app/Http/Controllers"ディレクトリ配下に"ArticleController.php"というファイルが生成されます。 コントローラは、HTTPリクエストを受け取り、必要な処理を行ってレスポンスを返す役割を担います。

実務では、コントローラの中でデータベースとのやり取りやバリデーションなどを行うケースが多いです。 また、ユーザーが操作した結果に応じて、表示したいビューを切り替えることも一般的です。

マイグレーションを用意する

CRUDを実装するときに欠かせないのが、データベース構造を定義するマイグレーションです。 Laravelではマイグレーションを使って、テーブルを作成したり、カラムを追加したりします。

コマンドは以下のようなイメージです。

php artisan make:migration create_articles_table

このコマンドを実行すると、"database/migrations"ディレクトリに"create_articles_table"といったファイルが生成されます。 マイグレーションファイルの"up"メソッドでは、テーブルのカラムを定義します。 たとえば、記事を管理する場合は"id"や"title"、"content"などを設計するでしょう。

Schema::create('articles', function (Blueprint $table) {
    $table->id();
    $table->string('title', 255);
    $table->text('content');
    $table->timestamps();
});

最後にphp artisan migrateを実行すると、定義したテーブルが実際にデータベース上に作成されます。 実務では、新しい機能を追加するたびにテーブルを追加・更新する必要があるため、マイグレーションで管理しておくと開発や運用がスムーズになるでしょう。

モデルでデータを扱う

Laravelでデータベース操作を行う際に便利なのが、Eloquent ORMと呼ばれる仕組みです。 Eloquentはテーブルを「モデル」として扱い、直感的な記述でデータベースの読み書きを実現します。

モデルを作成するには、php artisan make:modelコマンドを使います。 テーブル名が"articles"の場合は"Article"モデルを作るのが一般的です。

php artisan make:model Article

生成された"app/Models/Article.php"には、以下のようにクラスが定義されています。 これを通じて、データベースへの問い合わせやデータの保存を簡単に行えるようになります。

class Article extends Model
{
    protected $fillable = [
        'title',
        'content',
    ];
}

"fillable"には、外部から受け取ったデータを保存してもいいカラムを指定します。 たとえばフォームから"title"と"content"を送信している場合、ここにそれらを列挙しておくとスムーズにデータを登録できます。

ルーティングを設定する

コントローラを作成したら、Web上でのURLとコントローラのメソッドを紐付ける作業が必要です。 Laravelでは"routes/web.php"などにルートの記述を行い、どのURLでどのコントローラメソッドを呼び出すかを指定します。

たとえば、記事を一覧表示する"index"アクションと、記事を新規作成する"create"アクションを呼び出す場合、以下のように書くことが多いです。

Route::get('/articles', [ArticleController::class, 'index']);
Route::get('/articles/create', [ArticleController::class, 'create']);

ここで、"index"や"create"というメソッド名は、コントローラで定義した関数です。 これらのメソッドが呼び出されると、必要なデータを用意してビューを返すといった流れになります。

URL構造を整理しておくと、後から機能を追加するときも混乱が少なくなります。 「/articles/○○」「/users/××」のように、リソースに応じてパスを切り分けるのがわかりやすい方法でしょう。

ブレイドテンプレートでフォームを作る

新規作成など、入力フォームが必要な場面では、Bladeテンプレートを使って見た目を定義します。 "resources/views/articles"などのディレクトリを作り、その中に"create.blade.php"といったファイル名で格納するのがよくあるパターンです。

たとえば"create.blade.php"に、以下のようなフォームを用意するイメージです。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>新規記事作成</title>
</head>
<body>
    <h1>新規記事作成</h1>
    <form action="/articles" method="POST">
        @csrf
        <label for="title">タイトル</label>
        <input type="text" name="title" id="title" required>

        <label for="content">本文</label>
        <textarea name="content" id="content" required></textarea>

        <button type="submit">保存</button>
    </form>
</body>
</html>

@csrfはLaravelが提供するCSRF対策の仕組みで、セキュリティ的にも重要な役割を果たします。 コントローラ側でPOSTリクエストを受け取れるように設定しておけば、フォームに入力したデータをサーバー側で扱えるようになります。

データを保存するコントローラの実装

フォームから送信されたデータをDBに保存するためには、コントローラのメソッドでEloquentの操作を呼び出します。 一般的には"store"というメソッド名で実装するケースが多いです。

"ArticleController"に以下のような処理を追記してみます。

public function store(Request $request)
{
    $article = new Article();
    $article->title = $request->input('title');
    $article->content = $request->input('content');
    $article->save();

    return redirect('/articles');
}

このメソッドが呼び出されるのは、Route::post('/articles', [ArticleController::class, 'store']); のようにルートを定義した場合です。 フォームの"action"が"/articles"で"method"が"POST"なので、ユーザーが保存ボタンを押すとここにデータが送られます。

保存した後は、"redirect"を使って一覧ページなどにリダイレクトするのが一般的です。 こうすることで、ユーザーは更新後のデータをすぐ確認できるようになります。

CRUDを補強するためのコントローラメソッド

CRUDのフローを完成させるには、読み込みや更新、削除などを管理するメソッドをコントローラに用意すると便利です。 よく使われるメソッドには以下のようなものがあります。

  • index:一覧表示
  • create:新規作成フォームの表示
  • store:新規データの保存
  • show:個別データの表示
  • edit:既存データの編集フォーム表示
  • update:既存データの更新
  • destroy:データの削除

これらを組み合わせると、基本的なブログ記事管理やユーザー管理など、多岐にわたるアプリケーション機能を作ることが可能です。 フォームやビューの部分を使いやすいデザインに整えることで、実務でも応用しやすい構造へと発展させられるでしょう。

よく使うコマンドの早見表

ここで、Laravel開発時によく使うコマンドをまとめておきましょう。 視覚的に把握することで、全体像を思い出しやすくなります。

コマンド用途
composer create-project laravel/laravel sample-appLaravelプロジェクトの新規作成
php artisan serveローカル開発用のサーバー起動
php artisan make:controller SampleControllerコントローラの作成
php artisan make:model Sample -mモデルとマイグレーションの同時作成
php artisan migrate定義したマイグレーションを実際のDBに適用
php artisan migrate:rollback直近のマイグレーションを取り消す
php artisan route:listルートの一覧を表示して、URLとメソッドを確認

初心者の方は、操作を間違えたときに戻せるよう、バージョン管理をきちんと行っておくことが重要です。 Gitなどのバージョン管理ツールを活用すれば、万が一設定を誤った場合でもスムーズに巻き戻せるでしょう。

まとめ

ここまで、Laravelのプロジェクトを作成してCRUDを構築する一連の流れを解説しました。 最初にプロジェクトを新規作成して、コントローラやマイグレーション、モデルを用意したら、ルーティングやビューを整えることで完成度を高めることができます。

一連の流れを把握しておけば、実務でブログ記事管理やユーザー認証などを追加したいときにも、どこに手を加えればいいのかがイメージしやすくなるでしょう。 複雑な機能を考える前に、まずはシンプルなCRUDを動かすところから始めるのが一つの近道です。

実際に手を動かしながら理解を深め、少しずつカスタマイズしていくと、自分なりの応用ができるようになります。 Laravelの基本構成を覚えておくと、様々な場面で役に立つはずです。 皆さんがLaravelでの開発をスムーズに進められることを願っています。

Laravelをマスターしよう

この記事で学んだLaravelの知識をさらに伸ばしませんか?
Udemyには、現場ですぐ使えるスキルを身につけられる実践的な講座が揃っています。