プログラミング学習者の皆さん、こんにちは!PHPのモダンなWebアプリケーションフレームワークとして世界中で人気を集めているLaravelに挑戦していますか?Laravelは、直感的で効率的な開発を可能にするための様々な仕組みが用意されています。その中でも特に強力なのが、データベース連携です。
多くの初心者の方が「DB接続」と聞くと、難しそう…と感じるかもしれません。しかし、Laravelにはデータベース操作を驚くほどシンプルにしてくれるツールが多数組み込まれています。この記事では、そんなLaravelの強みを最大限に活かし、データベースとの連携方法をステップ・バイ・ステップで丁寧に解説していきます。
「もう環境構築は済んでいるよ!」という方は、この記事を参考に、実際にLaravelとMySQLを連携させながら、データベース操作の基本をマスターしていきましょう。
この記事は「Laravel初心者向けシリーズ」の第2回です。第1回では環境構築とルーティングの基本を紹介しました。今回はその続きとして、Webアプリケーション開発の要となるデータベースとの連携に焦点を当てています。
🔧 ステップ1:.envファイルでデータベースの扉を開ける 🔑
Laravelのプロジェクトには、アプリケーションの挙動をカスタマイズするための.env
ファイルが用意されています。これはプロジェクトのルートディレクトリにある、いわば「設定の司令塔」です。データベースへの接続情報もこのファイルに記述します。
📄 .envファイルの基本構成
以下は、ローカル環境でMySQLに接続するための設定例です。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_db
DB_USERNAME=root
DB_PASSWORD=your_password
この設定を自分の環境に合わせて変更することで、Laravelがデータベースに接続できるようになります。各設定項目の意味は以下の通りです。
- DB_CONNECTION:使用するデータベースの種類(通常は
mysql
)を指定します。 - DB_HOST:データベースサーバーが稼働している場所(ホスト名)。ローカル環境の場合は
127.0.0.1
またはlocalhost
でOKです。 - DB_PORT:データベースへの接続に使用するポート番号です。MySQLのデフォルトは
3306
です。 - DB_DATABASE:アプリケーションが使用するデータベースの名前です。この名前のデータベースを事前に作成しておく必要があります。
- DB_USERNAME:データベースに接続するためのユーザー名。
- DB_PASSWORD:そのユーザーのパスワード。
💡データベースを準備しよう
もしまだデータベースを作成していなければ、MySQLのコマンドラインやGUIツール(phpMyAdminなど)を使って、laravel_db
という名前のデータベースを先に作っておきましょう。以下のSQL文で簡単に作成できます。
CREATE DATABASE laravel_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
設定後は、Laravelが正しくDBに接続できるか確認するために、以下のコマンドを使ってマイグレーションを試してみましょう。これは、後ほど詳しく解説する「データベースのバージョン管理」を行うコマンドです。
php artisan migrate
エラーが出ず、`Migration table created successfully.`のようなメッセージが表示されれば、接続は成功です!
📦 ステップ2:マイグレーションでテーブルを定義する
Laravelの大きな特徴の一つにマイグレーションがあります。これは、PHPのコードでデータベースのテーブル構造を定義し、バージョン管理する仕組みです。SQL文を直接書く必要がないので、複数人で開発を行う際にも非常に便利で、データベース構造の変更履歴を追うことも容易になります。
🛠 ユーザーテーブルを作成してみよう
まずは、ユーザー情報を保存するためのテーブルを作ってみましょう。以下のartisanコマンドを実行してください。
php artisan make:migration create_users_table
このコマンドを実行すると、database/migrations
ディレクトリにタイムスタンプ付きのファイル(例: `2025_08_10_000000_create_users_table.php`)が生成されます。このファイルには、テーブルを作成するためのロジックを記述します。
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamps();
});
}
このコードは、`users`という名前のテーブルに`id`, `name`, `email`, `created_at`, `updated_at`の各カラムを作成することを定義しています。`$table->id()`は主キーとなるオートインクリメントのIDを、`$table->timestamps()`は作成日時と更新日時を自動で追加してくれます。
🚀 マイグレーションの実行
テーブルの準備ができたら、以下のコマンドでデータベースに変更を適用します。
php artisan migrate
これで、データベースに`users`テーブルが新しく作成されました。データベースの管理ツールで確認してみると、ちゃんとテーブルが追加されているはずです。
📄 ステップ3:モデルでデータを操作する
Laravelでは、データベースの各テーブルに**モデル**というPHPのクラスを対応させます。このモデルを通じて、データベースへのデータの登録、取得、更新、削除(CRUD操作)を簡単に行うことができます。この仕組みを**Eloquent ORM**と呼びます。
📁 ユーザーモデルを作成
以下のartisanコマンドで`User`モデルを作成しましょう。
php artisan make:model User
これにより、`app/Models/User.php`ファイルが生成されます。Laravelはモデル名(単数形)から自動的にテーブル名(複数形)を推測してくれるので、`User`モデルは`users`テーブルと紐づきます。
📄 データを登録してみよう(Tinker使用)
Laravelに標準搭載されている**Tinker**は、REPL(Read-Eval-Print Loop)ツールです。これを使えば、コマンドライン上でモデルを操作して、手軽にデータベースにデータを登録したり確認したりできます。
php artisan tinker
>>> use App\Models\User;
>>> User::create(['name' => 'Taro', 'email' => '[email protected]']);
このコマンドを実行すると、`users`テーブルに新しいレコードが登録されます。何度か実行して、データを増やしてみてください。
📤 ステップ4:データを画面に表示する(Controller + View)
いよいよ、データベースに登録したデータをブラウザに表示させてみましょう。Webアプリケーションの基本となる、**Controller**と**View**を使ってデータをやり取りします。
📁 UserControllerを作成
まずはデータを処理するための`UserController`を作成します。
php artisan make:controller UserController
これにより、`app/Http/Controllers/UserController.php`ファイルが生成されます。
📄 コントローラーに処理を記述
`app/Http/Controllers/UserController.php`を編集し、`index`メソッドを追加します。
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function index()
{
$users = User::all(); // 全ユーザーを取得
return view('users.index', compact('users')); // ビューにデータを渡す
}
}
ここで`User::all()`というマジックのような記述が出てきました。これはEloquent ORMの機能で、`users`テーブルから全データを取得する非常に便利なメソッドです。取得したデータを`view()`ヘルパー関数を使ってビューに渡します。`compact(‘users’)`は`[‘users’ => $users]`と同じ意味で、ビューに`users`という変数名でデータが渡されます。
📄 ルーティングを設定(routes/web.php)
`routes/web.php`ファイルに、ユーザー一覧ページにアクセスするためのルートを定義します。
use App\Http\Controllers\UserController;
use Illuminate\Support\Facades\Route;
Route::get('/users', [UserController::class, 'index']);
これでブラウザで`/users`というURLにアクセスすると、`UserController`の`index`メソッドが呼び出されるようになります。
📄 ビューの作成(resources/views/users/index.blade.php)
最後に、データを表示するためのビューファイルを作成します。`resources/views/users/index.blade.php`というパスでファイルを作成し、以下のコードを貼り付けてみてください。
<!DOCTYPE html>
<html>
<head>
<title>User List</title>
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.2/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<h1 class="text-success">ユーザー一覧</h1>
<table class="table table-bordered">
<thead>
<tr><th>ID</th><th>名前</th><th>メール</th></tr>
</thead>
<tbody>
@foreach ($users as $user)
<tr>
<td>{{ $user->id }}</td>
<td>{{ $user->name }}</td>
<td>{{ $user->email }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</body>
</html>
このHTMLコードでは、**Bladeテンプレートエンジン**の`@foreach`構文を使って、コントローラーから渡された`$users`データをループ処理し、テーブルに表示しています。`{{ $user->name }}`のような記述で、オブジェクトのプロパティにアクセスできるのが特徴です。
さあ、これで`http://localhost:8000/users`にアクセスすると、データベースに登録したユーザー情報が一覧で表示されるはずです。
📚 よくある質問(FAQ)とまとめ
Q&Aで疑問を解決!
- Q. マイグレーションって何?
A. データベースのテーブル定義をPHPコードで管理する仕組みです。これにより、SQL文を書く手間が省け、複数人での開発でもDB構造の同期が簡単になります。 - Q. Tinkerって何?
A. Laravelに標準搭載されているコマンドラインツールで、モデルを使ったデータベース操作などを手軽に試すことができます。開発時のちょっとしたデータ確認に非常に便利です。 - Q. Eloquentとは?
A. Laravelの**ORM (Object Relational Mapper)**です。データベースのテーブルをオブジェクトとして扱えるため、DB操作をシンプルかつ直感的に記述できます。
📝 まとめ
この記事では、Laravelのデータベース連携の基本を、`env`ファイルの設定から、マイグレーション、モデル、そして最終的なデータの表示まで、一連の流れで解説しました。
- 環境設定は`.env`ファイルで行う
- テーブルの作成はマイグレーションを使う
- データの操作はEloquentモデルを介して行う
- データの表示はControllerとViewの連携で実現する
Laravelには、開発者がより本質的なロジックに集中できるような工夫がたくさん詰まっています。今回学んだ内容を土台に、ぜひ色々な機能を試してみてください。
次回以降では、今回作った`users`テーブルに、フォームからデータを登録する方法や、データの整合性を守るバリデーションなど、さらに実践的な内容を紹介予定です!お楽しみに!