⏲️ Est. time to complete: 60 - 90 min. ⏲️
- Azure App Service と SQL Database の概要
- Azure App Service の作成
- SQL Database の作成
- SQL Database の接続文字列の確認と更新
- Azure App Service へのデプロイ
- デプロイ スロットの作成
- デプロイ スロットの切り替え
- GitHub Actions を使用した CI/CD の実行
- GitHub Codespaces を使用したアプリケーションの更新
- GitHub Pull Request の作成とマージ
- GitHub の概要
- GitHub Actions の概要
- 変更を Commit して Push する方法
- Pull Request を作成してマージする方法
- GitHub Codespaces の概要
- .NET と ASP.NET Core MVC の概要
- ASP.NET Core MVC アプリケーションの概要
- Entity Framework Core を使用した SQL Database への接続
このハンズオンで使用する MyToDoAppSQL は、ASP.NET Core 9.0 と Microsoft SQL Server(Entity Framework Core)を用いたシンプルな ToDo 管理 Webアプリケーションです。タスク(ToDo)の登録・編集・削除・詳細表示が可能です。詳細は、GitHub Copilot で生成した こちら のソフトウェア内部仕様書をご覧ください。
- GitHub アカウントの作成
- GitHub のアカウントをお持ちでない場合は、https://github.com/ からアカウントを新規作成してください。
- (任意) GitHub Copilot の準備
- GitHub Copilot を使用する場合は、こちら から GitHub Copilot を有効化してください。
- Microsoft Azure サブスクリプションの準備
(任意) 本ハンズオンは、Web ブラウザのみで完結するように設計されていますが、Visual Studio 2022 を使用してローカル環境での開発を行うことも可能です。必要に応じて、以下の手順で Visual Studio 2022、Git、.NET のインストールや準備をおこなってください。
- Visual Studio 2022 のインストール
- Visual Studio 2022 をお持ちでない場合は、こちら から Visual Studio 2022 をダウンロードしてインストールしてください。
- インストール時に、
ASP.NET と Web 開発とAzure の開発のワークロードを選択してください。 - また、
個別のコンポーネントタブからGit for Windowsを選択してください。 - インストール後、Visual Studio 2022 を起動して、
MS アカウントまたはGitHubアカウントでサインインして初期画面が表示されることを確認してください。
- Git の確認
- Visual Studio 2022 と共に Git もインストールされます。Windows メニューから
コマンド プロンプトを開きgitと入力して Git コマンドが実行できることを確認してください。 - もし、Git が実行できない場合は、こちら から Git for Windows をダウンロードして、個別にセットアップしてください。
- Visual Studio 2022 と共に Git もインストールされます。Windows メニューから
- .NET 9 SDK の確認
- Visual Studio 2022 と共に .NET SDK もインストールされます。Windows メニューから
コマンド プロンプトを開きdotnetと入力して .NET コマンドが実行できることを確認してください。 - もし、
dotnetコマンドが実行出来ない場合は、こちら から .NET 9 SDK をダウンロードしてインストールしてください。
- Visual Studio 2022 と共に .NET SDK もインストールされます。Windows メニューから
- Entity Framework Core ツールのインストール
- Windows メニューから
コマンド プロンプトを開き、以下のコマンドを実行して Entity Framework Core ツールをインストールしてください。dotnet tool install --global dotnet-ef
- Windows メニューから
- Azure ポータルにサインインして、ページ上部にある検索バーに
Webアプリとデータベースと入力します。 - [Marketplace] 見出しの下にある
Web アプリとデータベースを選択して、Web アプリとデータベースの作成ページに移動します。
Web アプリとデータベースの作成ページで、以下の情報を入力してください。- サブスクリプション: 使用する Azure サブスクリプション名
- リソースグループ: 事前に用意された共同作成者ロールが割り当てられているリソースグループを選択するか、[新規作成] から新しく作成するリソースグループ名を入力
- リージョン:
Japan East(任意のリージョン) - 名前:
mytodowebapp(任意の名前) - ランタイムスタック:
.NET 9 (STS) - エンジン:
SQLAzure (推奨) - サーバー名:
mytodowebapp-server(任意の名前) - データベース名:
mytodowebapp-database(任意の名前) - Azure Cache for Redis を追加しますか?:
いいえ - ホスティング プラン:
Basic - 趣味や研究目的
- 上記の情報を入力したら、
確認および作成をクリックしてください。 確認および作成ページでエラーがなければ、作成をクリックしてください。- デプロイメントが完了するまで数分かかります。デプロイメントが完了したら、
リソースに移動ボタンをクリックしてください。 - 作成した Web アプリの概要ページが表示されます。

- [規定のドメイン] にある URL をクリックして、Web アプリが正常に作成されたことを確認してください。

- GitHub にサインインして、次のサンプル リポジトリを表示します。
- 右上の
Use this templateボタンをクリックして、Create a new repositoryをクリックします。
Ownerで自分のアカウント名を選び、Repository nameにMyToDoAppSQLなどの任意の名前を入力します。- リポジトリの公開設定を
Public(またはPrivate) に設定します。 Create repositoryをクリックします。
- ご自身の GitHub アカウントのリポジトリに、指定した名前でリポジトリが作成されたことを確認します。

- Azure ポータルにサインインして、作成した Web アプリの概要ページを開きます。
- 左側のメニューから
設定-環境変数を選択して、接続文字列タブを選択します。AZURE_SQL_CONNECTIONSTRINGという名前の接続文字列があることを確認します。
- この接続文字列は、Web アプリを作成したときに自動生成された、SQL データベースへの接続情報です。この文字列をクリックして、
接続文字列の追加/編集ページを開き、名前をMyToDoAppSQLContextに変更して、適用ボタンをクリックします。この接続文字列名MyToDoAppSQLContextは、ソースコードで指定されている名前になります。
接続文字列の一覧ページに戻りますので、名前が変更されていることを確認し、もう一度ページ下部にある適用ボタンをクリックして変更を保存します。
-
Web アプリの左側のメニューから
デプロイ-デプロイ センターを選択します。 -
デプロイ センターページの [ソース] で、GitHubを選択し、GitHub にサインインします。 -
GitHubのリポジトリを選択します。- 組織:
ご自身の GitHub アカウント名 - Repository:
MyToDoAppSQL(作成したリポジトリ名) - Branch:
main
- 組織:
-
認証タイプで基本認証を選択します。- Azure サブスクリプションの所有者や共同作成者権限を持っている場合は、
ユーザー割り当て IDを選択することで、セキュアな認証を行うこともできます。
- Azure サブスクリプションの所有者や共同作成者権限を持っている場合は、
-
GitHub のリポジトリに戻り、Actions タブをクリックして、
Azure App Serviceのデプロイメントが開始されていることを確認します。
-
デプロイメントが完了したら、Azure ポータルに戻り、作成した Web アプリの概要ページを開きます。
-
[規定のドメイン] にある URL をクリックして、Web アプリを表示します。初回の表示には数分かかります。また、初期画面で
Errorが表示されます。
-
このエラーは、SQL Database にデータベースが作成されていない ために発生しています。次の手順で、GitHub Actions のワークフロー ファイル (YAML ファイル) を更新して、データベースの初期化コマンドを実行して SQL Database にデータベースを作成します。
-
GitHub のリポジトリに戻り、
Actionsタブをクリックして、Add or update the Azure App Service build and deployment workflow configのワークフローを選択します。
-
このファイルは、GitHub Actions のワークフロー ファイルで、Azure App Service にデプロイするための設定が記述されています。ワークフロー ファイルの上部右側にある
鉛筆マークボタンをクリックして、ワークフロー ファイルの編集画面に移ります。
-
32行目の
name: Upload artifact for deployment jobの前に、以下の記述を追加してください。- name: Database migration run: | dotnet tool install -g dotnet-ef dotnet ef migrations bundle --runtime linux-x64 -p MyToDoAppSQL -o ${{env.DOTNET_ROOT}}/myapp/migrationsbundle
-
追加した内容を確認して問題なければ、
Commit changesボタンをクリックして、変更をコミットします。この際Commit directly to hte main branchが選択されていることを確認してください。
-
再び、GitHub のリポジトリに戻り、
Actionsタブをクリックして、新しいワークフローが開始されていることを確認します。
-
ワークフローの実行が完了したら、Azure ポータルに戻り、作成した Web アプリの概要ページを開きます。
-
次のコマンドを入力して
/home/site/wwwrootフォルダに移動します。cd /home/site/wwwroot -
wwwrootフォルダに移動したら、lsコマンドを入力して、デプロイした Web アプリのファイル群があることを確認します。ls
-
migrationsbundleコマンドを実行します。migrationsbundle
-
上記のコマンドは、アプリケーションのデータベースのスキーマに基づいて、SQL データベースの初期化を行うコマンドです。実行後、以下のようなメッセージが表示され、初期状態の SQL データベースが作成されます。

-
再び Azure ポータルに戻り、作成した Web アプリの概要ページを開きます。[規定のドメイン] にある URL をクリックして、Web アプリがエラーなく表示されることを確認します。

ここまでの手順で、Azure App Service と SQL データベースを使用した .NET アプリケーションのデプロイが完了しました。次に、デプロイ スロットを利用して、アプリケーションの更新を行います。 デプロイ スロットを使用すると、アプリケーションの新しいバージョンを開発/テスト環境で確認してから、本番環境に切り替えることができます。これにより、アプリケーションの可用性を高めることができます。
- Azure ポータルにサインインして、作成した Web アプリの概要ページを開きます。
- 前の演習で作成した Web アプリの App Service のプランは
Basic B1です。デプロイ スロットを使用するには、Standardプラン以上にアップグレードする必要があります。ページ左側のメニューから設定-スケールアップ (App Service のプランを選択して、表示されるプランからデプロイ スロットが使用できて最もコストが安いPremium v3 P0V3を選択して、選択ボタンをクリックします。
- 続いて、
アップグレードボタンをクリックして、プランの変更を適用します。
- ページ左側のメニューから
デプロイ-デプロイ スロットを選択し、表示されたページでAdd slotをクリックします。
Add Slotページが表示されますので、次の値を入力/選択してAddボタンをクリックします。- デプロイ スロットの作成が完了すると、スロットの一覧が表示され、元の
PRODUCTIONスロットに加えて、新たにstagingスロットが作成されたことが確認できます。
stagingスロットをクリックして、スロットの概要ページを開きます。
- [規定のドメイン] にある URL をクリックして、
stagingスロットの Web アプリが表示されることを確認します。 stagingスロットの Web アプリへのデプロイを GitHub Actions で行うために、stagingスロットの発行プロファイルをダウンロードします。stagingスロットの概要ページで、発行プロファイルのダウンロードをクリックして発行プロファイルをダウンロードします。
- ダウンロードした発行プロファイルをメモ帳などのテキストエディターで開き、すべてを選択 (
Ctrl+A) して文字列をコピー (Ctrl+C) します。
- GitHub のリポジトリに戻り、
Settingsタブをクリックして、左側のメニューからSecrets and variables-Actionsを選択します。
Repository secretsにあるAZUREAPPSERVICE_PUBLISHPROFILE_XXXXXXXXXXXXXXの [鉛筆アイコン] をクリックして、シークレットの編集ページActions secrets / Update secretを開き、Valueにコピーした発行プロファイルの文字列をペーストします。
Update secretボタンをクリックして、シークレットを更新します。
- GitHub のリポジトリに戻り、
Codeタブをクリックして、リポジトリのトップページを開きます。左側に [main] と表示されているボタンをクリックして、[Find or create a branch] と書かれているテキストボックスにfeature1と入力します。続いてCreate branch feature1 from mainをクリックして、作業用の新しいブランチを作成します。
- 新しいブランチが作成されたら、緑色の
Codeボタンをクリックして表示されるポップアップウィンドウで、Codespacesタブをクリックし、Create codespace on feature1をクリックして、Codespace を開きます。
- Web ブラウザ上に Visual Studio Code と同じ UI で、コードエディタが表示されます。

- エディタウィンドウ左下に表示されているブランチ名が
feature1になっていることを確認します。
.github/workflowsフォルダを開き、main_<Azureで作成したWebアプリ名>.ymlをクリックして、ワークフロー ファイルを開き、61行目のslot-name: Productionをslot-name: stagingに変更します。ここで指定した名前のデプロイ スロットに Web アプリがデプロイされるようになります。
- 続いて、
MyToDoAppSQL/wwwroot/css/site.cssをクリックして CSS ファイルを開き、20 行目のbody要素に、以下のスタイル属性を追加します。body { background-color: lightpink; ... }

- 変更が完了したら、左側のメニューから
ソース管理アイコンをクリックして、変更内容を確認します。問題なければ、[コミットメッセージ] を入力してからコミットボタンをクリックします。
- 次のメッセージが表示されたら、
はいボタンをクリックします。
- ソース管理の
変更の同期ボタンをクリックして、変更をリモートのfeature1ブランチにプッシュします。
- 次のメッセージが表示されたら、
OKボタンをクリックします。
- これで、
feature1ブランチに変更がプッシュされました。
- GitHub のリポジトリに戻ると、
Compare & pull requestボタンが表示されているので、クリックします。
- [feature1] ブランチから [main] ブランチへのプルリクエストであることと、タイトルが入力されていることを確認します。合わせて、[Add a description] に変更内容を記入します。

- [Add a description] には、GitHub Copilot の Summary 機能を使用して、変更内容を記入することもできます。

Create pull requestボタンをクリックして、プルリクエストを作成します。- 作成されたプルリクエストを確認します。

Files changedタブをクリックすると、変更内容を確認することができます。
- 変更内容に問題がなければ、
Conversationタブに戻り、Merge pull requestボタンをクリックしてプルリクエストをマージします。
Confirm mergeボタンをクリックして、マージを確定します。
- GitHub のリポジトリに戻り、
Actionsタブをクリックして、新しいワークフローがマージをトリガーに開始されていることを確認します。
- ワークフローの実行が完了したら、Azure ポータルに戻り、作成した Web アプリの [デプロイ] - [デプロイ スロット] から
stagingの Web アプリの概要ページを開きます。[規定のドメイン] にある URL をクリックして、Web アプリがエラーなく表示され、背景の配色が変更されていることを確認します。
- Azure ポータルにサインインして、作成した Web アプリの概要ページを開きます。
- ページ左側のメニューから
デプロイ-デプロイ スロットを選択し、表示されたページでSwapをクリックします。 Swapページが表示されるので、SourceとTargetを確認して、Start Swapボタンをクリックします。
- デプロイ スロットのスワップが完了すると、スロットの一覧が表示され、元の
PRODUCTIONスロットとstagingスロットが入れ替わります。 PRODUCTIONとして最初に作成した Web アプリの概要ページを開き、[規定のドメイン] にある URL をクリックして Web アプリを表示します。スワップ前にstagingスロットにデプロイした背景の配色を変更した Web アプリがPRODUCTION環境に表示されることを確認します。
以上で、Azure App Service と SQL データベースを使用した .NET アプリケーションのデプロイが完了しました。GitHub Actions を使用して、アプリケーションのビルドとデプロイを自動化する方法についても学びました。 今後は、GitHub Copilot を使用して、アプリケーションの機能を追加したり、デザインを変更したりすることができます。また、Azure App Service のデプロイ スロットを利用して、アプリケーションの更新を行うこともできます。これにより、アプリケーションの可用性を高めることができます。さらには、Azure の他のサービスを組み合わせて、より高度なアプリケーションを構築することも可能です。例えば、Azure Functions を使用してサーバーレスアーキテクチャを実現したり、Azure Cosmos DB を使用して分散データベースを構築したりすることができます。 ぜひ、Azure のサービスを活用して、より高度なアプリケーションを構築してみてください。
おつかれさまでした!







