Laravelのマイグレーションでカラムなどの作成方法を解説
マイグレーションとは
マイグレーションとは、プログラムやデータ、OSなどの環境やプラットフォームなどを移行し、移行先に合わせた形式に変換すること意味するIT用語です。
移行作業を行う対象によって、「Windowsマイグレーション」「データベースマイグレーション」など呼ばれるマイグレーションの種類があります。
語源となる英語のマイグレーション(migration)には、「移動」や「移住」といった意味があります。
Laravelのマイグレーションとは
Laravelでは、マイグレーションにより、データベースのテーブル作成や編集などを管理することができます。管理するにあたって、Laravelでは、「マイグレーションファイルの作成」と「マイグレーション実行」が必要になります。
マイグレーションファイルは、作成するテーブルの設計書にあたります。どのようなデータ型のデータを保存するテーブルかといった定義を行うことになります。
マイグレーションで行えることまとめ
Laravelでマイグレーションの機能を使って行えるテーブル操作について、順を追ってご紹介します。Laravelのマイグレーションは、データベーステーブルの管理が主目的であると認識しておきましょう。テーブルに関する操作は、基本的にマイグレーションの機能を使って行えます。
マイグレーションファイルの新規生成
Laravelのマイグレーションでテーブルを作成する際は、artisanコマンドを使って、マイグレーションファイルを新規作成します。
【基本構文】php artisan make:migration create_xxxx_table
create_xxxx_tableのxxxxに作成するテーブル名を記述します。記述した名称のテーブルを作成するマイグレーションファイルが生成されます。
テーブルの作成
Laravelのマイグレーション機能を使ったテーブル作成は、次の3ステップで行えます。
①マイグレーションファイルの作成
②マイグレーションファイルの編集
③マイグレーションの実行
この手順は、実はテーブル作成だけでなく、テーブル定義の更新など「マイグレーション」全体としての手順となります。
①で作成されたマイグレーションファイルに②で必要事項を記載し、③でデータベースに適用します。
方法
Laravelで新しいテーブルを作成するには、マイグレーションファイルのupメソッドの中に、Schemaファサードのcreateメソッドを記述します。createメソッドの1つ目の引数にはテーブル名を記述する必要があります。
【サンプルコード】Schema::create('users', function (Blueprint $table) {
});
マイグレーションファイルの編集
マイグレーションファイルを作成すると、マイグレーションに必要な雛形コードが生成されます。テーブル作成の場合は、自動生成された記述の中にある「up」メソッドに、テーブル作成に必要な情報を記述します。
以下のサンプル記述は、「name」カラムを持つ簡単なテーブルを作成するイメージです。自動生成されたコードは、upメソッドとしての枠組みだけです。処理コードはすべてテーブル作成用に追記しています。
【サンプル記述】 |
---|
public function up() |
マイグレーション実行
Laravelで作成したいテーブルの設計を反映させたマイグレーションファイルは、以下のコマンドでデータベースに反映させます。
【実行コード】php artisan migrate
マイグレーションの初回ではなく、新たなマイグレーションファイルを追加した場合は、以下のように、一旦リフレッシュしてから反映させることになります。php artisan migrate:refresh
テーブルのリネームと削除
Laravelでテーブル名の変更を行いたい場合も、マイグレーションの機能を使って簡単に行うことができます。また、Laravelでデータベースから不要となったテーブルを削除する場合も、マイグレーションの機能を使って簡単に実行できます。
ここでは、具体的にLaravelで利用するテーブルリネームの方法とテーブル削除の方法を見ていきましょう。
テーブルリネームの方法
Laravelで既存のテーブル名前を別の名称に変えたい場合は、renameメソッドを記述します。新規テーブルを作成する場合と同じように、マイグレーションファイルのupメソッドの中に記述します。
【記述コード】Schema::rename(変更前テーブル名, 変更後テーブル名);
テーブルリネームの注意事項
Laravelでテーブルのリネームを行う際は、リネームしようとしているテーブルを外部キーで参照しているテーブルが存在しないかチェックしておく必要があります。
外部キーで参照しているテーブルがあるにも関わらずリネームしてしまうと、外部キーは存在しないテーブルを参照してしまうことになります。
テーブル削除の方法
Laravelで既存のテーブルを削除する場合に、マイグレーションで使えるメソッドは2つあります。dropかdropIfExistsを使ってテーブルの削除を行います。テーブルの削除は、テーブル作成やリネームと異なり、マイグレーションファイルのdownメソッドの中に記述します。
【記述コード】Schema::drop('users');
Schema::dropIfExists('users');
【サンプル記述】 |
---|
public function down() |
テーブル削除の注意点
既存のテーブルを削除する場合も、当該テーブルを外部キーで参照しているテーブルがないか、確認したうえで実行する必要があります。こうしたテーブルを考慮しないでテーブルを削除してしまうと、存在しないテーブルを参照するキーを持つテーブルが残ってしまいます。
データベース接続とテーブル操作
デフォルト接続のデータベースに対し、操作を行う場合は、マイグレーションファイルにいきなり、createやrenameといったメソッドを記述することができます。
しかし、デフォルト接続以外のデータベース接続で、テーブルの作成や削除といったスキーマ操作を行う場合は、connectionメソッドを使ってから、テーブル操作メソッドを記述していく必要があります。
connectionメソッドを使う
connectionメソッドは、引数にデフォルト接続ではない、接続しなおす接続名を記述します。次の動作としてcreateやrenameといったメソッドを記述します。
【コード記述例】Schema::connection('corporation')->create('users', function (Blueprint $table) {
$table->increments('id');
});
カラム作成
Laravelでテーブルにカラムを作成する場合は、テーブル作成時にcreateメソッドの中で定義を記述する方法と、あとから既存のテーブルにカラムを追加する方法があります。
あとから既存のテーブルにカラムを追加する場合は、Schemaファサードのtableメソッドを使います。tableメソッドの使い方は、createメソッドと同じで、最初の引数にテーブル名を指定します。
Schemaファサードのtableメソッドを使う
例えば、userテーブルに新たに住所(address)というカラムを追加する場合を見てみましょう。
【コード記述】Schema::table('users', function (Blueprint $table) {
$table->string('address');
});
カラム作成時に指定できる主なカラムタイプ
Laravelでテーブルにカラムを作成・追加する際は、カラムタイプを指定します。カラム追加の基本構文と、指定できる主なカラムタイプをご紹介します。
【カラム追加の構文】$table->カラムタイプ(カラム名);
コード記述例 | カラムタイプの意味 |
---|---|
bigIncrements(カラム名) | 符号なしBIGINTを使用した自動増分ID(主キー)のカラム |
mediumIncrements(カラム名) | 符号なしMEDIUMINTを使用した自動増分ID(主キー)のカラム |
increments(カラム名) | 符号なしINTを使用した自動増分ID(主キー)のカラム |
bigInteger(カラム名) | BIGINTデータのカラム |
mediumInteger(カラム名) | MEDIUMINTデータのカラム |
integer(カラム名) | INTEGERデータのカラム |
$ipAddress(カラム名) | IPアドレスデータのカラム |
macAddress(カラム名) | MACアドレスデータのカラム |
binary(カラム名) | BLOBデータのカラム |
boolean(カラム名) | booleanデータのカラム |
char(カラム名, 100) | オプションの文字長を指定するCHARデータのカラム |
date(カラム名) | DATE型データのカラム |
dateTime(カラム名) | DATETIME型データのカラム |
decimal(カラム名, 8, 2) | 有効桁数及び小数点以下桁数指定のDECIMALデータのカラム |
double(カラム名, 8, 2) | 有効桁数及び小数点以下桁数指定のDOUBLEデータのカラム |
float(カラム名, 8, 2) | 有効桁数及び小数点以下桁数指定のFLOATデータのカラム |
string(カラム名, 100) | オプションの文字長を指定したVARCHARデータのカラム |
multiLineString(カラム名) | multilinestring型データのカラム |
text(カラム名) | TEXTデータのカラム |
カラム修飾子
Laravelではカラムを追加するときに、カラムタイプの指定に追加して「カラム修飾子」と呼ばれる設定も可能です。
たとえば、プログラムから「必須項目ではない」という前提で参照するカラムは「NULL値設定可能(nullable)」のカラムにすることで、値を設定しなくても可能なカラムになります。
nullableメソッドを使う
NULL値設定可能なカラムとして追加する際は、マイグレーションファイルには以下の例のようにコードを記述します。
【コード記述例】Schema::table('users', function (Blueprint $table) {
$table->string('hobby')->nullable();
});
defaultメソッドを使う
カラムに値が必須な場合でも、何も設定されなかった場合にエラーとせず、既定値を設定することも可能です。カラム作成・追加のときに「default」メソッドで既定値を指定します。
【コード記述例】Schema::table('users', function (Blueprint $table) {
$table->string('hobby')->default('StampCollecting');
});
autoIncrementメソッドを使う
整数カラムを自動増分ID(主キー)へ設定したい場合、カラム修飾子の「autoIncrement」メソッドを修飾子として使うことができます。
【コード記述例】Schema::table('users', function (Blueprint $table) {
$table->unsignedInteger('memberId')->autoIncrement();
});
カラム変更
Laravelでは、マイグレーションの機能を使って、既存のカラムを変更することもできます。カラムを変更する前に、composer.jsonファイルで、doctrine/dbalを追加しておく必要があります。
Doctrine DBALライブラリーは、現在のカラムの状態を決め、マイグレーションで指定されたカラムに対し、修正を行うSQLクエリを生成する際に必要となります。
composer.jsonファイルでdoctrine/dbalを追加する
カラムを変更する場合は、まず、Laravelルートディレクトリへ移動して以下のコードを実行しておきましょう。
【実行コード】composer require doctrine/dbal
カラムの属性変更
カラムの属性変更をする場合は、changeメソッドを使います。カラムの桁数変更では、記述例のように記述します。現在何桁かは指定不要です。変更後の桁数(例では75)のみ指定し、changeメソッドを記述します。
【コード記述例】Schema::table('users', function (Blueprint $table) {
$table->string('name', 75)->change();
});
カラム名変更
カラム名を変更するには、renameColumnメソッドを使います。メソッドの引数として、変更前のカラム名と変更後のカラム名を指定します。
【コード記述例】Schema::table('users', function (Blueprint $table) {
$table->renameColumn('name', 'username');
});
カラム削除
カラムを削除したいときは、dropColumnメソッドを使います。カラム削除の場合も、削除実行の前にcomposer.jsonファイルへdoctrine/dbal依存パッケージを追加する必要があります。その後、composer updateを実行します。
dropColumnメソッドを使う
カラム削除には、dropColumnメソッドを使います。引数に配列を使えるので、複数のカラムを一度に削除指定できます。
【コード記述例】Schema::table('users', function (Blueprint $table) {
$table->dropColumn(['address', 'ip');
});
1カラムのみ削除する場合は、「dropColumn('ip')
」のように指定します。
インデックス作成
Laravelのマイグレーション機能を使って、カラムにインデックスを作成できます。カラムを定義する際にインデックスを付けることも、一旦カラムを定義した後に、インデックスを追加することも可能です。
【主なインデックス】
・primary(カラム名):主キー
・primary([カラム名1, カラム名2]):複合キー
・unique(カラム名):uniqueキー
・index(カラム名):基本的なインデックス
uniqueメソッドをチェーンで付け加える
カラム定義時に、インデックス設定としてuniqueキーとなるよう設定がすることもできます。この場合はチェーンで付け加えます。
【コード記述例】$table->string('device')->unique();
ほかのインデックス追加メソッドも同様に、チェーンで付け加えることができます。
Laravelのマイグレーションを使ってテーブル更新してみよう
Laravelでは、マイグレーション機能を使うことで、テーブルの作成自体も、作成後に発生する「調整」ともいえるテーブルやカラムの変更・削除といった操作も、簡単に行えます。
テーブルのスキーマ操作は、DBAとしての技術がなくても可能ですが、既存テーブルの操作は、慎重に行う必要があります。テーブルやカラムの更新・削除にまつわる注意事項をよく確認し、Laravelのマイグレーション機能を使ってみましょう。
【PR】多くの人がプログラミングを諦めてしまう理由をご存知ですか?
近年プログラミングを勉強する人が増えています。
プログラミング学習者の多くは独学から取り組もうとしますが、だいたい80%ほどは3ヶ月も続かずに諦めてしまいます。早い人は1日目で。
多くの人がプログラミングを独学しようとして諦める理由は、次の3つ。
●モチベーションが維持できない
●エラーの原因・解決方法が分からない
●どう学習すればよいか分からない
TechBoostというプログラミングスクールでは、みんなと一緒にプログラミングをするのでモチベーションの維持ができ、分からないことがあればマンツーマンで教えてくれ、徹底的に研究された初心者向けの教材が揃っています。
TechBoostを卒業後、実際にエンジニアとして転職した方もいるほど。
本気でプログラミングを学びたい方は、一度無料のカウンセリングでご相談ください。プログラミングを嫌いになる前に。
tech boostについて
オーダーメイド型の学習コンテンツを提供する「tech boost」 は、エンジニアのキャリア支援に特化したサービスを複数展開している株式会社Branding Engineerが運営しているプログラミングスクールです。最短3ヶ月間で、未経験から『プログラミングの基礎』、『実際に業務で必要となるスキル』、『今のトレンドとなっている知識』まで学べ、ご希望の方にはプロのキャリアアドバイザーによる就業支援を行うことができます。
tech boost卒業生インタビュー
tech boostの卒業生の声を聞きました。あなたがプログラミングを学びたい理由を、一度考えてみてください。
営業→Javaエンジニア→Rubyエンジニアと転向し、第一志望のFinTech企業で働く山下さん
元営業、ビジネスのわかるエンジニアを目指す菅原さん
サンフランシスコに交換留学し、シリコンバレーのVCでインターン中の梅本さん
予備校の営業から半年でエンジニア転職を果たした小田島さん
tech boostの口コミ
TechBoostお金を払ったかいがあってすごく手厚いサービスで今のところすごく満足。
— Yatsushi@将来宇宙旅行します (@yatsushiGUN) 2019年1月18日
今日もスクールに通ってる人同士の交流会みたいなのもあってすごく有意義に過ごせた。#techboost#プログラミング
@tech_boost のカウンセリング完了!
— kinsu (@waraiotoko8) 2018年8月17日
いやー、ノウハウの宝庫!
カウンセリングだけでも凄い収穫!
プログラミングだけではなく起業や転職支援についても色々聞けた。
即断即決!その場で申し込み完了。
遅くても来年の春までに起業します!
僕の場合、これが現実的な最適解!
全てが楽しみだー!