スポンサーリンク
Azure

Azure Functionsのデバッグを効率化!VSCodeによるPythonローカル開発ガイド

Azure
この記事は約8分で読めます。

Azure FunctionsをAzure環境で開発している人はこの気持ちがわかると思います。

コードを少し修正するたびにAzureにデプロイするのは、時間がかかりますよね。また、デバッグのためにクラウド上でリソースを動かし続けると、意図せずコストがかかってしまうこともあります。

そこで重要になるのが、自分のPC(ローカル環境)で開発・デバッグを行うことです。

なぜローカル開発が重要なのか?

Azure Functionsの開発をローカルPCで行うことには、たくさんのメリットがあります。

  • 💰 コストゼロ: 開発やテストの段階では、Azureのコンピューティングリソースを使わないため、費用が一切かかりません。心置きなく試行錯誤できます。
  • 🚀 爆速な開発サイクル: コードを修正して、動作を確認するまでの待ち時間がありません。「修正 → 実行 → 確認」のループを高速に回せるため、開発効率が劇的に向上します。
  • オフラインどこでも開発: 一度環境を構築すれば、インターネット接続がない場所でも開発を進められます。
  • ⚙️ 強力なデバッグ機能: 今回ご紹介するように、VSCodeが持つ強力なデバッガをフル活用できます。printデバッグから卒業し、コードの内部を隅々まで覗きながらバグを特定できます。

この記事では、この強力なローカル開発環境を構築し、VSCodeでPythonのAzure Functionsをデバッグする方法を、丁寧に解説します!

準備編:デバッグ環境を整えよう 🛠️

まずは、デバッグを始めるために必要な道具(ツール)を揃えましょう。

  • Visual Studio Code: 言わずと知れた高機能エディタ。まだの方は公式サイトからダウンロードしてください。
  • Python拡張機能: VSCodeでPythonを快適に開発するための必須拡張機能です。拡張機能タブで Python と検索し、Microsoft提供のものをインストールします。
  • Azure Functions 拡張機能: VSCodeをAzure Functions開発に最適化するための拡張機能です。拡張機能タブで Azure Functions と検索してインストールしてください。
  • Python: Azure FunctionsがサポートするバージョンのPythonが必要です。ターミナルで python –version を実行して確認し、未インストールの場合はPython公式サイトからダウンロードします。仮想環境 (.venvなど) の利用を強く推奨します。
  • Azure Functions Core Tools: Functionsを自分のPCで動かすための司令塔です。ターミナル(WindowsならPowerShellやコマンドプロンプト)を開いて以下のコマンドを実行します。

※このツールのインストールにはNode.jsが必要です。公式サイトからLTS版をインストールしてください。その後で以下のコマンドを実行します。

npm install -g azure-functions-core-tools@4 --unsafe-perm true

実践編:いざ、デバッグ開始! 🚀

ここでは、実際にHTTPリクエストを受け取って動作する簡単な関数を例に、デバッグ手順を見ていきましょう。

Step 1: プロジェクトを開く

まずは、デバッグしたいAzure FunctionsのプロジェクトフォルダをVSCodeで開きます。

Step 2: ブレークポイントを仕掛ける

次に、デバッグで「ここで一時停止して中身を見たい!」という行を決めます。そのコードの行番号の左側の余白をクリックしてください。ポチッと赤い丸印が表示されます。これがブレークポイントです。

import logging
import azure.functions as func

def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    name = req.params.get('name')
    if not name:
        try:
            req_body = req.get_json()
        except ValueError:
            pass
        else:
            name = req_body.get('name')

    # ↓↓↓ この行にブレークポイントを設定! ↓↓↓
    if name:
        return func.HttpResponse(f"Hello, {name}. This HTTP triggered function executed successfully.")
    else:
        return func.HttpResponse(
             "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.",
             status_code=200
        )

Step 3: デバッグセッションを開始する (F5キーで一発!)

準備は整いました。キーボードの F5 キーを押すか、左側の「実行とデバッグ」メニューから緑色の再生ボタンをクリックしてください。

成功すると、ターミナルに以下のようなURLが表示されるはずです。

Functions:

        HttpTrigger1: [GET,POST] http://localhost:7071/api/HttpTrigger1

Step 4: 関数を動かす(トリガー)

表示されたURLに、Webブラウザから ?name=Python のようなパラメータを付けてアクセスしてみましょう。

http://localhost:7071/api/HttpTrigger1?name=Python

Step 5: コードの中を覗いてみよう!

URLにアクセスした瞬間、VSCodeの画面が切り替わり、Step 2で設定したブレークポイントの行がハイライトされて実行がピタッと止まります。おめでとうございます!デバッグモードに突入です!

この状態では、画面左側の「変数」パネルで変数の状態を確認したり、画面上部のデバッグツールバーでコードを一行ずつ実行したりできます。

知っておくと便利な豆知識 💡

local.settings.jsonを使いこなそう

データベースの接続文字列や外部サービスのAPIキーなど、コードに直接書き込みたくない情報は、プロジェクトのルートにある local.settings.json ファイルに記述します。

基本的な書き方

JSON
{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "python",
    "MyDatabaseConnectionString": "your_database_connection_string",
    "SendGridApiKey": "your_sendgrid_api_key"
  }
}

FUNCTIONS_WORKER_RUNTIME: ここを必ず “python” に設定します。MyDatabaseConnectionStringSendGridApiKey: これらが自分で追加したカスタム設定です。

Pythonコードから設定値を取得する方法

Pythonであれば、以下のようにosライブラリをインポートし、os.environ[“環境変数名”]で取得できます。

import os

# 環境変数から設定値を取得
connection_string = os.environ["MyDatabaseConnectionString"]
api_key = os.getenv("SendGridApiKey") # .getenv() を使うとキーが存在しなくてもエラーにならない
注意点
  • このファイルはAzureにデプロイされません。Azure上での設定は、Azure Portalの「構成」メニューから行います。
  • 絶対にGitリポジトリにコミットしないでください! local.settings.json は、プロジェクト作成時に自動で .gitignore に追加されているはずですが、必ず確認しましょう。

まとめ

本記事では、Azure FunctionsをローカルPCで開発・デバッグするメリットと、VSCodeを使った具体的な手順を解説しました。

ローカル開発は、コストを抑えつつ開発スピードを劇的に向上させるための必須スキルです。VSCodeの強力なデバッグ機能を活用すれば、バグ修正の時間が短縮されるだけでなく、より自信を持ってコードを書けるようになります。

ぜひ、あなたのPython開発にこの手法を取り入れて、快適なサーバーレス開発を実現してください!

コメント

タイトルとURLをコピーしました