Laravelのカラムタイプ一覧と使い分け!初心者でもわかるデータ型の基本
生徒
「Laravelでデータベースのテーブルを作るときに、カラムの型っていっぱいありますよね?どれを使えばいいのか分かりません…」
先生
「とても良い質問です。Laravelでは『マイグレーション』という仕組みを使ってテーブルを作りますが、その中でカラムタイプ(データ型)を指定します。これを正しく使い分けることが大切なんです。」
生徒
「カラムタイプって、数字とか文字の種類を指定するってことですか?」
先生
「そうです!例えば『名前』なら文字列(string)を使い、『年齢』なら整数(integer)を使います。それでは、Laravelでよく使うカラムタイプの一覧と、その使い分け方を詳しく見ていきましょう!」
1. Laravelのマイグレーションでカラムタイプを指定する方法
Laravelでデータベースのテーブルを作成・管理する仕組みを「マイグレーション」と呼びます。プログラミング未経験の方でも、PHPのコードを書くだけで直感的にデータベースの設計図が作れる非常に便利な機能です。
具体的には、マイグレーションファイル内のSchema::create()というメソッドの中で、$table->型名('カラム名')という形式で、保存したいデータの種類(データ型)を定義していきます。これにより、SQLというデータベース専用の言語を直接書かなくても、安全かつ正確にテーブルを構築できます。
例えば、会員登録システムを作る場合の基本的なサンプルコードを見てみましょう。
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
/**
* マイグレーションの実行(テーブル作成)
*/
public function up(): void {
Schema::create('users', function (Blueprint $table) {
$table->id(); // 自動で増える番号(主キー)
$table->string('name'); // 名前を保存する「文字列」型
$table->string('email')->unique(); // メールアドレス(重複不可)
$table->integer('age'); // 年齢を保存する「整数」型
$table->text('bio')->nullable(); // 自己紹介文(長い文章・空でもOK)
$table->timestamps(); // 登録日時と更新日時を自動記録
});
}
/**
* マイグレーションの取り消し(テーブル削除)
*/
public function down(): void {
Schema::dropIfExists('users');
}
};
このコードをコマンドで実行すると、データベース上には以下のような構造のテーブルが自動的に作成されます。
Field | Type | Null | Key | Default
-----------|---------------|------|-----|---------
id | bigInt | NO | PRI | NULL
name | varchar(255) | NO | | NULL
email | varchar(255) | NO | UNI | NULL
age | int | NO | | NULL
bio | text | YES | | NULL
created_at | timestamp | YES | | NULL
updated_at | timestamp | YES | | NULL
このように、Laravelでは「何番目のデータか(id)」「誰のデータか(name)」「どんな種類の値か(Type)」を、PHP側で一元管理できます。後から項目を増やしたい場合も、この設計図を修正して実行するだけなので、開発のミスを大幅に減らすことができます。
2. よく使うカラムタイプ一覧と使い分け
それでは、Laravelでよく使うカラムタイプをひとつずつ見ていきましょう。どんなデータに使うべきかを例を交えて紹介します。
① string(文字列)
stringは、短い文字列(最大255文字)を保存するときに使います。ユーザー名やメールアドレスなどに最適です。
$table->string('email');
② text(長い文章)
textは、ブログの本文やコメントなどの長文を保存するときに使います。
$table->text('content');
③ integer(整数)
integerは、年齢や数量など、小数点を含まない数値を保存するときに使います。
$table->integer('age');
④ bigInteger(大きな整数)
bigIntegerは、通常の整数よりも大きな値を扱える型です。IDやカウンター値などに向いています。
$table->bigInteger('views');
⑤ boolean(真偽値)
booleanは、「はい・いいえ」「オン・オフ」などの状態を保存するときに使います。たとえば「会員登録済みかどうか」など。
$table->boolean('is_active');
⑥ date(年月日)
dateは、「2025-10-17」のような日付を扱います。誕生日やイベントの日付を保存するときに便利です。
$table->date('birthday');
⑦ datetime / timestamp(日時)
datetimeやtimestampは、「年月日+時刻」を保存します。データの登録日や更新日時を管理するのに使われます。
$table->timestamp('created_at');
⑧ float / double / decimal(小数)
floatやdoubleは、小数点を含む数値を扱います。ただし、金額のように正確な数値が必要な場合はdecimalを使う方が安全です。
$table->decimal('price', 8, 2); // 例:999999.99まで保存可能
⑨ enum(選択肢)
enumは、特定の値の中から選ぶタイプのカラムです。たとえば「男性」「女性」「その他」のような選択肢を設定できます。
$table->enum('gender', ['male', 'female', 'other']);
⑩ json(JSONデータ)
jsonは、配列やオブジェクトのような構造化データを保存するのに使います。設定情報やオプションをまとめて保存する場合に便利です。
$table->json('settings');
3. カラムタイプを選ぶときのポイント
データ型を選ぶときは、保存したいデータの「性質」を考えることが大切です。たとえば:
- ユーザー名やタイトル →
string - プロフィールの本文 →
text - 年齢や数量 →
integer - 金額 →
decimal - 日付や時刻 →
date/datetime
データ型を正しく使い分けることで、データベースが効率よく動作し、アプリケーションも安定します。
4. まとめ:カラムタイプを理解してデータベースを正しく設計しよう
Laravelのマイグレーションで使うカラムタイプは、データの種類に合わせて選ぶことが重要です。最初は難しく感じるかもしれませんが、慣れてくると自然に判断できるようになります。
「文字か数値か」「日付か時間か」「選択式か」など、目的に応じて正しいタイプを使い分けるようにしましょう。
まとめ
ここまで、Laravelにおけるマイグレーションのカラムタイプ(データ型)について詳しく解説してきました。Webアプリケーション開発において、データベース設計は建物の基礎を作るような非常に重要な工程です。Laravelのマイグレーション機能を活用すれば、PHPコードを書くだけで直感的にテーブル構造を定義できるため、初心者の方でも比較的スムーズに取り組めるはずです。
今回ご紹介した各カラムタイプは、単にデータを保存する器を決めるだけでなく、アプリケーションの動作速度や、将来的な拡張性、さらにはデータの正確性にも直結します。例えば、一見すると同じ数字に見える「年齢」と「商品の価格」ですが、前者は「integer(整数)」で十分ですが、後者は消費税計算や割引率などを考慮して「decimal(小数を扱う型)」を選択するのが一般的です。このように、データの性質を見極める癖をつけることが、エンジニアとしてのステップアップに繋がります。
Laravelマイグレーションの具体的な活用例
実際の開発現場では、基本のカラムタイプに加えて「カラム修飾子(modifiers)」を組み合わせて使うことがよくあります。例えば、ユーザーの紹介文は空でも良い(NULLを許容する)設定にしたり、数値のデフォルト値を設定したりする場合です。
以下に、より実戦に近いマイグレーションファイルのサンプルプログラムを用意しました。これを参考に、各型の書き方とオプションの指定方法を復習してみましょう。
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
/**
* マイグレーションの実行(テーブル作成)
*/
public function up(): void {
Schema::create('products', function (Blueprint $table) {
// 自動増分のID(bigIncrements型)
$table->id();
// 商品名は文字列(255文字以内)
$table->string('product_name');
// 商品コードは一意(重複不可)にする
$table->string('product_code')->unique();
// 詳細説明は長い文章になるのでtext型
$table->text('description')->nullable(); // nullableで空値を許可
// 価格は正確な計算のためにdecimal型を使用(8桁、うち小数2桁)
$table->decimal('price', 8, 2)->default(0);
// 在庫数は整数型(符号なしのunsignedを使うと負の数を防げる)
$table->unsignedInteger('stock_quantity')->default(0);
// 公開フラグ(真偽値)
$table->boolean('is_published')->default(false);
// カテゴリー選択(enum型で特定の選択肢に限定)
$table->enum('category', ['food', 'electronics', 'apparel', 'other']);
// メタデータなどはJSON形式で保存すると柔軟性が高い
$table->json('specifications')->nullable();
// 作成日時と更新日時を自動管理
$table->timestamps();
// 論理削除用のカラム(deleted_at)を追加する場合
$table->softDeletes();
});
}
/**
* マイグレーションのロールバック(テーブル削除)
*/
public function down(): void {
Schema::dropIfExists('products');
}
};
上記のコードでは、nullable()やdefault()といったメソッドを繋げて記述しています。これらは「チェインメソッド」と呼ばれ、カラムに詳細なルール(制約)を課すことができます。例えば、unique()を指定すると、同じ商品コードが二度と登録されないようにデータベースレベルで守ってくれます。
データベースに反映された結果を確認する
上記のマイグレーションファイルを作成した後、ターミナルで下記のコマンドを実行することで、実際にデータベースにテーブルが作成されます。
php artisan migrate
実行後、データベース管理ツールなどで構造を確認すると、Laravelが指定した型に合わせて、MySQLやPostgreSQLといった各DBエンジンに最適なSQLを発行してくれたことが分かります。
INFO Preparing database.
Creating migrations table ................................... 16ms DONE
Running migrations.
2026_01_31_000000_create_products_table .................... 35ms DONE
このように、Laravelのカラムタイプをマスターすれば、複雑なSQL文を暗記していなくても、安全かつ効率的にデータベースを構築できます。まずはよく使う「string」「integer」「boolean」「text」「timestamps」の5つを完璧に使いこなせるようになりましょう。
また、開発が進むにつれて「カラムを追加したい」「型を変更したい」という場面も出てきます。その際も新しいマイグレーションファイルを作成して対応するのがLaravelの流儀です。履歴をコードで残せるため、チーム開発でも「誰がいつ、どの型に変えたのか」が一目瞭然になります。
生徒
「先生、まとめのプログラムを見てびっくりしました!ただ型を指定するだけじゃなくて、nullable()とかdefault()みたいに、色々なルールを付け加えられるんですね。」
先生
「その通りです。これを使いこなすと、変なデータがデータベースに入り込むのを防げるので、プログラム本体のコードもシンプルに保てるんですよ。例えば、価格にマイナスの値が入らないようにする工夫なども大切ですね。」
生徒
「なるほど。あと、金額にdecimalを使う理由もよく分かりました。以前、普通の小数型を使っていたら、計算結果が微妙にズレて困ったことがあったんです。あれは型の特性のせいだったんですね。」
先生
「素晴らしい気づきですね。コンピュータは小数の計算が苦手な場合があるので、お金を扱うときは精度の高いdecimalが鉄則です。他にも、フラグ管理にはboolean、選択肢が決まっているならenumといった具合に、適材適所で使い分けていきましょう。」
生徒
「はい!まずは基本の5つからしっかり覚えて、徐々に特殊な型にも挑戦してみます。マイグレーションコマンドを打つのが楽しくなってきました!」
先生
「その意気です。もしどの型を使うか迷ったら、公式ドキュメントのカラムタイプ一覧を辞書代わりに引く癖をつけるといいですよ。次は、実際に作ったテーブルからデータを取得する『Eloquent(エロクアント)』について学んでいきましょう!」