Azure SQL Database エミュレーターを使った開発環境 #AzureSQLDatabase #Azure #DeveloperTool

# Azure SQL Database エミュレーターを使った開発環境

## はじめに
Azure SQL Database を利用するアプリ開発で、ローカルの開発環境では SQL Serve を利用していますが、Azure SQL Database では利用できない構文や機能を使っていても、Azure SQL Database を利用した環境に載せるまで気付かないリスクが存在します。

しかし、ローカルの開発環境で Azure SQL Database エミュレーターを利用することで、このリスクをローカルでの動作確認時に検出できることを期待し、Azure SQL Database エミュレーターを使った開発環境を調べた際のメモとして残します。

なお、2022年9月時点の情報となりますので、最新情報については[参考](#参考)にある Microsoft Docs を確認願います。

## 概要

### Azure SQL Database エミュレーターとは
* 開発およびテスト用のコンテナー化されたローカルのデータベース。
* Azure SQL Database の忠実度の高いエミュレーターを提供するコンテナー イメージと開発ツールの拡張機能を組み合わせたもの。
  * Dockerコンテナで提供され、Visual Studio Code と Azure Data Studio から利用できる。 
  * Microsoft Container Registry からプルして利用する。
* ローカルまたはホストされている CI/CD パイプラインの一部として簡単に使用できる。
* Azure SQL Database にアクセスすることなく、単体テストと統合テストができる。
* 実装は、Azure SQL Edge 基本イメージから派生している。

## 制約
Azure SQL Database のすべての機能をサポートしていない。
ただし、今後のリリースで、サポートする機能を増やしていく予定。

### 制限事項
* 空間データ型
* インメモリ OLTP でのメモリ最適化テーブル
* HierarchyID データ型
* フルテキスト検索
* Azure Active Directory の統合

※詳細は Azure SQL Edge の[サポートされていない機能](https://docs.microsoft.com/ja-jp/azure/azure-sql-edge/features#unsupported-features)を参照


## Azure SQL Database のローカル開発環境の導入

### OS
* Windows 10 以降
* macOS Mojave 以降
* Linux (できれば Ubuntu 18.04 以降)

### 開発ツール
* [Visual Studio Code](https://azure.microsoft.com/ja-jp/products/visual-studio-code/)
  * [mssql 拡張機能](https://marketplace.visualstudio.com/items?itemName=ms-mssql.mssql)
* [Azure Data Studio](https://docs.microsoft.com/ja-jp/sql/azure-data-studio/download-azure-data-studio)
  * [SQL データベース プロジェクト拡張機能 (プレビュー)](https://marketplace.visualstudio.com/items?itemName=ms-mssql.sql-database-projects-vscode)
* [Docker Desktop](https://www.docker.com/products/docker-desktop/)


### ハードウェアの最小要件
* メモリ
  * 8GBのRAM
* ディスク容量
  * 10 GB

### WIndows での環境設定
#### Docker Desktop をインストール
Docker Desktop for Windows を WSL2 でセットアップする。
※詳細は以下を参照
* [Get started with Docker remote containers on WSL 2](https://learn.microsoft.com/en-us/windows/wsl/tutorials/wsl-containers)

#### 拡張機能をインストールする
##### Visual Studio Code
mssql 拡張機能をインストールする。
1. Visual Studio Code でコマンドパレットを開く。
  以下の何れかの方法
    * メニューバーから[表示] > [コマンドパレット]を選択
    * Ctrl + Shift + P を押下
    * F1 を押下
2. コマンド パレットで、ドロップダウンから [拡張機能: 拡張機能のインストール] を選択する。
3. [拡張機能]ペインで、「mssql」と入力する。
4. SQL Server (mssql) 拡張機能を選択し、[インストール]を選択する。
5. インストールが完了したら、[リロード]を選択して拡張機能を有効にする。


##### Azure Data Studio
SQL Database Projects 拡張機能 (プレビュー)をインストールする。
1. Azure Data Studio でコマンドパレットを開く。
  以下の何れかの方法
    * メニューバーから[View] > [Command Palette]を選択
    * Ctrl + Shift + P を押下
    * F1 を押下
2. コマンド パレットで、ドロップダウンから [Extensions: Install Extensions] を選択します。
3. [拡張機能]ペインで、「SQL Database Projects」と入力する。
4. SQL Database Projects 拡張機能を選択し、 [Install]を選択する。
5. インストールが完了したら、[Reload]を選択して拡張機能を有効にする。

### 利用方法
* 空のデータベース プロジェクトを作成するか、既存のプロジェクトを開いて利用する。
* また、OpenAPI/Swagger 仕様から開始することも可能
  * コマンド パレットの [Generate SQL Project from OpenAPI/Swagger spec] コマンドを使用

※詳細は以下を参照
* [クイックスタート: Azure SQL Database のローカル開発環境を作成する](https://docs.microsoft.com/ja-jp/azure/azure-sql/database/local-dev-experience-quickstart?view=azuresql)


## 参考

* [Azure SQL Database のローカル開発エクスペリエンスとは](https://docs.microsoft.com/ja-jp/azure/azure-sql/database/local-dev-experience-overview?view=azuresql)
* [Azure SQL Database エミュレーターの概要 (プレビュー)](https://docs.microsoft.com/ja-jp/azure/azure-sql/database/local-dev-experience-sql-database-emulator?view=azuresql)
* [サポートされていない機能 - Azure SQL Edge でサポートされる機能](https://docs.microsoft.com/ja-jp/azure/azure-sql-edge/features#unsupported-features)
* [クイックスタート: Azure SQL Database のローカル開発環境を作成する](https://docs.microsoft.com/ja-jp/azure/azure-sql/database/local-dev-experience-quickstart?view=azuresql)
* [Set up a local development environment for Azure SQL Database](https://docs.microsoft.com/ja-jp/azure/azure-sql/database/local-dev-experience-set-up-dev-environment?view=azuresql&tabs=vscode)
* [Create a project for a local Azure SQL Database development environment](https://docs.microsoft.com/ja-jp/azure/azure-sql/database/local-dev-experience-create-database-project?view=azuresql)
* [Publish a Database Project for Azure SQL Database to the local emulator](https://docs.microsoft.com/ja-jp/azure/azure-sql/database/local-dev-experience-publish-emulator?view=azuresql)