Azure Functions を Python で開発していて、VSCode を使ってブレークポイントを仕込むようなデバッグのやり方がまとまっていなかったので記事としてまとめることにしました。
本記事では、debugpy を使って、Python を使用した Azure Functions にブレークポイントを仕込んでデバッグする方法について紹介します。
debugpyは Microsoft が開発している Python の Debug Adapter Protocol(DAP)の実装です。
Debug Adapter Protocol(DAP)は特定の IDE やエディタに依存せずに各プログラミング言語のデバッグを可能にするプロトコルです。
Debug Adapter を介してプログラムをデバッグ起動することで、VSCode などのクライアントからデバッグ操作が可能です。
まず Azure Functions のプロジェクトの依存関係に debugpy を追加します。
# パッケージマネージャーにuvを利用していますがpipやpoetryでも同様ですuvadd--dev debugpy
また VSCode の Python の拡張機能を入れておきます。
https://marketplace.visualstudio.com/items?itemName=ms-python.python
Azure Functions Core Tools のfunc start
コマンドでは--language-worker
オプションで言語ワーカーの Python 起動時に引数を渡すことができます。
これを利用してdebugpy
を実行します。
# debugpyを利用してデバッグモードで関数アプリを起動するfunc start\--verbose\--language-worker --'-m debugpy --listen 0.0.0.0:5678'
これで Python を使用した Azure Functions の関数アプリをデバッグモードで起動できます。
続いて VSCode 側の設定をします。
.vscode/tasks.json
の設定VSCode では.vscode/tasks.json
を使ったタスクランナー的な機能があります。
ここに先ほどのデバッグ起動のコマンドをタスクとして定義しておきます。
{"version":"2.0.0","tasks":[{"type":"shell","label":"func: start-debug","command":". .venv/bin/activate && func start --verbose --language-worker -- '-m debugpy --listen 0.0.0.0:5678'","args":[],"isBackground":true,"problemMatcher":"$func-python-watch"}]}
.vscode/launch.json
の設定続いて.vscode/launch.json
を使って VSCode のデバッグの構成を組みます。
{"version":"0.2.0","configurations":[{"name":"関数アプリ - デバッグ実行","type":"debugpy","request":"attach","connect":{"host":"localhost","port":5678},"preLaunchTask":"func: start-debug","justMyCode":false}]}
このデバッグ構成がポイントです。preLaunchTask
で先ほど.vscode/tasks.json
に定義したタスクfunc: start-debug
を指定しています。
これによって VSCode からデバッグ起動を実行した際に、関数アプリはdebugpy
によってデバッグモードで起動します。
その後、VSCode からdebugpy
にアタッチします。
justMyCode
をfalse
にしているのは好みですが、私はライブラリ側のコード部分もデバッグ時はチェックしたいので基本的にfalse
にしています。
実際に関数アプリのコードにブレークポイントを指定してデバッグをしてみます。
今回は HTTP トリガーの関数でクエリパラメータを取り出す部分にブレークポイントを仕込みます。
この状態で、VSCode からデバッグ起動を開始します。
デバッグ起動のやり方は「実行とデバッグ」タブの上部で開始ボタンを押すだけです。
正常に立ち上がれば、VSCode はデバッグ画面になります。
この状態で HTTP トリガーの関数アプリのエンドポイントにアクセスします。
すると、きちんとブレークポイントを仕込んだ箇所で処理が止まります。
これでデバッグコンソールを利用して変数の中身を確認したり、ステップ実行などのデバッグ操作ができます。
本記事では debugpy を使って Python を使用した Azure Functions の関数アプリのデバッグ方法を紹介しました。
内容は Python ですが、デバッグ方法を理解すれば他の言語の Azure Functions の関数アプリのデバッグでも応用できますね。
バッジを受け取った著者にはZennから現金やAmazonギフトカードが還元されます。