iTAC_Technical_Documents

アイタックソリューションズ株式会社

ブログ名

PHP LaravelでWEBアプリ開発 【マイグレーション】

今回はデータベースの利用方法について解説します。
Laravelでは標準で、MySQL、PostgleSQL、SQLiteSQL Serverに対応しています。
これらは設定ファイルも用意されており、「どのデータベースを使用するか」を指定するだけで、そのデータベースを使用できるようになります。
今回は環境構築の記事でも記載した通り、MySQLを利用することとします。

MySQLの設定

Laravelで利用するデータベースの情報は、「config」フォルダにある「database.php」というファイルに用意されています。
中身を確認してみましょう。

'default' => env('DB_CONNECTION', 'mysql'),

'default'というキーワードにenv関数が用意されています。
これはLaravelの環境変数を設定する関数で、ここでは'DB_CONNECTION'というキーワードの値を変更しています。
この値が実際に利用されるデータベースの設定となります。

MySQLの設定項目は、下記となります。

        'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],
            'driver' => 'mysql',

ドライバー名の指定です。
MySQLであれば`mysql'と指定します。

            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),

データベースサーバのホストの指定(IPアドレスまたはドメイン)と、使用ポートの指定です。
ポート番号は、MySQLの場合は'3306'となります。

            'database' => env('DB_DATABASE', 'forge'),

使用するデータベース名です。
サーバに用意されているデータベース名を指定します。

            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),

データベースにアクセスする際に使用するユーザ名とパスワードです。

            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',

使用するキャラクエンコーディングの指定です。
ユニコードを使用するなら、MySQLでは 'utf8mb4'としておきます。

上記以外の設定についてはここでは割愛します。

マイグレーション

データベースの設定が完了したら、早速テーブルを作成していきましょう。
テーブルの作成にはマイグレーションという機能を利用します。

マイグレーションとは、Laravelが提供するデータベースのバージョン管理機能です。
データベースのテーブルを作成したり削除したりする機能を持っており、PHPスクリプトを使用してテーブルの作成処理などを用意しておけます。

マイグレーションの手順

マイグレーションを利用するには、いくつかの作業を順に行っていきます。
以下が作業手順となります。

  1. 専用のスクリプトファイルの作成  
    マイグレーションを記録するためのスクリプトファイルを作成します。  
    これはコマンドを使って生成することが可能です。

  2. スクリプトの記述  
    生成されたスクリプトファイルに、データベース管理の処理を記述していきます。  
    テーブルの生成や削除などの処理を、PHPで記述していきます。

  3. マイグレーションの実行  
    マイグレーションはコマンドで実行します。  
    コマンドにより、用意されたマイグレーション用のスクリプトファイルを実行してテーブルの生成や削除などが行えます。

マイグレーションファイルの生成

マイグレーションスクリプトファイルを作成しましょう。
コマンドプロンプトを開いて、カレントディレクトリをプロジェクトのフォルダに移動してから、以下のコマンドを実行します。

php artisan make:migration create_test_table

これは、testテーブルを生成するためのマイグレーションファイルを作成するコマンドです。
マイグレーションファイルの作成は、以下のようなコマンドを実行します。

php artisan make:migration ファイル名

これで、指定のテーブルを生成するためのマイグレーションがいるが作成されます。
マイグレーションのファイル名は、どのような作業をするものかがわかるようにしておきましょう。
ここではtestテーブルを作成するので、「create_test_table」としておきます。

作成ファイルの確認

マイグレーションファイルは、プロジェクトの「database」フォルダの中に作成されます。
このフォルダの中に、「migrations」という名前のフォルダが用意されています。
これがマイグレーションファイルを格納するフォルダとなります。

マイグレーションファイルには、先頭にファイルを作成した日付と時間が自動付与されます。
これにより、いつ作成されたかが一目でわかるようになっています。

マイグレーション処理

では、作成されたxxxx_create_test_table.phpを開いてみましょう。
ここには、マイグレーションの基本的な枠組みが記述されています。

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateTestTable extends Migration
{
    public function up()
    {
        //
    }

    public function down()
    {
        //
    }

これが、マイグレーションの基本コードとなります。
これをベースにして、必要に応じて処理を追記してマイグレーション処理を完成させます。

マイグレーション処理は、Migrationを継承したクラスとして作成されます。
このクラスには以下の2つのメソッドが用意されています。

  • upメソッド  
    テーブルを生成するための処理を記述します。

  • downメソッド  
    テーブルを削除するための処理を記述します。

この2つのメソッドが、テーブル操作の基本となります。

テーブルの生成処理

では、これらの処理を作成していきましょう。
まずはupメソッドです。
今回は以下のような処理を記述しておきます。

    public function up()
    {
        Schema::create('test', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->integer('age');
            $table->timestamps();
        });
    }

これがtestテーブル生成の処理です。
これを記述しておけば、testテーブルの生成を行えるようになります。

フィールドの型について

フィールドの型は、次のように指定します。

$table-> 型名 ( フィールド名 );

代表的なものは以下となります。

$table-> integer( フィールド名 );
$table-> bigInteger( フィールド名 );
$table-> float( フィールド名 );
$table-> double( フィールド名 );
$table-> char( フィールド名 );
$table-> string( フィールド名 );
$table-> text( フィールド名 );
$table-> longText( フィールド名 );
$table-> boolean( フィールド名 );
$table-> date( フィールド名 );
$table-> dateTime( フィールド名 );
$table-> timestamp( フィールド名 );

テーブルの削除処理

もう1つ、downメソッドも作成しておかなければなりません。
このメソッドの処理は非常に簡単で、以下のように記述します。

    public function down()
    {
        Schema::dropIfExists('test');
    }

引数にはテーブル名を文字列で指定します。
指定した名前のテーブルが存在する場合は削除します。
存在しない場合は何もしません。

マイグレーションの実行

では、実際にマイグレーションを実行してみましょう。
コマンドプロンプトでカレントディレクトリをプロジェクトフォルダに設定して、以下のようにコマンドを実行します。

php artisan migrate

これでマイグレーションが実行されます。
実行すると以下のようなメッセージが出力されます。

Migration table created successfully
Migrating: xxxx_create_test_table
Migrated: xxxx_create_test_table

これで、テーブルの生成が完了します。


前の記事へ 目次へ戻る