【第12回】Azureで社内システム再現（クラウド編）｜App Service を作成して GitHub からCI/CDデプロイ

## 概要

これまでの「オンプレ編」では、Azure の仮想マシン（IaaS）を使って、社員番号から名前を検索できるシンプルな社内システムを構築してきました。Active Directory、SQL Server、ADFS などを組み合わせ、オンプレミスの構成を仮想的に再現しています。

※全体構成の詳細は、[【第0回】Azureで社内システム再現（オンプレ編）｜構成図と動作の流れ](https://qiita.com/your-link-here) をご参照ください。

クラウド編では、これまでの構成をベースにしつつ、Azure のマネージドサービス（PaaS）を中心とした構成へ段階的に移行していきます。

※クラウド移行全体の設計方針については、[【第10.5回】Azureで社内システム再現（クラウド編）｜オンプレ構成をどうクラウドに移行するか？](https://qiita.com/saba_infra/items/4ff691131593e947d6cf) にまとめています。

---
## システム構成（今回の対象範囲）
![cloud_webapp1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/75b26efd-bb63-4514-a985-edf1619df34e.png)

構成図の赤枠で囲った部分が今回の対象です。

今回は、Azure Web App を作成し、GitHub と連携して継続的デプロイ（CI/CD）の構成を行います。


具体的には、以下の作業を行います：

- Azure Web App（PHP 8.3 / Linux）の作成

- GitHub リポジトリとの接続

---
## App Service の作成

まずは、PHP アプリケーションをホストするための Azure App Service を作成します。  
今回は静的コンテンツのみを扱う「静的 Web アプリ」ではなく、PHP を含む動的アプリケーションのため「Web アプリ」を選択します。

![スクリーンショット 2025-04-16 13.40.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/001893f8-b5fb-4cc7-bb1b-0dff46514985.png)

作成時の主な設定は以下のとおりです。

![スクリーンショット 2025-04-02 12.04.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/82c7addd-c87a-4f54-afd8-3ea8a0133be3.png)

| 項目 | 設定値 |
|------|--------|
| ランタイムスタック | PHP 8.3 |
| オペレーティングシステム | Linux |

オンプレミス環境では Windows 上で PHP アプリを動作させていましたが、本アプリには OS に依存した処理は含まれていません。  
そのため、Linux プランでも特に問題なく動作します。PHP 8.3 を選択する必要があったため、今回は Linux を選択しています。

>ランタイムとしてPHPを選択すると自動でLinuxになります。

---

## サンプルコードについて

本記事で使用しているPHPコードや設定ファイルは、以下のGitHubリポジトリに公開しています。

- GitHubリポジトリ：  
  https://github.com/saba-infra/employee-app

コード全体を確認したい方は、上記のリポジトリをご参照ください。

## PHPコードの主な変更点

クラウド移行にあたり、主に以下の点を変更しています。

- SQL Server への接続方式を `sqlsrv` → `PDO` に変更

- データベースへの接続情報

  ```php
  $server   = "tcp:sqlsrv-employee.database.windows.net,1433";
  $database = "sqldb-employee";
  $user     = "sqladmin";
  $password = "PASSWORD";
  ```


---

## 接続方式を変更した理由

オンプレミス環境では `sqlsrv_connect()` を使用して SQL Server に接続していました。  
一方で、Azure App Service（Linux）では `SQLSRV` 拡張が標準で含まれておらず、この関数は使用できませんでした。

そのため、標準で利用可能な `PDO_SQLSRV` 拡張を使用する方式に変更しました。  

---
## GitHub との接続と継続的デプロイ

App Service を作成した後、GitHub リポジトリと連携することで、継続的デプロイ（CI/CD）の構成を行いました。

### GitHub の接続設定

Azure ポータルの「デプロイ センター」から、GitHub のアカウントにサインインし、デプロイ対象のリポジトリとブランチを選択します。

この操作により、GitHub Actions による自動デプロイの構成が自動で作成されます。

![スクリーンショット 2025-04-02 12.20.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/748ef2a3-2be1-4ed9-b4ca-65561a7d5423.png)


---

### GitHub Actions による自動デプロイ

GitHub との接続が完了すると、`.github/workflows/` 配下に YAML ファイルが自動生成されます。  
このファイルには、push をトリガーにアプリをデプロイする処理が記述されています。

![スクリーンショット 2025-04-16 14.52.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/d26eb2b0-ebc0-4f0f-9354-fc86da4ce75f.png)


ワークフローは主に以下の2ステップで構成されています。

- **build**：リポジトリのコードを取得し、本番環境で実行可能な状態に整える処理です。  
  Python などの言語では、`pip install` のように必要なモジュールをインストールするステップが含まれます。  
  今回の PHP アプリでは特別なビルド処理は不要なため、このステップではコードの取得のみで完了します。

- **deploy**：アプリケーションを Azure App Service にデプロイします。

実行結果は GitHubやデプロイセンターのログから確認できます。以下は build および deploy が正常に完了した例です。

![スクリーンショット 2025-04-02 12.25.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/cb98e80c-ab92-4da4-b32c-20628d72ce38.png)

![スクリーンショット 2025-04-02 12.25.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/f9bbaef3-2409-484d-8fbb-073b5e51ab88.png)