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/HttpTrigger1Step 4: 関数を動かす(トリガー)
表示されたURLに、Webブラウザから ?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” に設定します。MyDatabaseConnectionString や SendGridApiKey: これらが自分で追加したカスタム設定です。
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開発にこの手法を取り入れて、快適なサーバーレス開発を実現してください!

コメント