mcpField
A
azure-emulators-2025

azure-emulators-2025

github.com/josiahsiegel開発59156 回インストール19 週間前に更新
リポジトリ

azure-emulators-2025 について

Docker ベースのエミュレーターや代替手段を使った Azure サービスのローカル開発を支援する開発者向けガイドです。設定、連携、制限事項、ローカル環境の運用方法を扱います。

主な機能

  1. 01Azure サービスエミュレーターの解説
  2. 02Azurite ストレージ設定
  3. 03Cosmos DB と Service Bus の設定
  4. 04SQL とデータベースの代替案
  5. 05Docker 環境の運用指針

活用シーン

  1. 01Azure サービスのローカル代替手段の選定
  2. 02開発用エミュレーターコンテナーの設定
  3. 03Azure からローカルエミュレーターへの移行計画

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/josiahsiegel/claude-plugin-marketplace --skill azure-emulators-2025

インストール後、Claude Code で/azure-emulators-2025を入力して読み込まれたか確認します。

詳細

ローカル開発向け Azure サービスエミュレーター(2025 年)

概要

このスキルでは、2025 年のローカル開発で利用できる、Docker コンテナーとして提供される Azure サービスエミュレーターについて包括的に解説します。

利用可能な Azure エミュレーター

1. Azurite(Azure Storage エミュレーター)

非推奨となった Azure Storage Emulator の公式後継

イメージ: mcr.microsoft.com/azure-storage/azurite:latest

サポートされているサービス:

  • Blob Storage
  • Queue Storage
  • Table Storage

構成:

services:
  azurite:
    image: mcr.microsoft.com/azure-storage/azurite:latest
    container_name: azurite
    command: azurite --blobHost 0.0.0.0 --queueHost 0.0.0.0 --tableHost 0.0.0.0 --loose
    ports:
      - "10000:10000"  # Blob service
      - "10001:10001"  # Queue service
      - "10002:10002"  # Table service
    volumes:
      - azurite-data:/data
    restart: unless-stopped

標準的な開発用接続文字列:

DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://azurite:10000/devstoreaccount1;QueueEndpoint=http://azurite:10001/devstoreaccount1;TableEndpoint=http://azurite:10002/devstoreaccount1;

機能:

  • クロスプラットフォーム(Windows、Linux、macOS)
  • Node.js/JavaScript で記述
  • 最新の Azure Storage API をサポート
  • ディスクへの永続化
  • Azure Storage Explorer と互換
  • 検証を緩和する --loose フラグ(ローカル開発に便利)

2025 年の API バージョンのサポート:

  • 最新リリース(v3.35.0)は 2025-11-05 API バージョンを対象とします
  • Blob サービス:2025-11-05
  • Queue サービス:2025-11-05
  • Table サービス:2025-11-05(プレビュー)
  • 地理冗長レプリケーションのテスト向け RA-GRS サポート

CLI の使用方法:

# Install via npm (alternative to Docker)
npm install -g azurite

# Run with custom location
azurite --location /path/to/data --debug /path/to/debug.log

アプリケーションとの統合:

// Node.js with @azure/storage-blob
const { BlobServiceClient } = require('@azure/storage-blob');

const connectionString = process.env.AZURITE_CONNECTION_STRING;
const blobServiceClient = BlobServiceClient.fromConnectionString(connectionString);
// .NET with Azure.Storage.Blobs
using Azure.Storage.Blobs;

var connectionString = Environment.GetEnvironmentVariable("AZURITE_CONNECTION_STRING");
var blobServiceClient = new BlobServiceClient(connectionString);
2. Azure SQL Server 2025

AI 機能を備えた最新の SQL Server

イメージ: mcr.microsoft.com/mssql/server:2025-latest

2025 年の機能:

  • AI 類似性クエリ向けの組み込みベクトル検索
  • 従来のフルテキスト検索に加え、セマンティッククエリに対応
  • 最適化されたロック(TID ロック、LAQ)
  • ネイティブ JSON および RegEx サポート
  • Fabric Mirroring との統合
  • REST API サポート

構成:

services:
  sqlserver:
    image: mcr.microsoft.com/mssql/server:2025-latest
    container_name: sqlserver
    environment:
      - ACCEPT_EULA=Y
      - MSSQL_PID=Developer
      - MSSQL_SA_PASSWORD_FILE=/run/secrets/sa_password
    secrets:
      - sa_password
    ports:
      - "1433:1433"
    volumes:
      - sqlserver-data:/var/opt/mssql
      - ./init:/docker-entrypoint-initdb.d
    healthcheck:
      test: ["CMD-SHELL", "/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P $$MSSQL_SA_PASSWORD -Q 'SELECT 1' -C || exit 1"]
      interval: 10s
      timeout: 3s
      retries: 3
      start_period: 10s
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 4G
        reservations:
          cpus: '1'
          memory: 2G
    networks:
      - backend
    security_opt:
      - no-new-privileges:true
    restart: unless-stopped

secrets:
  sa_password:
    file: ./secrets/sa_password.txt

volumes:
  sqlserver-data:
    driver: local

接続文字列:

Server=sqlserver;Database=MyApp;User Id=sa;Password=YourStrong!Passw0rd;TrustServerCertificate=True;

重要な注意事項:

  • Azure SQL Edge は 2025 年 9 月 30 日に提供終了 — 代わりに SQL Server 2025 を使用してください
  • TLS 1.3 をサポートする mssql-tools18 を使用してください(-C フラグで証明書を信頼します)
  • Developer エディションは本番以外の用途であれば無料です
  • macOS では Rosetta 2 経由で arm64 をサポートします

ベクトル検索の例(2025 年の機能):

-- Create vector index for AI similarity search
CREATE TABLE Documents (
    Id INT PRIMARY KEY,
    Content NVARCHAR(MAX),
    ContentVector VECTOR(1536)
);

-- Perform similarity search
SELECT TOP 10 Id, Content
FROM Documents
ORDER BY VECTOR_DISTANCE(ContentVector, @queryVector);

2025 vnext-preview の機能:

  • 完全な Linux ベースのエミュレーター(クロスプラットフォーム:x64、ARM64、Apple Silicon)
  • Apple Silicon または Microsoft ARM で仮想マシンは不要
  • Changefeed のサポート(2025 年 4 月以降)
  • ドキュメント TTL(Time-to-Live)のサポート
  • OpenTelemetry V2 のサポート
  • ゲートウェイモードでの NoSQL API
  • 現在プレビュー中(開発継続中)

イメージ: mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview

3. Cosmos DB エミュレーター

NoSQL データベースエミュレーター

イメージ: mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview

構成:

services:
  cosmosdb:
    image: mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview
    container_name: cosmosdb
    environment:
      - AZURE_COSMOS_EMULATOR_PARTITION_COUNT=10
      - AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE=true
      - AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE=127.0.0.1
    ports:
      - "8081:8081"       # Data Explorer
      - "10251:10251"
      - "10252:10252"
      - "10253:10253"
      - "10254:10254"
    volumes:
      - cosmos-data:/data/db
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 4G
    networks:
      - backend
    restart: unless-stopped

エミュレーターのエンドポイント:

https://localhost:8081

エミュレーターキー(標準):

C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==

Data Explorer: https://localhost:8081/_explorer/index.html にアクセスします

アプリケーションとの統合:

// Node.js with @azure/cosmos
const { CosmosClient } = require('@azure/cosmos');

const endpoint = 'https://localhost:8081';
const key = process.env.COSMOS_EMULATOR_KEY;
const client = new CosmosClient({ endpoint, key });
// .NET with Microsoft.Azure.Cosmos
using Microsoft.Azure.Cosmos;

var endpoint = "https://localhost:8081";
var key = Environment.GetEnvironmentVariable("COSMOS_EMULATOR_KEY");
var client = new CosmosClient(endpoint, key);

制限事項:

  • パフォーマンスは本番環境を反映しません
  • ローカル開発では単一のパーティションに制限されます
  • 証明書の信頼が必要です(自己署名)

2025 年の公式 Azure Service Bus エミュレーター:

  • 公式 Docker コンテナーとしてリリース
  • クロスプラットフォーム対応の Linux ベースエミュレーター
  • 依存関係として Linux 版 SQL Server が必要
  • AMQP プロトコル(ポート 5672)をサポート
  • UseDevelopmentEmulator=true を含む接続文字列形式
  • 現在の制限:JMS プロトコル、パーティション分割されたエンティティ、AMQP Web Sockets はサポートされません

公式エミュレーターイメージ: mcr.microsoft.com/azure-messaging/servicebus-emulator:latest

接続文字列:

Endpoint=sb://host.docker.internal;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=SAS_KEY_VALUE;UseDevelopmentEmulator=true;
4. Azure Service Bus エミュレーター

メッセージキューエミュレーター

注: 公式エミュレーターの Docker サポートは限定的です。代替として RabbitMQ を使用してください。

公式エミュレーター(プレビュー):

services:
  servicebus-sql:
    image: mcr.microsoft.com/mssql/server:2025-latest
    environment:
      - ACCEPT_EULA=Y
      - MSSQL_SA_PASSWORD=ServiceBus123!
    volumes:
      - servicebus-sql-data:/var/opt/mssql

  servicebus:
    image: mcr.microsoft.com/azure-messaging/servicebus-emulator:latest
    depends_on:
      - servicebus-sql
    environment:
      - ACCEPT_EULA=Y
      - SQL_SERVER=servicebus-sql
      - SQL_SA_PASSWORD=ServiceBus123!
    ports:
      - "5672:5672"  # AMQP
    networks:
      - backend

RabbitMQ の代替(推奨):

services:
  rabbitmq:
    image: rabbitmq:3.14-alpine
    container_name: rabbitmq
    ports:
      - "5672:5672"   # AMQP
      - "15672:15672" # Management UI
    environment:
      - RABBITMQ_DEFAULT_USER=admin
      - RABBITMQ_DEFAULT_PASS=admin123
    volumes:
      - rabbitmq-data:/var/lib/rabbitmq
    healthcheck:
      test: ["CMD", "rabbitmq-diagnostics", "ping"]
      interval: 30s
      timeout: 10s
      retries: 3
    networks:
      - backend
    restart: unless-stopped
5. PostgreSQL(Azure Database for PostgreSQL)

イメージ: postgres:16.6-alpine

構成:

services:
  postgres:
    image: postgres:16.6-alpine
    container_name: postgres
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD_FILE=/run/secrets/postgres_password
      - POSTGRES_DB=myapp
    secrets:
      - postgres_password
    ports:
      - "5432:5432"
    volumes:
      - postgres-data:/var/lib/postgresql/data
      - ./init:/docker-entrypoint-initdb.d
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 10s
      timeout: 3s
      retries: 3
    deploy:
      resources:
        limits:
          cpus: '1'
          memory: 2G
    networks:
      - backend
    security_opt:
      - no-new-privileges:true
    restart: unless-stopped

拡張機能: Azure PostgreSQL Flexible Server の拡張機能に合わせます:

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION IF NOT EXISTS "pg_trgm";
CREATE EXTENSION IF NOT EXISTS "pgcrypto";
6. MySQL(Azure Database for MySQL)

イメージ: mysql:9.2

構成:

services:
  mysql:
    image: mysql:9.2
    container_name: mysql
    environment:
      - MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql_root_password
      - MYSQL_DATABASE=myapp
      - MYSQL_USER=appuser
      - MYSQL_PASSWORD_FILE=/run/secrets/mysql_password
    secrets:
      - mysql_root_password
      - mysql_password
    ports:
      - "3306:3306"
    volumes:
      - mysql-data:/var/lib/mysql
      - ./init:/docker-entrypoint-initdb.d
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"]
      interval: 10s
      timeout: 3s
      retries: 3
    deploy:
      resources:
        limits:
          cpus: '1'
          memory: 2G
    networks:
      - backend
    security_opt:
      - no-new-privileges:true
    restart: unless-stopped
7. Redis(Azure Cache for Redis)

イメージ: redis:7.4-alpine

構成:

services:
  redis:
    image: redis:7.4-alpine
    container_name: redis
    command: >
      redis-server
      --appendonly yes
      --requirepass ${REDIS_PASSWORD}
      --maxmemory 512mb
      --maxmemory-policy allkeys-lru
    ports:
      - "6379:6379"
    volumes:
      - redis-data:/data
    healthcheck:
      test: ["CMD", "redis-cli", "--raw", "incr", "ping"]
      interval: 10s
      timeout: 3s
      retries: 3
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 512M
    networks:
      - backend
    security_opt:
      - no-new-privileges:true
    restart: unless-stopped
8. Application Insights の代替(Jaeger + Grafana)

OpenTelemetry 互換の可観測性スタック

services:
  jaeger:
    image: jaegertracing/all-in-one:latest
    container_name: jaeger
    ports:
      - "16686:16686"  # UI
      - "14268:14268"  # HTTP collector
      - "4317:4317"    # OTLP gRPC
      - "4318:4318"    # OTLP HTTP
    environment:
      - COLLECTOR_OTLP_ENABLED=true
    networks:
      - monitoring
    restart: unless-stopped

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    ports:
      - "3001:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin
    volumes:
      - grafana-data:/var/lib/grafana
    networks:
      - monitoring
    restart: unless-stopped

Azure スタックの完全な例

services:
  # Application Services
  frontend:
    build: ./frontend
    ports: ["3000:3000"]
    networks: [frontend]
    depends_on:
      backend:
        condition: service_healthy

  backend:
    build: ./backend
    ports: ["8080:8080"]
    networks: [frontend, backend]
    depends_on:
      sqlserver:
        condition: service_healthy
      redis:
        condition: service_started
      azurite:
        condition: service_started

  # Databases
  sqlserver:
    image: mcr.microsoft.com/mssql/server:2025-latest
    environment:
      - ACCEPT_EULA=Y
      - MSSQL_PID=Developer
      - MSSQL_SA_PASSWORD=${MSSQL_SA_PASSWORD}
    ports: ["1433:1433"]
    volumes: [sqlserver-data:/var/opt/mssql]
    networks: [backend]
    healthcheck:
      test: ["CMD-SHELL", "/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P $$MSSQL_SA_PASSWORD -Q 'SELECT 1' -C"]
      interval: 10s

  postgres:
    image: postgres:16.6-alpine
    environment:
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    ports: ["5432:5432"]
    volumes: [postgres-data:/var/lib/postgresql/data]
    networks: [backend]
    healthcheck:
      test: ["CMD-SHELL", "pg_isready"]
      interval: 10s

  # Cache
  redis:
    image: redis:7.4-alpine
    command: redis-server --requirepass ${REDIS_PASSWORD}
    ports: ["6379:6379"]
    volumes: [redis-data:/data]
    networks: [backend]

  # Storage
  azurite:
    image: mcr.microsoft.com/azure-storage/azurite:latest
    command: azurite --blobHost 0.0.0.0 --queueHost 0.0.0.0 --tableHost 0.0.0.0 --loose
    ports: ["10000:10000", "10001:10001", "10002:10002"]
    volumes: [azurite-data:/data]
    networks: [backend]

  # NoSQL
  cosmosdb:
    image: mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview
    ports: ["8081:8081"]
    volumes: [cosmos-data:/data/db]
    networks: [backend]

  # Monitoring
  jaeger:
    image: jaegertracing/all-in-one:latest
    ports: ["16686:16686", "4317:4317"]
    networks: [monitoring]

networks:
  frontend:
    driver: bridge
  backend:
    driver: bridge
    internal: true
  monitoring:
    driver: bridge

volumes:
  sqlserver-data:
  postgres-data:
  redis-data:
  azurite-data:
  cosmos-data:

ベストプラクティス

  1. ヘルスチェックを使用する - アプリの起動前に依存関係の準備が整っていることを確認します
  2. ネットワークを分離する - データベースは内部バックエンドネットワークに配置します
  3. リソース制限 - エミュレーターがシステムリソースを使い果たさないようにします
  4. 永続化 - 再起動後も保持するデータには名前付きボリュームを使用します
  5. シークレット管理 - Docker シークレットまたは環境ファイルを使用します
  6. バージョンの固定 - latest ではなく、特定のタグを使用します
  7. セキュリティ強化 - ケイパビリティを削除し、可能であれば非 root ユーザーとして実行します
  8. ドキュメント - エミュレーターと Azure サービスの違いを記載します

既知の制限事項

  • パフォーマンス:エミュレーターは Azure サービスより低速です
  • スケール:単一インスタンスのみで、クラスター化には対応していません
  • 機能:Azure 固有の機能の一部はローカルで利用できません
  • SSL/TLS:自己署名証明書には信頼設定が必要です
  • Azure AD:認証はローカルでは再現されません
  • ネットワーク:VNet とプライベート エンドポイントは利用できません

移行チェックリスト

Azure から Docker エミュレーターに移行する場合:

  • Azure Storage の接続文字列を Azurite 用に置き換える
  • SQL Server の接続文字列を更新する(Azure 固有のオプションを削除する)
  • Cosmos DB をエミュレーターのエンドポイントとキーで設定する
  • Service Bus を RabbitMQ またはエミュレーターに置き換える
  • Application Insights の代替を設定する
  • 認証を更新する(Azure AD への依存を削除する)
  • ネットワーク分離を設定する
  • すべての統合をテストする
  • 機能の同等性に関する不足点を記録する
  • サンプルデータ用の初期化スクリプトを作成する

参考資料

コメント