Codespacesを使用してAzure Functionsの開発準備をしてみた

# はじめに
GitHub Codespaces を使えるようになったので、興味本位でC#を使ったAzure Functionsの開発環境を構築してみました。
ニッチなケースだと思いますが、誰かの助けになれば幸いです。

(2024/04 更新)
- `.devcontainer` のファイル形式が古かったので更新
- .Net6 のインプロセスから .Net8 分離ワーカープロセスに更新

# 前提条件
- [GitHub](https://github.co.jp/) にサインアップし、リポジトリを作成していること
- [GitHub Codespaces](https://github.co.jp/features/codespaces) が利用できること
- （ローカルで作業したい場合）[VSCode](https://azure.microsoft.com/ja-jp/products/visual-studio-code/) をインストールしていること

# Codespaces の設定ファイルを作成
1. [テンプレート](https://github.com/devcontainers/templates/blob/main/src/dotnet/.devcontainer/devcontainer.json)を参考に `devcontainer.json` を作成します。
1. コマンドパレット（Ctrl+Shift+P）を開き、`Codespaces: Add Container Configuratuin Files`を選択する。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507409/720dec13-c51a-1075-c862-e3ff3c02b86e.png)
1. 既存ファイルの変更を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507409/68f74665-df2d-7e7f-dbc1-b56f45b7d1b2.png)
1. 以下のツールを選択します。
    - Dotnet CLI
    - Azure Functions Core Tools
1. 拡張機能を追加でインストールするために、`extensions`に拡張機能 ID を追加する。<br>拡張機能 ID は歯車から取得できる。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507409/80bd1432-1edb-040a-e2dc-9943a265b73c.png)

最終的に作成したファイルはこちらになります。
必要なツールは `devcontainer.json` のみで完結したかったので、 エミュレーターの `Azurite` の拡張機能をインストールするようにしています。
```json:devcontainer.json
{
  "name": "Azure Functions & C#",
  "image": "mcr.microsoft.com/devcontainers/base:ubuntu",
  "features": {
    "ghcr.io/devcontainers/features/dotnet:2": {
      "version": "8.0"
    },
    "ghcr.io/jlaundry/devcontainer-features/azure-functions-core-tools:1": {
      "version": "latest"
    }
  },
  "customizations": {
    "vscode": {
      "extensions": [
        "Azurite.azurite",
        "ms-azuretools.vscode-azurefunctions",
        "ms-dotnettools.csharp"
      ]
    }
  }
}
```

# Functionsデバッグ手順
1. `Code` の `Create codespace on main` を選択する。<br>初めて利用する場合 [GitHub Codespaces](https://marketplace.visualstudio.com/items?itemName=GitHub.codespaces) の拡張機能のインストールが求められるのでインストールする。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507409/55c0358d-2284-c96a-bc68-6ec902144cf9.png)
1. VSCode が起動したら、以下の拡張機能をインストールする。
    - [Azure Functions](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azurefunctions)
    - [C#](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp)
1. Azure 拡張機能の `WORKSPACE` から `Create Function...` をクリックする。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507409/0885cbfd-3fef-ee7c-22b3-93c6a7760480.png)
1. プロジェクト作成時に Functions を開発する言語をする。（ここでC#を選択）![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507409/b9b25b20-6825-2d1b-b8c9-a129959e3627.png)
1.  自動作成される関数のトリガーを選択し（ここではテストのためにHTTPトリガーを選択）、プロジェクトの作成が開始されるまで Enter を押す。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507409/290eb796-6435-27dc-4903-0f45aeafd583.png)
1. コマンドパレットから Azurite を起動する。
1. VSCode の `Run and Debug` からデバッグを実行する。<br>このとき `Attach to .NET Functions` になっていることを確認。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507409/50ff44a3-458f-4838-4753-b8f8a5e4b010.png)
1. ターミナルに以下が表示され Functions が立ちあがったら、HTTP リクエストを送り、レスポンスが正常に返ってくればリモートリポジトリにプッシュして作業完了。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507409/3d294217-6a8d-08a6-e765-65d4fba00985.png)