チュートリアル: SQL プロジェクトを作成して配置する
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance
SQL データベース プロジェクトの開発サイクルにより、データベース開発を、開発の成功事例として使い慣れた継続的インテグレーションおよび継続的デプロイ (CI/CD) ワークフローに統合できます。 SQL データベース プロジェクトのデプロイは手動で行うことができますが、展開パイプラインを使用して、継続的なローカル展開に基づいて追加の作業なしで継続的な展開が実行されるようにデプロイ プロセスを自動化することをお勧めします。
この記事では、新しい SQL プロジェクトを作成し、プロジェクトにオブジェクトを追加し、GitHub Actions を使用してプロジェクトをビルドおよびデプロイするための継続的デプロイ パイプラインを設定する手順を説明します。 このチュートリアルは、SQL プロジェクトの概要 記事の内容のスーパーセットです。 このチュートリアルでは GitHub Actions に展開パイプラインを実装しますが、Azure DevOps、GitLab、およびその他の自動化環境にも同じ概念が適用されます。
このチュートリアルでは、次の作業を行いました。
- 新しい SQL プロジェクトを作成する
- プロジェクトにオブジェクトを追加する
- プロジェクトをローカルでビルドする
- ソース管理にプロジェクトをチェックインする
- プロジェクト ビルド ステップを継続的デプロイ パイプラインに追加する
.dacpac
デプロイ ステップを継続的デプロイ パイプラインに追加する
「SQL プロジェクトの概要」記事の手順を既に完了している場合は、手順 4 に進むことができます。 このチュートリアルの最後に、SQL プロジェクトが自動的にビルドされ、ターゲット データベースに変更がデプロイされます。
前提条件
# install SqlPackage CLI
dotnet tool install -g Microsoft.SqlPackage
# install Microsoft.Build.Sql.Templates
dotnet new install Microsoft.Build.Sql.Templates
GitHub でパイプラインのセットアップを完了するには、次の項目があることを確認します。
Note
SQL データベース プロジェクトのデプロイを完了するには、Azure SQL または SQL Server インスタンスにアクセスする必要があります。 Windows または Containers でSQL Server Developerエディションを使用して、ローカルで無料で開発できます。
ステップ 1: 新しいプロジェクトを作成する
オブジェクトを手動で追加する前に、新しい SQL データベース プロジェクトを作成してプロジェクトを開始します。 スキーマ比較ツールの使用など、既存のデータベースのオブジェクトをプロジェクトにすぐに設定できるようにするプロジェクトを作成する方法は他にもあります。
[ファイル]、[新規作成]、[プロジェクト] の順に選択します。
[新しいプロジェクト] ダイアログ ボックスの検索ボックスで用語 [SQL Server] を使用します。 上位の検索結果は、SQL Server データベース プロジェクト に鳴るはずです。
次へを選択して、次の手順に進みます。 データベース名と一致する必要のないプロジェクト名を指定します。 必要に応じて、プロジェクトの場所を確認して変更します。
[作成] を選択してプロジェクトを作成します。 編集用に [ソリューション エクスプローラー] に空のプロジェクトが開き表示されます。
[ファイル]、[新規作成]、[プロジェクト] の順に選択します。
[新しいプロジェクト] ダイアログ ボックスの検索ボックスで用語 [SQL Server] を使用します。 上位の検索結果は、SQL Server データベース プロジェクト、SDK スタイル (プレビュー) になるはずです。
次へを選択して、次の手順に進みます。 データベース名と一致する必要のないプロジェクト名を指定します。 必要に応じて、プロジェクトの場所を確認して変更します。
[作成] を選択してプロジェクトを作成します。 編集用に [ソリューション エクスプローラー] に空のプロジェクトが開き表示されます。
VS Code または Azure Data Studio の [データベース プロジェクト] ビューで、[新規プロジェクト] ボタンを選択します。
最初のプロンプトでは、主にターゲット プラットフォームが SQL Server か Azure SQL かに基づいて、使用するプロジェクト テンプレートが決定されます。 特定のバージョンの SQL を選択するように求められたら、ターゲット データベースと一致するバージョンを選択しますが、ターゲット データベースのバージョンが不明な場合は、値を後で変更できるため、最新バージョンを選択します。
表示されるテキスト入力にプロジェクト名を入力します。データベース名と一致する必要はありません。
表示される [フォルダーの選択] ダイアログで、プロジェクトのフォルダー、.sqlproj
ファイル、その他のコンテンツが保持されるディレクトリを選択します。
SDK スタイルのプロジェクト (プレビュー) を作成するかどうかを確認するメッセージが表示されたら、[はい] を選択します。
完了すると、空のプロジェクトが開かれ、編集できるよう [データベース プロジェクト] ビューに表示されます。
Microsoft.Build.Sql プロジェクト用の .NET テンプレートをインストールすると、コマンド ラインから新しい SQL データベース プロジェクトを作成できます。 -n
オプションはプロジェクトの名前を指定し、-tp
オプションはプロジェクト ターゲット プラットフォームを指定します。
使用できるすべてのオプションを確認するには、-h
オプションを使用します。
# install Microsoft.Build.Sql.Templates
dotnet new sqlproject -n MyDatabaseProject
手順 2: プロジェクトにオブジェクトを追加する
ソリューション エクスプローラーで、プロジェクト ノードを右クリックして、[追加]、[テーブル] を選びます。 [新しい項目の追加] ダイアログボックスが表示され、テーブル名を指定できます。 [追加] を選択して、SQL プロジェクトにテーブルを作成します。
このテーブルは、Visual Studio テーブル デザイナーでテンプレート テーブル定義と共に開き、列、インデックス、その他のテーブル プロパティを追加できます。 最初の編集が完了したらファイルを保存します。
ビュー、ストアド プロシージャ、関数など、[新しい項目の追加] ダイアログを使用して、さらに多くのデータベース オブジェクトを追加できます。 ソリューション エクスプローラーでプロジェクト ノードを右クリックし、[追加] を選択し、目的のオブジェクト型を選択して、ダイアログにアクセスします。 プロジェクト内のファイルは、[追加] の [新規フォルダー] オプションを使用してフォルダーに整理できます。
ソリューション エクスプローラーで、プロジェクト ノードを右クリックして、[追加]、[新しいアイテム] の順に選択します。 [新しい項目の追加] ダイアログが表示されるので、[すべてのテンプレートを表示]、[テーブル] の順に選択します。 ファイル名としてテーブル名を指定し、[追加] を選択して、SQL プロジェクトにテーブルを作成します。
このテーブルは、Visual Studio クエリ エディターでテンプレート テーブル定義と共に開き、列、インデックス、その他のテーブル プロパティを追加できます。 最初の編集が完了したらファイルを保存します。
ビュー、ストアド プロシージャ、関数など、[新しい項目の追加] ダイアログを使用して、さらに多くのデータベース オブジェクトを追加できます。 ソリューション エクスプローラーでプロジェクト ノードを右クリックし、[追加] を選択して、[すべてのテンプレートを表示] の選択後に目的のオブジェクト型を選択して、ダイアログにアクセスします。 プロジェクト内のファイルは、[追加] の [新規フォルダー] オプションを使用してフォルダーに整理できます。
VS Code または Azure Data Studio の [データベース プロジェクト] ビューで、プロジェクト ノードを右クリックし、[テーブルの追加] を選択します。 表示されるダイアログで、テーブル名を指定します。
テンプレート テーブル定義を使用してテキスト エディターでテーブルが開き、列、インデックス、その他のテーブル プロパティを追加できます。 最初の編集が完了したらファイルを保存します。
ビュー、ストアド プロシージャ、関数など、プロジェクト ノードのコンテキスト メニューを使用して、データベース オブジェクトをさらに追加できます。 VS Code または Azure Data Studio の [データベース プロジェクト] ビューでプロジェクト ノードを右クリックしてから、目的のオブジェクト型を右クリックして、ダイアログにアクセスします。 プロジェクト内のファイルは、[追加] の [新規フォルダー] オプションを使用してフォルダーに整理できます。
ファイルは、プロジェクト ディレクトリまたは入れ子になったフォルダーに作成することで、プロジェクトに追加できます。 ファイル拡張子は .sql
である必要があり、オブジェクト型またはスキーマとオブジェクト型別に整理することをお勧めします。
テーブルの基本テンプレートは、プロジェクトで新しいテーブル オブジェクトを作成するための開始点として使用できます:
CREATE TABLE [dbo].[Table1]
(
[Id] INT NOT NULL PRIMARY KEY
)
手順 3: プロジェクトをビルドする
ビルド プロセスでは、オブジェクト間のリレーションシップと、プロジェクト ファイルで指定されたターゲット プラットフォームに対する構文が検証されます。 ビルド プロセスからの成果物の出力は .dacpac
ファイルであり、プロジェクトをターゲット データベースに配置するために使用でき、データベース スキーマのコンパイル済みモデルが含まれています。
ソリューション エクスプローラーで、プロジェクト ノードを右クリックし、[ビルド] を選択します。
出力ウィンドウが自動的に開き、ビルド プロセスが表示されます。 エラーと警告がある場合、[出力] ウィンドウに表示されます。 ビルドが成功すると、ビルド成果物 (.dacpac
ファイル) が作成され、その場所がビルド出力に含まれます (デフォルトは bin\Debug\projectname.dacpac
)。
ソリューション エクスプローラーで、プロジェクト ノードを右クリックし、[ビルド] を選択します。
出力ウィンドウが自動的に開き、ビルド プロセスが表示されます。 エラーと警告がある場合、[出力] ウィンドウに表示されます。 ビルドが成功すると、ビルド成果物 (.dacpac
ファイル) が作成され、その場所がビルド出力に含まれます (デフォルトは bin\Debug\projectname.dacpac
)。
VS Code または Azure Data Studio の [データベース プロジェクト] ビューで、プロジェクト ノードを右クリックし、[ビルド] を選択します。
出力ウィンドウが自動的に開き、ビルド プロセスが表示されます。 エラーと警告がある場合、[出力] ウィンドウに表示されます。 ビルドが成功すると、ビルド成果物 (.dacpac
ファイル) が作成され、その場所がビルド出力に含まれます (デフォルトは bin/Debug/projectname.dacpac
)。
SQL データベース プロジェクトは、dotnet build
コマンドを使用してコマンド ラインからビルドできます。
dotnet build
# optionally specify the project file
dotnet build MyDatabaseProject.sqlproj
ビルド出力には、エラーや警告、および発生した特定のファイルと行番号が含まれます。 ビルドが成功すると、ビルド成果物 (.dacpac
ファイル) が作成され、その場所がビルド出力に含まれます (デフォルトは bin/Debug/projectname.dacpac
)。
手順 4: ソース管理プロジェクトをにチェックインする
プロジェクトを Git リポジトリとして初期化し、プロジェクト ファイルをソース管理にコミットします。 この手順は、プロジェクトを他のユーザーと共有し、継続的デプロイ パイプラインで使用できるようにするために必要です。
Visual Studio の [Git] メニューから、[Git リポジトリの作成] を選択します。
[Git リポジトリの作成] ダイアログの [新しいリモートへのプッシュ] セクションで、 [GitHub] を選択します。
[Git リポジトリの作成] ダイアログの [新しい GitHub リポジトリの作成] セクションで、作成するリポジトリの名前を入力します。 (GitHub アカウントにまだサインインしていない場合は、この画面からもサインインを実行できます。)
[ローカル Git リポジトリの初期化] で、.gitignore テンプレート オプションを使用して、Git で無視する意図的に追跡しないファイルを指定できます。 .gitignore の詳細については、「ファイルを無視する」を参照してください。 ライセンスの詳細については、「リポジトリのライセンス」を参照してください。
サインインしてリポジトリ情報を入力したら、 [作成とプッシュ] ボタンを選択して、リポジトリを作成し、アプリを追加します。
ソリューション エクスプローラー で、プロジェクト ノードを右クリックし、[発行…] をクリックします。
発行ダイアログが開き、ターゲット データベース接続 を確立します。 デプロイ用の既存の SQL インスタンスがない場合は、Visual Studio と共に LocalDB ((localdb)\MSSQLLocalDB
) がインストールされ、テストと開発に使用できます。
データベース名を指定し、[発行] を選択してプロジェクトをターゲット データベースに配置するか、[スクリプトを生成] を選択して、実行前に確認するスクリプトを生成します。
リポジトリを初期化してローカルにし、VS Code または Azure Data Studio から GitHub に直接発行できます。 このアクションにより、GitHub アカウントに新しいリポジトリが作成され、ローカル コードの変更が 1 回の手順でリモート リポジトリにプッシュされます。
VS Code または Azure Data Studio のソース管理ビューの [GitHub に公開する] ボタンを使用します。 その後、リポジトリの名前と説明を指定し、パブリックとプライベートのどちらにするかを指定するように求められます。
または、GitHub で空のリポジトリを作成するときに指定した手順に従って、ローカル リポジトリを初期化して GitHub にプッシュすることもできます。
プロジェクト ディレクトリ内の新しい Git リポジトリを初期化し、プロジェクト ファイルをソース管理にコミットします。
git init
git add .
git commit -m "Initial commit"
GitHub で新しいリポジトリを作成し、ローカル リポジトリをリモート リポジトリにプッシュします。
git remote add origin <repository-url>
git push -u origin main
手順 5: プロジェクト ビルド ステップを継続的デプロイ パイプラインに追加する
SQL プロジェクトは .NET ライブラリによってサポートされるため、dotnet build
コマンドを使用してプロジェクトがビルドされます。 このコマンドは、最も基本的な継続的インテグレーションおよび継続的デプロイ (CI/CD) パイプラインでも、主な機能です。 ビルド ステップは、GitHub Actions で作成する継続的デプロイ パイプラインに追加できます。
リポジトリのルート ディレクトリに
.github/workflows
という名前の新規ディレクトリを作成します。 このディレクトリには、継続的デプロイ パイプラインを定義するワークフロー ファイルが含まれます。.github/workflows
ディレクトリにsqlproj-sample.yml
という名前の新しいファイルを作成します。次の内容を
sqlproj-sample.yml
ファイルに追加し、プロジェクトの名前とパスに一致するようにプロジェクト名を編集します。name: sqlproj-sample on: push: branches: [ "main" ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: 8.0.x - name: Build run: dotnet build MyDatabaseProject.sqlproj
ワークフロー ファイルをリポジトリにコミットし、変更をリモート リポジトリにプッシュします。
GitHub.com で、リポジトリのメイン ページに移動します。 リポジトリ名の下にある [アクション] をクリックします。 左側のサイドバーで、作成したばかりのワークフローを選択します。 ワークフロー ファイルをリポジトリにプッシュしたときから、ワークフローの実行の一覧にワークフローの最近の実行が表示されます。
最初の GitHub Actions ワークフローを作成するための基礎の詳細については、「GitHub Actions クイック スタート」を参照してください。
手順 6: .dacpac
デプロイの手順を継続的デプロイ パイプラインに追加する
.dacpac
ファイル内のデータベース スキーマのコンパイル済みモデルは、SqlPackage
コマンドライン ツールまたはその他の配置ツールを使用して、ターゲット データベースにデプロイできます。 デプロイ プロセスでは、.dacpac
で定義されているスキーマに一致するようにターゲット データベースを更新するために必要な手順を決定し、データベースに既に存在するオブジェクトに基づいて必要に応じてオブジェクトを作成または変更します。 たとえば、接続文字列に基づいてターゲット データベースに .dacpac
ファイルをデプロイするには、次のようにします:
sqlpackage /Action:Publish /SourceFile:bin/Debug/MyDatabaseProject.dacpac /TargetConnectionString:{yourconnectionstring}
デプロイ プロセスは羃等であるため、問題を引き起こさずに複数回実行できます。 作成しているパイプラインは、変更がリポジトリの main
ブランチにチェックインされるたびに、SQL プロジェクトをビルドしてデプロイします。 SqlPackage
コマンドを展開パイプラインで直接実行する代わりに、コマンドを抽象化し、ログ記録、エラー処理、タスク構成などの追加機能を提供する展開タスクを使用できます。 GitHub sql-action 展開タスクは、GitHub Actions の継続的デプロイ パイプラインに追加できます。
Note
自動化環境からデプロイを実行するには、デプロイがデータベースに到達して認証できるようにデータベースと環境を構成する必要があります。 VM 内の Azure SQL データベースまたは SQL Server では、必要な資格情報を使用して接続文字列を提供するだけでなく、自動化環境がデータベースに接続できるようにファイアウォール規則を設定することが必要になる場合があります。 ガイダンスは、 GitHub sql-action ドキュメントで提供されています。
.github/workflows
ディレクトリのsqlproj-sample.yml
ファイルを開きます。ビルド 手順の後に、次の手順を
sqlproj-sample.yml
ファイルに追加します。- name: Deploy uses: azure/sql-action@v2 with: connection-string: ${{ secrets.SQL_CONNECTION_STRING }} action: 'publish' path: 'bin/Debug/MyDatabaseProject.dacpac'
変更をコミットする前に、ターゲット データベースに接続文字列を含むシークレットをリポジトリに追加します。 GitHub.com のリポジトリで、[設定] に移動した後、[シークレット] に移動します。 [新しいリポジトリ シークレット] を選択し、接続文字列の値を持つ
SQL_CONNECTION_STRING
という名前のシークレットをターゲット データベースに追加します。sqlproj-sample.yml
からリポジトリに変更をコミットし、変更をリモート リポジトリにプッシュします。GitHub.com のワークフロー履歴に戻り、ワークフローの最新の実行を選択します。 展開手順はワークフロー実行の手順の一覧に表示され、ワークフローは成功コードを返します。
ターゲット データベースに接続し、プロジェクト内のオブジェクトがデータベースに存在することを確認して、展開を確認します。
GitHub デプロイは、ワークフローで環境関係を確立し、デプロイを実行する前に承認を要求することで、さらにセキュリティを強化できます。 環境保護とシークレットの保護の詳細については、「GitHub Actions のドキュメント」を参照してください。