最近、開発効率化のためにDocker DesktopからOrbStackに乗り換えることにしたのですが、その際にFirebase EmulatorとPostgreSQLのデータを移行する必要がありました。OrbStackは軽量で高速なDockerの代替ツールとして注目されていますが、環境を移行する際にデータの引き継ぎは重要な課題です。この記事では、Docker Compose環境でFirebase EmulatorとPostgreSQLのデータをエクスポートし、OrbStack環境にインポートする方法について解説します。
環境設定
移行前のDocker Compose設定は以下のようになっています:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
version: '3.8'
services:
firebase:
image: firebase-emulator
volumes:
- ./firebase-data:/app/data
command: firebase emulators:start
ports:
- "9099:9099"
- "8080:8080"
postgres:
image: postgres:13
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
POSTGRES_DB: your_database
volumes:
- postgres-data:/var/lib/postgresql/data
- ./pg-backups:/backups
ports:
- "5432:5432"
volumes:
postgres-data:
|
Docker環境からのデータエクスポート手順
Firebaseエミュレーターのデータエクスポート
Firebase Emulatorからデータをエクスポートするには、以下の方法があります:
1
2
|
# 特定のディレクトリにデータをエクスポート
docker-compose exec firebase firebase emulators:export /app/data/export-data --project your_project_id
|
または、自動エクスポートを設定することもできます。Docker Compose設定で以下のように--export-on-exit
フラグを追加します:
1
2
3
4
5
6
|
services:
firebase:
image: firebase-emulator
volumes:
- ./firebase-data:/app/data
command: firebase emulators:start --import=/app/data --export-on-exit
|
PostgreSQLのデータエクスポート
PostgreSQLからデータをエクスポートするには、pg_dump
コマンドを使用します:
1
2
|
# カスタムフォーマット(圧縮)でエクスポート
docker-compose exec postgres pg_dump -U postgres -d your_database -F c > postgres.dump
|
OrbStackへの移行作業
移行手順の例
- Docker Desktop環境でのデータのエクスポート
1
2
3
4
5
6
7
8
9
10
|
# バックアップディレクトリの作成
BACKUP_DIR="orbstack_migration_$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR
# Firebaseデータのエクスポート
docker-compose exec firebase firebase emulators:export /app/data/export --project your_project_id
docker cp $(docker-compose ps -q firebase):/app/data/export $BACKUP_DIR/firebase
# PostgreSQLデータのエクスポート
docker-compose exec postgres pg_dump -U postgres -d your_database -F c > $BACKUP_DIR/postgres.dump
|
- OrbStack環境でのデータのインポート
OrbStackをインストールし、同じDocker Compose設定を使用して環境を起動した後:
1
2
3
4
5
6
7
8
9
10
|
# Firebaseデータのインポート準備
mkdir -p firebase-import
cp -r $BACKUP_DIR/firebase/* firebase-import/
# PostgreSQLデータのインポート準備
mkdir -p pg-backups
cp $BACKUP_DIR/postgres.dump pg-backups/backup.dump
# コンテナの起動とデータのインポート
docker-compose up -d
|
- PostgreSQLデータのリストア
1
2
|
# PostgreSQLへのリストアコマンド
docker-compose exec postgres pg_restore -U postgres -d your_database -c /backups/backup.dump
|
パス構造が異なる場合の対処法
より複雑な設定の場合、例えば以下のようなDocker Compose設定では:
1
2
3
4
5
6
7
8
9
|
firebase:
build:
context: ./docker/firebase/
dockerfile: Dockerfile
volumes:
- firebase-data:/opt/workspace:cached
- ./.data:/app/data
working_dir: /opt/workspace
command: "firebase emulators:start --import=/opt/workspace/data --export-on-exit --project min30-pty-dev"
|
.data
ディレクトリからfirebase-data
ボリュームの/opt/workspace/data
にデータをコピーするには、以下の方法が有効です:
方法1: 一時的なコンテナを使用したデータコピー
1
|
docker run --rm -v firebase-data:/opt/workspace -v $(pwd)/.data:/app/data alpine sh -c "cp -rf /app/data/* /opt/workspace/data/"
|
方法2: 既存のコンテナを使用したデータコピー
1
|
docker-compose exec firebase sh -c "cp -rf /app/data/* /opt/workspace/data/"
|
方法3: 専用の初期化サービスを追加
1
2
3
4
5
6
7
8
9
|
services:
# 既存のサービス...
init-firebase-data:
image: alpine
volumes:
- firebase-data:/opt/workspace
- ./.data:/app/data
command: sh -c "mkdir -p /opt/workspace/data && cp -rf /app/data/* /opt/workspace/data/"
|
このサービスを実行するには:
1
|
docker-compose up init-firebase-data
|
まとめ
Docker DesktopからOrbStackへの移行は、開発環境のパフォーマンスを向上させる良い選択です。この記事で説明したデータ移行手順を使用することで、Firebase EmulatorやPostgreSQLなどのサービスのデータを確実に引き継ぎながら、スムーズな移行が可能になります。
移行作業は大きく分けて以下の手順で行います:
- Docker環境でのデータのエクスポート
- OrbStackのインストールと設定
- エクスポートしたデータのOrbStack環境へのインポート
これらの手順を実行することで、開発作業の中断を最小限に抑えながら、より効率的な開発環境へ移行することができます。