🐈

Azure Functionsの開発環境を用意する

2025/03/30に公開

Poetry を使用した Azure Functions 開発環境のセットアップ

1. 必要なツールのインストール

まず以下のツールをインストールします:

Poetry がまだインストールされていない場合は、以下のコマンドでインストールします:

curl -sSL https://install.python-poetry.org | python3 -

2. VS Code 拡張機能のインストール

VS Code を開き、以下の拡張機能をインストールします:

  1. Azure Functions (ms-azuretools.vscode-azurefunctions)
  2. Azure Account (ms-vscode.azure-account)
  3. Python (ms-python.python)

VS Code の左側メニューに Azure アイコンが表示されるようになります。

Azure Functions 開発ツールの関係性と必要性

これらのツールは Azure Functions の開発・デプロイ・管理のための異なる役割を持つコンポーネントです。それぞれの目的と関係性を説明します。

Azure Functions Core Tools

目的: ローカル開発環境で Azure Functions を作成・テスト・実行するためのコマンドラインツール

なぜ必要か:

  • ローカル環境で関数を実行してテストできるため、開発サイクルが短縮される
  • func initfunc newなどのコマンドで関数プロジェクトの骨組みを自動生成できる
  • クラウドにデプロイする前に問題を発見できる
  • ローカルでトリガーやバインディングをテストできる

Azure CLI

目的: Azure リソース全般を管理するためのコマンドラインインターフェース

なぜ必要か:

  • Function App、Storage Account、App Service Plan などの Azure リソースを作成・設定・管理できる
  • スクリプト化やパイプライン自動化が可能
  • リソースグループ、ネットワーク、セキュリティ設定など、関数に関連する他のリソースも管理できる
  • Function Apps の設定(環境変数、スケーリング設定など)を構成できる

VS Code 拡張機能

Azure Account 拡張機能

目的: VS Code から Azure アカウントにアクセスするための認証・認可機能を提供

なぜ必要か:

  • VS Code 内から Azure にログインできる
  • サブスクリプションの切り替えや確認ができる
  • 他の Azure 関連拡張機能の前提条件となる(基盤拡張機能)
  • Azure リソースへのアクセス権限を管理する

Azure Functions 拡張機能

目的: VS Code 内で Azure Functions の開発を支援するための GUI ツール

なぜ必要か:

  • コマンドラインを使わずに Function プロジェクトや個別関数を作成できる
  • ワンクリックで関数をデプロイできる
  • ローカルデバッグの設定が簡単にできる
  • Azure Portal に行かなくても VS Code 内で関数の監視・管理ができる
  • テンプレートから簡単に関数を作成できる

ツール間の関係性

Azure CLI (基盤となるコマンドラインツール)

├── Azure Functions Core Tools (Functions特化のCLIツール)

└── VS Code 拡張機能
├── Azure Account (認証・基本機能)
│ │
│ └── Azure Functions 拡張機能 (GUI操作)
│ │
│ └── (内部でCore Toolsを利用)
└── その他Azure拡張機能

  1. 補完関係:

    • Azure Functions 拡張機能は内部で Azure Functions Core Tools を使用している
    • Azure Account 拡張機能は内部で Azure CLI を利用している場合がある
  2. 階層関係:

    • Azure CLI は最も基本的なツールで、他のツールの基盤となる
    • Azure Account 拡張機能は他の Azure 関連拡張機能の前提条件
    • Azure Functions 拡張機能は高レベルの抽象化を提供するツール
  3. 使用シーン:

    • 開発初期: Azure Functions 拡張機能でプロジェクト作成
    • ローカル開発: Azure Functions Core Tools でテスト実行
    • リソース管理: Azure CLI でリソース作成・管理
    • デプロイ: Azure Functions 拡張機能または GitHub Actions

これらのツールを組み合わせることで、コマンドライン操作が得意な場合は CLI を、視覚的な操作が好みなら VS Code 拡張機能を使うなど、開発者が自分の好みや状況に合わせて効率的に開発できる環境が整います。

3. プロジェクトの作成

新しいフォルダを作成し、プロジェクトを初期化します:

mkdir azure-functions-python
cd azure-functions-python

# Poetry でプロジェクトを初期化
poetry init -n

# 必要な依存関係を追加
poetry add azure-functions azure-data-tables azure-core

4. Azure Functions プロジェクトの初期化

Azure Functions Core Tools を使用してプロジェクトを初期化します:

func init --worker-runtime python

質問されたら「poetry」を選ぶか、--python-packages-manager poetry オプションを追加します。

成功すると以下のファイルが初期化に依って生成される

Azure Functions Core Tools がインストールされていない場合

$ func init --worker-runtime python
zsh: command not found: func

まず、Azure Functions Core Tools をインストールする必要があります。macOS では Homebrew を使ってインストールするのが最も簡単です。

以下のコマンドで Azure Functions Core Tools をインストールできます:

# Homebrew がインストールされていない場合は先にインストール
# /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# Homebrew を使って Azure Functions Core Tools をインストール
brew tap azure/functions
brew install azure-functions-core-tools@4

インストールが完了したら、ターミナルを再起動するか以下のコマンドでシェルを更新して、func コマンドが使えるようになっているか確認してください:

# シェルを更新
source ~/.zshrc

# Azure Functions Core Tools のバージョンを確認
func --version

インストール後に再度 func init --worker-runtime python を実行してみてください。

5. Function を作成

HTTP トリガーの Function を作成します:

func new --name GetTableData --template "HTTP trigger"

$ func new --name GetTableData --template "HTTP trigger" は、Azure Functions CLI(コマンドラインツール)のコマンドです。この役割は:

  1. 新しい関数を作成する

    • func new - 新しい関数を作成するコマンド
    • --name GetTableData - 関数に「GetTableData」という名前を付ける
    • --template "HTTP trigger" - HTTP呼び出しで起動する種類の関数を作る
  2. テンプレートコードの生成

    • このコマンドは自動的に function_app.py のようなファイルを作成
    • 基本的なHTTPリクエスト処理のコードを自動生成
    • 開発者が最初から全部書く手間を省ける
  3. プロジェクト構成の設定

    • 必要な設定ファイルも一緒に作成される

簡単に言うと、このコマンドは「HTTPリクエストを受け取って何かをする関数のひな形」を自動的に作り出すツールです。開発者はこのひな形を元に、必要な処理(データベースアクセスなど)を追加していきます。

これは「家の基礎部分」を自動で作ってくれるようなものです。あとはあなたが「部屋」(実際のビジネスロジック)を追加していく形になります。

6. Poetry 環境設定

Poetry の仮想環境を確実にプロジェクト内に作成するために設定を更新します:

# プロジェクト内に .venv を作成するように設定
poetry config virtualenvs.in-project true

# 仮想環境を作成・アクティブ化
poetry install --no-root

この2つのコマンドは、Poetry を使って Python の仮想環境を設定するためのものです。

  1. poetry config virtualenvs.in-project true

    このコマンドは、Poetry に対して「仮想環境をプロジェクトフォルダ内に作成してください」と指示しています。デフォルトでは、Poetry は中央管理された場所(例:~/.cache/pypoetry/virtualenvs/)に仮想環境を作成しますが、このコマンドにより、プロジェクトフォルダ内の .venv ディレクトリに仮想環境が作成されるようになります。

    これには以下のメリットがあります:

    • プロジェクトと仮想環境が同じ場所にあるので管理が簡単
    • VS Code などのエディタが仮想環境を自動的に検出しやすくなる
    • プロジェクトを移動させても仮想環境が一緒についてくる
  2. poetry install

    このコマンドは、以下のことを行います:

    • pyproject.toml ファイルに定義された依存関係をインストール
    • 仮想環境がまだ存在しない場合は作成
    • poetry.lock ファイルを生成または更新して、依存関係のバージョンを固定

これらのコマンドを実行することで、プロジェクト専用の仮想環境が作成され、Azure Functions の実行に必要なライブラリがその環境内にインストールされます。プロジェクトを分離された環境で開発できるようになるため、システム全体の Python 環境に影響を与えることなく作業できます。

7. VS Code の設定

VS Code がこの Poetry 環境を認識するように .vscode/settings.json ファイルを作成します:

mkdir -p .vscode

.vscode/settings.json に以下の内容を記述:

{
    "azureFunctions.deploySubpath": ".",
    "azureFunctions.scmDoBuildDuringDeployment": true,
    "azureFunctions.pythonVenv": ".venv",
    "azureFunctions.projectLanguage": "Python",
    "azureFunctions.projectRuntime": "~4",
    "debug.internalConsoleOptions": "neverOpen",
    "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python",
    "python.analysis.extraPaths": [
        "${workspaceFolder}/.venv/lib/python3.*/site-packages"
    ]
}

VS Code の設定ファイル .vscode/settings.json は、プロジェクト固有の設定を保存するためのものです。この設定により、VS Code がプロジェクトを Azure Functions プロジェクトとして正しく認識し、Poetry で作成した仮想環境を適切に使用できるようになります。

主な設定内容と目的

  1. Azure Functions 関連の設定:

    • azureFunctions.deploySubpath: デプロイ時に使用するサブパス
    • azureFunctions.scmDoBuildDuringDeployment: デプロイ時にビルドを実行するかどうか
    • azureFunctions.pythonVenv: Python 仮想環境の場所
    • azureFunctions.projectLanguage: プロジェクトの言語(Python)
    • azureFunctions.projectRuntime: Azure Functions ランタイムのバージョン
  2. Python 関連の設定:

    • python.defaultInterpreterPath: Python インタプリタのパス(Poetry で作成した仮想環境内のインタプリタ)
    • python.analysis.extraPaths: Python コード解析時に考慮する追加のパス
  3. デバッグ関連の設定:

    • debug.internalConsoleOptions: デバッグ時のコンソール表示設定

なぜ必要なのか

  1. 正しい Python 環境の使用: Poetry で作成した仮想環境を VS Code が自動的に認識するようにするため
  2. IntelliSense と自動補完の正確性: Azure Functions と関連ライブラリのコード補完が正しく動作するため
  3. デバッグの簡素化: F5 キーを押すだけでプロジェクトを実行・デバッグできるようにするため
  4. デプロイの簡素化: VS Code から直接 Azure にデプロイする際の設定を事前に構成するため

手順の実行方法

  1. まず .vscode ディレクトリを作成

    mkdir -p .vscode
    
  2. settings.json ファイルを作成して提示された内容を貼り付ける

    # お好みのエディタで settings.json を作成・編集
    nano .vscode/settings.json
    # または
    code .vscode/settings.json
    
  3. VS Code を再起動するか、プロジェクトを再度開く

これにより、VS Code が Azure Functions プロジェクトとして適切に認識し、Poetry で作成した仮想環境を使用して開発・デバッグできるようになります。

8. Azure Function コードの実装

GetTableData/__init__.py を編集して、コードを実装します。
Azure Functions v1のやり方らしい。

Azure Functions v2はfunction_app.py を編集して、コードを実装します。

9. local.settings.json の作成

ローカルテスト用の設定ファイルを作成します:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "python",
    "STORAGE_ACCOUNT_NAME": "yourstorageaccount",
    "STORAGE_ACCOUNT_KEY": "your-storage-account-key", 
    "TABLE_NAME": "yourtablename"
  },
  "Host": {
    "CORS": "*",
    "CORSCredentials": false
  }
}

10. GitHub 用の設定

.gitignore ファイルの作成

# Python
__pycache__/
*.py[cod]
*$py.class
.venv/
.vscode/
.python_packages/

# Azure Functions
local.settings.json
.python_packages
bin
obj
appsettings.json
local.settings.json

# Poetry
poetry.lock

11. ローカルテスト

ローカル環境で Function をテストします:

# Poetry 環境内でアプリケーションを実行
poetry run func start

12. .funcignoreの設定

functionsの関係無いファイルを除外できる

.git*
.vscode
.venv
__pycache__
*.pyc
*.pyo
*.pyd
.Python
env/
venv/
ENV/
node_modules
.python_packages
local.settings.json
test
.env
Thumbs.db
.DS_Store
pyproject.toml
poetry.lock
*.md
.specstory/

Discussion