チュートリアル: データベース スキーマを Git に格納する

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric の SQL データベース

Git にデータベース スキーマを格納すると、バージョン管理、コラボレーション、時間の経過に伴う変更を追跡する機能など、いくつかの利点があります。 この方法は、コードを使用してデータベース スキーマを定義し、ORM や GitHub Copilot などのコーディング エージェントを使用して開発環境に直接変更を適用する、コードファーストの開発に特に役立ちます。

このチュートリアルでは、データベース スキーマを Git に格納し、開発ワークフローの一部として管理する方法について説明します。

  • 既存のデータベースから新しい SQL プロジェクトを作成する
  • Git リモート リポジトリにデータベース コードをコミットしてプッシュする
  • データベースから既存のコードに変更を適用する
  • Git リモート リポジトリから変更をプルし、ローカル データベースに適用する (省略可能)

チュートリアルの情報フローを示す図。

完了したら、ソース管理でデータベースを追跡し、Git リポジトリを介してデータベースの変更についてチームと共同作業する準備が整いました。

Note

このチュートリアルを完了するには、SQL データベースにアクセスする必要があります。 Windowsまたはコンテナー SQL Server開発者エディションを使用して、ローカルで無料で開発できます。

前提条件

Warning

このチュートリアルは、Visual Studio 2022 の SDK スタイルのプロジェクト (プレビュー) では使用できません。 代わりに SQL Server Management Studio (SSMS) またはVisual Studio Codeを使用してください。

# install SqlPackage CLI
dotnet tool install -g Microsoft.SqlPackage

# install Microsoft.Build.Sql.Templates
dotnet new install Microsoft.Build.Sql.Templates

手順 1: 既存のデータベースから新しい SQL プロジェクトを作成する

ソース管理でデータベースを表すには、 SQL データベース プロジェクト 形式を使用します。 プロジェクトには、各データベース オブジェクトの .sql ファイルと、データベース設定を含む .sqlproj が含まれています。 ファイル エクスプローラーとソース管理でプロジェクトを表示すると、オブジェクト エクスプローラーでデータベースを参照する SQL プロジェクトの構造がミラー化されます。

Visual StudioのSQL Server オブジェクト エクスプローラーで、プロジェクトを作成するデータベースを右クリックし、新規プロジェクトの作成...を選択します。

Visual Studio の [データベースのインポート] ダイアログのスクリーンショット。

[新規作成Projectダイアログで、project名を入力します。 プロジェクト名はデータベース名と一致する必要はありません。 必要に応じて、プロジェクトの場所を確認して変更します。 既定のインポート設定では、スキーマ、オブジェクト型によってフォルダーにオブジェクトがインポートされます。 インポート設定を変更して、フォルダー構造を変更したり、インポートするオブジェクトにアクセス許可を含めたりすることができます。 インポートを開始します

[ データベースのインポート] ダイアログには、インポートの進行状況がメッセージとして表示されます。 インポートが完了すると、ソリューション エクスプローラーにインポートされたオブジェクトが表示されます。 このプロセスでは、 Import Schema Logsのプロジェクト ディレクトリ内のファイルにログが格納されます。 完了を選択します。

Warning

このチュートリアルは、Visual Studio 2022 の SDK スタイルのプロジェクト (プレビュー) では使用できません。 代わりに SQL Server Management Studio (SSMS) またはVisual Studio Codeを使用してください。

Visual Studio Code のデータベース オブジェクト エクスプローラー ビューで、プロジェクトを作成するデータベースを選択します。 データベースを右クリックして、[データベースからプロジェクトを作成] を選びます。

Visual Studio Code の「データベースからプロジェクトを作成」ダイアログのスクリーンショット

Visual Studio Codeでは、データベースからプロジェクトを作成 ダイアログにプロジェクト名と場所が必要です。 既定のインポート設定では、スキーマ、オブジェクト型によってフォルダーにオブジェクトがインポートされます。 [ 作成] を選択する前に、別のフォルダー構造を選択するか、インポートするオブジェクトに権限を含めることができます。

[データベース プロジェクト] ビューを開き、新しいプロジェクトとインポートされたオブジェクト定義を表示します。

SQL Server Management Studioのオブジェクト エクスプローラーで、projectを作成するデータベースを右クリックし、[タスク] メニューの [データベース] から [Projectの作成] を選択します。

SQL Server Management Studioの [データベースからの新しい SQL Project] ダイアログのスクリーンショット。

[データベースからの SQL Projectの作成] ダイアログで、選択したデータベースを確認し、必要に応じてprojectの名前と場所を変更します。 新しいプロジェクトは、選択したデータベースのオブジェクトを使用して作成され、スキーマ、オブジェクトの種類ごとにフォルダーに配置されます。

ソリューション ファイルはプロジェクト フォルダーの上のフォルダーに自動的に作成され、作成後にソリューション エクスプローラーで開きます。 新しいプロジェクトを既存のソリューションに追加する場合は、[ ソリューションに追加] を選択し、ソリューション ファイルを参照します。 [作成] を選択してプロジェクトを作成します。

SqlPackage CLI を使用して、既存のデータベースのスキーマを SQL プロジェクトに抽出します。 次の SqlPackage コマンドは、データベースのスキーマを完全な SQL プロジェクトに抽出します。 .sql ファイルは、入れ子になったスキーマとオブジェクトの種類のフォルダーによって編成され、データベースのオプションに一致するプロパティセットを持つプロジェクトを管理するために.sqlproj ファイルが作成されます。

sqlpackage /a:Extract /ssn:localhost /sdn:MyDatabase /tf:MyDatabaseProject /p:ExtractTarget=SqlProject

手順 2: データベース コードをコミットして Git リモート リポジトリにプッシュする

SQL プロジェクトを作成したら、ローカル Git リポジトリでデータベースの Git タイムラインを開始します。

Visual Studioで SQL プロジェクトを開いた状態で、ローカル Git リポジトリを作成し、リモートにプッシュします。

  1. メニュー バーから [Git>Create Git Repository ] を選択します。

  2. [Git リポジトリの作成] ダイアログの [新しいリモートへのプッシュ] セクションで、GitHubまたはAzure DevOpsを選択します。 GitHubにプッシュする場合は、メッセージが表示されたら、GitHub アカウントにサインインします。 Azure DevOpsを選択した場合は、Azure DevOps アカウントにサインインし、プロジェクトを選択または作成します。

  3. リポジトリの名前と説明を入力します。 .gitignore テンプレートVisualStudio に設定されていることを確認し、[作成とプッシュ] を選択します。

Visual Studioローカル Git リポジトリを作成し、SQL プロジェクト ファイルで最初のコミットを行い、リモートにプッシュします。

コードが正常にプッシュされたことを確認するには、ブラウザーを開き、GitHub (https://github.com) またはAzure DevOps (https://dev.azure.com) 上のリポジトリに移動します。 .sqlproj ファイルや.sql オブジェクト定義など、SQL プロジェクト ファイルが表示されます。

詳細については、「Visual Studio の Git について」を参照してください。

Warning

このチュートリアルは、Visual Studio 2022 の SDK スタイルのプロジェクト (プレビュー) では使用できません。 代わりに SQL Server Management Studio (SSMS) またはVisual Studio Codeを使用してください。

Visual Studio Codeで SQL プロジェクト フォルダーを開いた状態で、ローカル Git リポジトリを初期化し、リモートにプッシュします。

  1. アクティビティ バーの [ソース管理 ] アイコンを選択してソース管理ビューを開くか、 Ctrl+Shift+Gを押します。

  2. [ リポジトリの初期化] を選択して、現在のフォルダーに新しい Git リポジトリを作成します。

  3. すべてのプロジェクト ファイルは、追跡されていない変更として表示されます。 [+] の横にある アイコンを選択して、すべてのファイルをステージングします。

  4. メッセージ入力ボックスに Initial commit of SQL project などのコミット メッセージを入力し、[ コミット ] ボタン (チェックマーク アイコン) を選択します。

  5. [ソース管理] ビューで [ ブランチの発行 ] を選択して、ローカル リポジトリをリモートにプッシュします。 GitHubまたはAzure DevOpsに発行するかどうかを選択し、サインイン プロンプトに従います。 リポジトリの可視性 (パブリックまたはプライベート) を選択し、確認します。

コードが正常にプッシュされたことを確認するには、ブラウザーを開き、GitHub (https://github.com) またはAzure DevOps (https://dev.azure.com) 上のリポジトリに移動します。 .sqlproj ファイルや.sql オブジェクト定義など、SQL プロジェクト ファイルが表示されます。

詳細については、「Visual Studio Codeのソース管理」を参照してください。

SQL Server Management Studioで SQL プロジェクトを開いた状態で、ローカル Git リポジトリを作成し、リモートにプッシュします。

  1. メニュー バーから [Git>Create Git Repository ] を選択します。

  2. [Git リポジトリの作成] ダイアログの [新しいリモートへのプッシュ] セクションで、GitHubまたはAzure DevOpsを選択します。 GitHubにプッシュする場合は、メッセージが表示されたら、GitHub アカウントにサインインします。 Azure DevOpsを選択した場合は、Azure DevOps アカウントにサインインし、プロジェクトを選択または作成します。

  3. リポジトリの名前と説明を入力します。 .gitignore テンプレートVisualStudio に設定されていることを確認し、[作成とプッシュ] を選択します。

SSMS はローカル Git リポジトリを作成し、SQL プロジェクト ファイルを使用して最初のコミットを行い、リモートにプッシュします。

コードが正常にプッシュされたことを確認するには、ブラウザーを開き、GitHub (https://github.com) またはAzure DevOps (https://dev.azure.com) 上のリポジトリに移動します。 .sqlproj ファイルや.sql オブジェクト定義など、SQL プロジェクト ファイルが表示されます。

詳細については、「Visual Studio の Git について」を参照してください。

SQL プロジェクト ディレクトリから、ローカル Git リポジトリを初期化し、すべてのファイルをコミットして、リモートにプッシュします。

  1. 新しい Git リポジトリを初期化し、 .gitignore ファイルを追加して、最初のコミットを行います。

    cd MyDatabaseProject
    git init
    dotnet new gitignore
    git add .
    git commit -m "Initial commit of SQL project"
    
  2. GitHubまたはAzure DevOpsに新しいリモート リポジトリを作成します。

    • GitHub: https://github.com/newに移動し、新しいリポジトリを作成します。 README、 .gitignore、またはライセンスで初期化しないでください。
    • Azure DevOps: Azure DevOps プロジェクトに移動し、Reposを選択して、新しいリポジトリを作成します。 README の追加 のチェックを外します。
  3. リモートを追加し、最初のコミットをプッシュします。

    git remote add origin <your-repository-url>
    git push -u origin main
    

    <your-repository-url>は、リポジトリの作成時にGitHubまたはAzure DevOpsによって提供される URL に置き換えます。

コードが正常にプッシュされたことを確認するには、ブラウザーを開き、リポジトリに移動します。 .sqlproj ファイルや.sql オブジェクト定義など、SQL プロジェクト ファイルが表示されます。

手順 3: データベースから既存のコードに変更を適用する

データベース スキーマが SQL プロジェクトの外部で変更された場合 (たとえば、データベース、ORM 移行、エージェント アクションへの直接変更など) は、それらの変更を反映するようにプロジェクトを更新できます。

スキーマ比較を使用して、データベースから SQL プロジェクトを更新します。

  1. SQL Server オブジェクト エクスプローラーで、データベースを右クリックし、[スキーマ比較] を選択します。

  2. [ スキーマ比較 ] ウィンドウでは、データベースがソースとして設定されます。 [ ターゲットの選択 ] ドロップダウン リストを選択し、[ターゲットの選択] を 選択します

  3. [ターゲット スキーマの選択] ダイアログで、Projectを選択し、SQL データベースのprojectを選択します。 [OK] を選択.

  4. [ 比較] を選択して比較を実行します。 結果には、データベース (ソース) とプロジェクト (ターゲット) の違いが表示されます。

  5. 違いを確認します。 プロジェクトに適用しない変更をオフにします。

  6. 選択した変更を SQL プロジェクトに適用するには、[ 更新] を選択します。

プロジェクト ファイルは、データベース スキーマと一致するように更新されます。 [Git の変更] ウィンドウで変更を確認し、コミット メッセージを入力して、[すべてコミット] を選択します。 [ プッシュ] を選択して、変更をリモート リポジトリにプッシュします。

Warning

このチュートリアルは、Visual Studio 2022 の SDK スタイルのプロジェクト (プレビュー) では使用できません。 代わりに SQL Server Management Studio (SSMS) またはVisual Studio Codeを使用してください。

[データベースからのProjectの更新] コマンドを使用して、データベースから SQL projectを更新します。

  1. データベース オブジェクト エクスプローラーで、データベースを右クリックし、データベースから SQL Database プロジェクト>Update Projectを選択します。

  2. 更新して確認する SQL データベース プロジェクトを選択します。

  3. 比較が実行され、データベースからプロジェクトに変更が適用されます。 更新された .sql ファイルは、変更されたファイルとして ソース管理 ビューに表示されます。

ソース管理ビューの変更を確認し、変更したファイルをステージングし、コミット メッセージを入力して、[コミット] を選択します。 [ 変更の同期] を選択して、コミットをリモート リポジトリにプッシュします。

スキーマ比較を使用して、データベースから SQL プロジェクトを更新します。

  1. オブジェクト エクスプローラーで、データベースを右クリックし、[タスク] >Schema Compare (プレビュー) を選択します。

  2. [ スキーマ比較 ] ウィンドウでは、データベースがソースとして設定されます。 ターゲットの省略記号ボタンを選択し、ターゲットとして SQL データベース プロジェクトを選択します。

  3. [ 比較] を選択して比較を実行します。 結果には、データベース (ソース) とプロジェクト (ターゲット) の違いが表示されます。

  4. 違いを確認します。 プロジェクトに適用しない変更をオフにします。

  5. 選択した変更を SQL プロジェクトに適用するには、[ 適用 ] を選択します。

プロジェクト ファイルは、データベース スキーマと一致するように更新されます。 [Git の変更] ウィンドウで変更を確認し、コミット メッセージを入力して、[すべてコミット] を選択します。 [ プッシュ] を選択して、変更をリモート リポジトリにプッシュします。

SqlPackage を使用してデータベースから SQL プロジェクトを再生成し、既存のプロジェクト ファイルを現在のデータベース スキーマに置き換えます。 他の SQL プロジェクト ツールにはグラフィカル インターフェイスが用意されていますが、SqlPackage には自動化のためのコマンドライン アプローチが用意されています。この方法では、ファイルの変更を適用する前に確認する機会がありません。

  1. 既存の SQL オブジェクト ファイルを削除し、プロジェクトを再生成します。

    rm -rf MyDatabaseProject
    sqlpackage /a:Extract /ssn:localhost /sdn:MyDatabase /tf:MyDatabaseProject /p:ExtractTarget=SqlProject
    
  2. Git で変更を確認し、コミットします。

    cd MyDatabaseProject
    dotnet new gitignore
    git add .
    git status
    git commit -m "Update project from database changes"
    git push
    

手順 4: (省略可能) Git リモート リポジトリから変更をプルし、ローカル データベースに適用する

他のチーム メンバーがデータベース スキーマの変更をリモート リポジトリにプッシュすると、それらの変更をプルしてローカル開発データベースにデプロイできます。

  1. メニュー バーから [Git>Pull を選択して、リモート リポジトリから最新の変更をプルします。

  2. ソリューション エクスプローラーで、SQL データベース プロジェクト ノードを右クリックし、[スキーマ比較] を選択します。

  3. [ スキーマ比較 ] ウィンドウでは、プロジェクトがソースとして設定されます。 [ ターゲットの選択 ] ドロップダウン リストを選択し、[ターゲットの選択] を 選択します

  4. [ ターゲット スキーマの選択 ] ダイアログで、[ データベース ] を選択し、ローカル開発データベース接続を選択します。 [OK] を選択.

  5. [ 比較] を選択して比較を実行します。 結果には、プロジェクト (ソース) とデータベース (ターゲット) の違いが表示されます。

  6. 違いを確認して、変更が想定されていることを確認します。

  7. [ 更新] を選択して、データベースに変更を適用します。

Warning

このチュートリアルは、Visual Studio 2022 の SDK スタイルのプロジェクト (プレビュー) では使用できません。 代わりに SQL Server Management Studio (SSMS) またはVisual Studio Codeを使用してください。

  1. ソース管理ビューを開き、[...] メニューから [プル] を選択して (またはステータス バーの同期ボタンを使用して) リモート リポジトリから最新の変更をプルします。

  2. [ データベース プロジェクト ] ビューで、SQL データベース プロジェクトを右クリックし、[ スキーマ比較] を選択します。

  3. [ スキーマ比較 ] ウィンドウでは、プロジェクトがソースとして設定されます。 ターゲットの省略記号ボタンを選択し、ターゲットとしてローカル開発データベース接続を選択します。

  4. [ 比較] を選択して比較を実行します。 結果には、プロジェクト (ソース) とデータベース (ターゲット) の違いが表示されます。

  5. 違いを確認して、変更が想定されていることを確認します。

  6. [ 適用] を選択して、データベースに変更を適用します。

  1. ターミナルを開き、プロジェクト ディレクトリで git pull を実行して、リモート リポジトリから最新の変更をプルします。

  2. ソリューション エクスプローラーで、SQL データベース プロジェクト ノードを右クリックし、スキーマ比較 (プレビュー) を選択します。

  3. [ スキーマ比較 ] ウィンドウでは、プロジェクトがソースとして設定されます。 ターゲットを選択し、ローカル開発データベース接続を選択します。

  4. [ 比較] を選択して比較を実行します。 結果には、プロジェクト (ソース) とデータベース (ターゲット) の違いが表示されます。

  5. 違いを確認して、変更が想定されていることを確認します。

  6. [ 適用] を選択して、データベースに変更を適用します。

  1. リモート リポジトリから最新の変更をプルします。

    cd MyDatabaseProject
    git pull
    
  2. プロジェクトをビルドして、変更が正常にコンパイルされたことを確認します。

    dotnet build
    
  3. SqlPackage を使用してローカル開発データベースに変更をデプロイします。

    sqlpackage /a:Publish /sf:bin/Debug/MyDatabaseProject.dacpac /tsn:localhost /tdn:MyDatabase
    

    MyDatabaseProject.dacpac.dacpac出力ファイルの名前に置き換え、必要に応じてターゲット サーバー (/tsn) とデータベース (/tdn) の値を更新します。