コンテンツにスキップ
BlackOps1.xは試験的なバージョンです。Production Readyは2.xを予定しています。Releases
BlackOps
Esc
navigateopen⌘Jpreview
このページの内容

Migration

FrameworkとApplicationのPostgreSQL Migrationを明示Commandで確認・適用する。

ApplicationのDeployment工程からBlackOpsのPostgreSQL TableへMigrationを明示的に適用します。HTTP ServerやWorkerの起動時にはMigrationを実行しません。

Commandの登録境界

Public Console KernelはMigration Commandを常時登録し、対象Commandを実行したときだけconfig/database.phpの解決済みConnection ParameterとSchemaからRunnerを構成します。

// config/database.php(単一Connection互換形)
return [
    'connection' => [
        'driver' => 'pdo_pgsql',
        'host' => 'postgres',
        'port' => 5432,
        'dbname' => 'blackops',
        'user' => 'blackops',
        'password' => 'blackops',
    ],
    'schema' => 'blackops',
];

Schema名の既定値はblackopsです。変更する場合は、先頭を小文字英字またはunderscoreとし、以降を小文字英数字またはunderscoreとする安全なPostgreSQL Identifierを指定します。

Deployment手順

Deployment前にStatusとDry-runを確認し、その後にNon-interactiveで適用します。

php blackops database:status --no-interaction
php blackops database:migrate --dry-run --no-interaction
php blackops database:migrate --no-interaction
php blackops database:status --no-interaction

statusはApplied/Pending件数とVersionを表示し、Databaseを変更しません。--dry-runはBaselineとMetadata更新のSQL Planを表示しますが、Schema、Metadata Table、Framework Data Tableを作成・変更しません。

Pendingがない状態でmigrateを再実行すると、No pending migrations.と表示して成功します。

Application Migrations

Project Rootにmigrations/がある場合、Database CommandはFramework Migrationに加えてApp\MigrationsVersion*.phpを読み込みます。DirectoryがないApplicationはFramework Migrationだけを扱うため、空Directoryを作る必要はありません。

Application MigrationはFramework Migrationと同じConnection、Framework Schema内のschema_migrations Metadata Table、transactional/all-or-nothing設定を共有します。RunnerはFramework Migrationを先に実行し、その後にApplication MigrationをVersion Class順で実行します。

Application MigrationはDoctrine標準Constructorを使います。FrameworkはSchema名を自動注入しないため、ApplicationがTableのSchemaとSQLを明示します。Install直後のSkeletonにはOrder Journey用のApplication Migrationがあり、database:migrate後にquickstart_ordersquickstart_order_commitsを作ります。HTTP起動だけではこれらのTableを作りません。

<?php

declare(strict_types=1);

namespace App\Migrations;

use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;

final class Version20260718000000 extends AbstractMigration
{
    public function getDescription(): string
    {
        return 'CreateQuickstartOrderTables';
    }

    public function up(Schema $schema): void
    {
        $this->addSql(
            'CREATE TABLE public.quickstart_orders (reference VARCHAR(64) NOT NULL, PRIMARY KEY (reference))',
        );
        $this->addSql(
            'CREATE TABLE public.quickstart_order_commits (reference VARCHAR(64) NOT NULL, PRIMARY KEY (reference))',
        );
    }

    public function down(Schema $schema): void
    {
        $this->addSql('DROP TABLE public.quickstart_order_commits');
        $this->addSql('DROP TABLE public.quickstart_orders');
    }
}

Database Commandは実行時にVersion*.phpを直接読み込みます。Parse Error、App\Migrations以外のNamespace、File名と異なるClass、AbstractMigrationでないClassを検出すると失敗します。migrationsがFileまたはsymlinkの場合も無視せず拒否します。

HTTP、Worker、Scheduler、Build、ConsoleのlisthelpはMigration Directoryを読み込まず、MigrationやDDLを暗黙実行しません。

初期Dataも投入するDeploymentでは、Migration後にApplicationをBuildしてからRoot Seederを実行します。Seederの作り方と責任境界はSeederを参照してください。

php blackops database:migrate
php blackops build:compile
php blackops database:seed

BlackOpsはRollback Commandを提供しません。down()はDoctrine Migrations互換の定義ですが、Framework CLIから実行する経路はありません。Migrationを取り消す場合は、逆操作を新しいForward Migrationとして適用してください。設定の実例はDatabaseを参照します。