4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Azure】Copilotと一緒にローカル環境でAzure Functionsを構築してみた

Posted at

1. はじめに

1-1 ご挨拶

初めまして、井村と申します。
普段はインフラを担当していますが、開発の知識も必要だと感じる場面が増えてきました。

今回は、生成AI「Copilot」の支援を受けながら、ローカル環境でAzure Functionsを構築・実行する手順を学びました。
今後の備忘録として、作業ログと学習内容をまとめておきます。

1-2 本記事の要約

1 . 本記事は以下テーブルの内容を記事にしました。

ステップ 状況
Python 仮想環境構築 ✅ 完了
Azure Functions Core Tools インストール ✅ 完了
プロジェクト初期化 ✅ 完了
HTTP トリガー関数作成 ✅ 完了
ローカル実行と動作確認 ✅ 完了

2 . ロードマップとCopilotとのやりとり

Copilotに以下のように質問しました。

Pythonを利用してAzure Functionsを開発したい。
前提条件:Pythonの基本文法あり、AZ-305取得済み、開発経験なし。

Copilotからは以下のようなロードマップが提示されました。

  • 開発環境の準備(VS Code, venv, CLIツール)
  • Azure Functionsの基本理解(トリガー・バインディング)
  • ローカル開発とテスト(func start, pytest)
  • デプロイと運用(func azure functionapp publish)
  • セキュリティとスケーリング(認証・プラン選定)
  • 応用プロジェクト(Blob処理, REST API, Timer Trigger)

非常に体系的で、初心者にもわかりやすい内容でした。

3 . ローカル環境構築と実行手順(What / Why / 生成ファイル)

ステップ What(何をしたか) Why(なぜ必要か) 生成ファイル
プロジェクトフォルダ作成 mkdir azure-functions-python 作業ディレクトリの整理 空のフォルダ
仮想環境作成 python -m venv .venv 依存関係の分離 .venv/
仮想環境の有効化 .venv\Scripts\Activate.ps1 .venv環境に切り替え (環境変数切替)
ライブラリインストール pip install azure-functions SDK導入 .venv内にインストール
Core Toolsインストール npm install -g azure-functions-core-tools@4 CLIツール導入 funcコマンド使用可能
プロジェクト初期化 func init . --worker-runtime python 構成ファイル生成 host.json, local.settings.json, requirements.txtなど
関数作成 func new --name HttpExample --template "HTTP trigger" HTTPトリガー関数作成 function_app.py, function.json
関数実行 func start ローカルで動作確認 http://localhost:7071/api/HttpExample にアクセス可能

4 . 実行結果とレスポンス確認

ローカルで func start を実行し、ブラウザからアクセスした結果

Hello, 井村. This HTTP triggered function executed successfully.

Copilotからも「完璧です!」とのコメントをいただきました 🎉

5 . 次のステップ候補

  • JSONや外部APIを扱う関数ロジックの編集
  • Timer / Blob / Queue トリガーの実装
  • Azureへのデプロイと運用
  • GitHub ActionsによるCI/CD構築

2. Copilotとのやりとり

ここからはCopilotとのやりとりになります。

2.1 井村からCopilotへの質問

pythonを利用してazure functionsを開発したい。
開発者としてのロードマップを提示してください。

前提条件は以下の通りです。
- pythonの基本的な文法は有している。
- Azureの全般知識(AZ305は取得済み)有している。
- 開発経験はありません。

2.2 Copilotから井村への回答

井村さん、Azure Functions を Python で開発するためのロードマップを、現在のスキルセットに合わせて整理しました。
Pythonの基本文法とAzureの全般知識(AZ-305取得済み)をお持ちとのことなので、
インフラや設計の理解は十分にある前提で、開発者としてのステップアップに焦点を当てます。

---
 Azure Functions × Python 開発ロードマップ
🔰 ステップ 1: 開発環境の準備
Python 開発環境
VS Code + Python 拡張機能
venv による仮想環境構築
Azure CLI / Azure Functions Core Tools のインストール
az コマンドで Azure リソース操作
func コマンドでローカル開発・デプロイ
📦 ステップ 2: Azure Functions の基本理解
Function App の構造
トリガー(HTTP, Timer, Blob, Queue など)
入出力バインディング(Storage, Cosmos DB, Service Bus など)
Python での関数定義
__init__.py に関数ロジック
function.json にトリガー・バインディング定義
🧪 ステップ 3: ローカル開発とテスト
ローカルでの関数実行
func start でローカルサーバ起動
Postman や curl で HTTP リクエスト送信
ユニットテストの導入
pytest を使ったテストコード作成
モックを使った Azure SDK のテスト
🚀 ステップ 4: デプロイと運用
Azure へのデプロイ方法
func azure functionapp publish <app_name>
GitHub Actions による CI/CD パイプライン構築
ログとモニタリング
Application Insights の導入
Azure Monitor でのログ分析
🔐 ステップ 5: セキュリティとスケーリング
認証・認可
Azure AD による認証
Function Key や OAuth の活用
スケーリングとパフォーマンス
Consumption Plan vs Premium Plan
コールドスタート対策
🧠 ステップ 6: 応用と実践プロジェクト
実践プロジェクト例
Blob Storage にアップロードされたファイルを処理する関数
HTTP API として動作する RESTful Function
Timer Trigger で定期的にデータ収集・処理
Infrastructure as Code
Bicep や Terraform による Function App の構築

2.3 井村にて「VS Code + Python 拡張機能」の作業が完了。

2.4 井村からCopilotへの質問

「VS Code + Python 拡張機能」は完了しました。「venv による仮想環境構築」について教えてください。

2.5 Copilotから井村への回答

仮想環境(`venv`)は、Python プロジェクトごとに依存関係を分離するための仕組みです。
Azure Functions の開発でも、ライブラリの競合を防ぐために非常に重要です。
以下に、 Windows/macOS/Linux 共通の手順 を紹介します。
---

🧰 仮想環境(venv)の構築手順

1 プロジェクトフォルダの作成
mkdir azure-functions-python
cd azure-functions-python

2 仮想環境の作成
python -m venv .venv

- `.venv` は仮想環境の名前。任意の名前でもOKですが、慣例的に `.venv` がよく使われます。

3 仮想環境の有効化

# Windows(PowerShell)
.venv\Scripts\Activate.ps1

# macOS / Linux
source .venv/bin/activate

4 有効化の確認
以下のように、プロンプトに `(venv)` が表示されれば成功です。
(venv) azure-functions-python $

5 必要なパッケージのインストール
Azure Functions 用のライブラリをインストールします。
pip install azure-functions

 ✅ 次のステップ
仮想環境ができたら、次は Azure Functions Core Tools を使って関数アプリを作成するステップに進めます。
ご希望であれば、次のコマンドや構成も一緒にご案内します!

仮想環境の構築はうまくいきそうですか?それとも一緒にコマンドを実行しながら進めましょうか?

2.6 井村からCopilotへの質問(作業ログの貼付)

PS C:\Users\user\Desktop\desktop\> mkdir azure-functions-python

    Directory: C:\Users\user\Desktop\desktop\

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          2025/08/29     9:52                azure-functions-python

PS C:\Users\user\Desktop\desktop\> cd azure-functions-python                                              

PS C:\Users\user\Desktop\desktop\azure-functions-python> python -m venv .venv

PS C:\Users\user\Desktop\desktop\azure-functions-python> .venv\Scripts\Activate.ps1      
(.venv) PS C:\Users\user\Desktop\desktop\azure-functions-python> 
(.venv) PS C:\Users\user\Desktop\desktop\azure-functions-python> pip install azure-functions
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLEOFError(8, '[SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1000)'))': /simple/azure-functions/
Collecting azure-functions
  WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLEOFError(8, '[SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1000)'))': /packages/68/ed/7555a93de73fb5743f9666c3673727b7b74e705fd278ea360ffe95559d5f/azure_functions-1.23.0-py3-none-any.whl.metadata
  Downloading azure_functions-1.23.0-py3-none-any.whl.metadata (7.3 kB)
Collecting werkzeug~=3.1.3 (from azure-functions)
  Downloading werkzeug-3.1.3-py3-none-any.whl.metadata (3.7 kB)
Collecting MarkupSafe>=2.1.1 (from werkzeug~=3.1.3->azure-functions)
  Downloading MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl.metadata (4.1 kB)
Downloading azure_functions-1.23.0-py3-none-any.whl (137 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 137.0/137.0 kB 1.0 MB/s eta 0:00:00
Downloading werkzeug-3.1.3-py3-none-any.whl (224 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 224.5/224.5 kB 2.0 MB/s eta 0:00:00
Downloading MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl (15 kB)
Installing collected packages: MarkupSafe, werkzeug, azure-functions
Successfully installed MarkupSafe-3.0.2 azure-functions-1.23.0 werkzeug-3.1.3
Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError(SSLEOFError(8, '[SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1000)'))) - skipping
(.venv) PS C:\Users\user\Desktop\desktop\azure-functions-python>

2.7 Copilotから井村への回答

完璧です!🎉  
仮想環境の作成と有効化、そして `azure-functions` パッケージのインストールまで、
すべて正しく実行されています。SSLエラーの警告が一部出ていますが、
必要なパッケージは問題なくインストールされているので、次に進んで大丈夫です。

---

✅ 次のステップ:Azure Functions プロジェクトの作成

ここからは、Azure Functions Core Tools を使って、Python の関数アプリを作成していきます。

1 Azure Functions Core Tools のインストール(未インストールの場合)
PowerShell で以下を実行します(管理者権限が必要な場合あり):

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


> ※ Node.js が必要です。未インストールの場合は Node.js公式サイト からインストールしてください。

---

2 関数アプリの初期化
仮想環境が有効な状態で、以下のコマンドを実行します:

【bash】
func init . --worker-runtime python

これで、Python 用の Azure Functions プロジェクトが初期化されます。

---

3 HTTP トリガー関数の作成
【bash】
func new --name HttpExample --template "HTTP trigger"

- `HttpExample` は関数名(任意)
- `--template` でトリガーの種類を指定(今回は HTTP)

---

4 ローカルで実行してみる
【bash】
func start

実行後、`http://localhost:7071/api/HttpExample` のような URL が表示されるので、
ブラウザや curl、Postman などでアクセスしてみてください。

---

🔧 補足
- `requirements.txt` に依存パッケージが記載されるので、今後は `pip install` したら `pip freeze > requirements.txt` を忘れずに。
- VS Code で `.venv` を認識しない場合は、Python インタープリターを手動で `.venv\Scripts\python.exe` に設定してください。

---

次は「関数の中身をどう書くか」や「他のトリガーを使ってみたい」など、どこに進みましょうか?  
井村さんの目的に合わせて、実践的なサンプルもご案内できます!

2.8 井村からCopilotへの質問(作業ログの貼付)

(.venv) PS C:\Users\user\Desktop\desktop\azure-functions-python> npm install -g azure-functions-core-tools@4 --unsafe-perm true

added 35 packages in 7m

5 packages are looking for funding
  run `npm fund` for details
npm notice 
npm notice New major version of npm available! 10.2.4 -> 11.5.2
npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.5.2
npm notice Run npm install -g npm@11.5.2 to update!
npm notice 

(.venv) PS C:\Users\user\Desktop\desktop\azure-functions-python> func --version
4.2.1

2.9 Copilotから井村への回答

素晴らしいです!🎉
Azure Functions Core Tools のインストールも無事完了しています。
これで、ローカルで Azure Functions を作成・実行・デプロイする準備が整いました。
バージョン確認ありがとうございます!
`func --version` の結果が **4.2.1** なので、
Azure Functions Core Tools のインストールは正常に完了しています。
これでローカル開発環境は完全に整いました 🎉

---

🧭 次のステップ:プロジェクトの初期化と関数作成

1 プロジェクトの初期化

以下のコマンドを実行して、Python 用の Azure Functions プロジェクトを初期化してください:

【bash】
func init . --worker-runtime python


このコマンドで、現在のフォルダに必要な構成ファイル
(`host.json`, `.vscode`, `requirements.txt` など)が生成されます。

---

2 HTTP トリガー関数の作成

次に、HTTP トリガーの関数を作成します:

【bash】
func new --name HttpExample --template "HTTP trigger"

- `HttpExample` は関数名(任意)
- `--template` でトリガーの種類を指定(今回は HTTP)

---

3 ローカルで関数を実行

作成した関数をローカルで起動してみましょう:

【bash】
func start


起動後、以下のような URL が表示されるはずです:


http://localhost:7071/api/HttpExample

この URL にブラウザや Postman、curl などでアクセスすると、
関数が実行されてレスポンスが返ってきます。

curl http://localhost:7071/api/HttpExample?name=井村

---

準備が整っているので、次のコマンドを実行してみてください。
もし途中でエラーが出たり、動作確認がうまくいかなかったらすぐにサポートします!  
進めてみましょうか?

2.10 井村からCopilotへの質問(作業ログの貼付)

(.venv) PS C:\Users\user\Desktop\desktop\azure-functions-python> func init . --worker-runtime python
Found Python version 3.12.2 (py).
The new Python programming model is generally available. Learn more at https://aka.ms/pythonprogrammingmodel
Writing requirements.txt
Writing .funcignore
Writing function_app.py
Writing .gitignore
Writing host.json
Writing local.settings.json

(.venv) PS C:\Users\user\Desktop\desktop\azure-functions-python> func new --name HttpExample --template "HTTP trigger"
Use the up/down arrow keys to select a Auth Level:Appending to C:\Users\user\Desktop\desktop\\azure-functions-python\function_app.py
The function "HttpExample" was created successfully from the "HTTP trigger" template.

(.venv) PS C:\Users\user\Desktop\desktop\azure-functions-python> func start
Found Python version 3.12.2 (py).

Azure Functions Core Tools
Core Tools Version:       4.2.1+c3972ebc5fe0738986309e79a6b861828a9812d9 (64-bit)
Function Runtime Version: 4.1041.200.25360

[2025-08-29T06:14:49.431Z] Worker process started and initialized.

Functions:

        HttpExample:  http://localhost:7071/api/HttpExample

For detailed output, run func with --verbose flag.
[2025-08-29T06:15:03.866Z] Executing 'Functions.HttpExample' (Reason='This function was programmatically called via the host APIs.', Id=aec731b1-815f-4d1c-a65d-ef8b7f045f8c)
[2025-08-29T06:15:04.002Z] Python HTTP trigger function processed a request.
[2025-08-29T06:15:04.056Z] Executed 'Functions.HttpExample' (Succeeded, Id=aec731b1-815f-4d1c-a65d-ef8b7f045f8c, Duration=262ms)
[2025-08-29T06:16:46.608Z] Executing 'Functions.HttpExample' (Reason='This function was programmatically called via the host APIs.', Id=5e47298b-55a8-4294-8018-02e797eab4c0)
[2025-08-29T06:16:46.613Z] Python HTTP trigger function processed a request.
[2025-08-29T06:16:46.615Z] Executed 'Functions.HttpExample' (Succeeded, Id=5e47298b-55a8-4294-8018-02e797eab4c0, Duration=16ms)

007.png

008.png

2.11 Copilotから井村への回答

素晴らしいです!🎉  
`func start` によってローカルの Azure Functions が正常に起動し、
HTTP トリガー関数 `HttpExample` にアクセスして
「Hello, 井村. This HTTP triggered function executed successfully.」
というレスポンスが返ってきたということは、
関数の作成・実行・レスポンス確認まで完全に成功しています!
---

✅ ここまでの進捗まとめ

ステップ 状況
Python 仮想環境構築 ✅ 完了
Azure Functions Core Tools インストール ✅ 完了
プロジェクト初期化 ✅ 完了
HTTP トリガー関数作成 ✅ 完了
ローカル実行と動作確認 ✅ 完了
---

🔜 次にできること

ここからは目的に応じて、以下のようなステップに進めます:

1. 🔧 関数のロジックを編集してみる
- 例えば、JSON を受け取って処理する
- 外部 API を呼び出す
- Azure Storage や Cosmos DB と連携する

2. 📦 他のトリガーを試す
- Timer Trigger:定期実行(例:毎日 9:00 に処理)
- Blob Trigger:ファイルアップロード時に処理
- Queue Trigger:メッセージ受信時に処理

3. 🚀 Azure へのデプロイ
- `func azure functionapp publish <アプリ名>` でデプロイ
- Azure Portal で Function App を作成して連携

4. 🧪 テストとCI/CD
- `pytest` によるユニットテスト
- GitHub Actions で自動デプロイ

---

井村さんの目的に合わせて、次に進むステップを一緒に考えましょうか?  
どんなテーマを想定されていますか?それに合わせて、実践的な関数例や構成をご提案できます!

2.12 井村からCopilotへの質問

ありがとうございます。次に進みたいですがまずはローカル環境構築から実行までの復習をしたいです。
各作業項目、何をしたか(what)、なぜ実施する必要があるのか(why)、
実行したコマンドで生成されたファイルの簡単な説明を列挙してください。

2.13 Copilotから井村への回答

こちらこそありがとうございます!  
井村さんが進められたローカル環境構築から関数の実行までの流れを、「What(何をしたか)」
「Why(なぜ必要か)」「生成されたファイルの説明」の3つの観点で整理しました。
---

🧭 Azure Functions × Python ローカル開発復習まとめ

ステップ What(何をしたか) Why(なぜ必要か) 生成されたファイル・フォルダ
① プロジェクトフォルダ作成 mkdir azure-functions-python 作業用のディレクトリを用意することで、ファイルや環境を整理しやすくする 空のフォルダ
② 仮想環境作成 python -m venv .venv 他のプロジェクトと依存関係を分離し、環境の汚染を防ぐ .venv/:仮想環境のPython実行ファイルやライブラリ群
③ 仮想環境の有効化 .venv\Scripts\Activate.ps1 作業中のPython環境を .venv に切り替えることで、インストールしたライブラリがこのプロジェクト専用になる (環境変数が切り替わるだけでファイルは生成されない)
④ 必要ライブラリのインストール pip install azure-functions Azure Functions の Python SDK を使うため azure-functions ライブラリが .venv にインストールされる
⑤ Azure Functions Core Tools インストール npm install -g azure-functions-core-tools@4 --unsafe-perm true ローカルで関数を作成・実行・デプロイするための CLI ツール グローバルに func コマンドが使えるようになる
⑥ プロジェクト初期化 func init . --worker-runtime python Azure Functions 用のプロジェクト構造を作成する - host.json: 関数ホストの設定
- local.settings.json: ローカル実行時の設定(環境変数など)
- .vscode/: VS Code 用設定
- requirements.txt: Python依存パッケージ一覧
⑦ 関数の作成 func new --name HttpExample --template "HTTP trigger" HTTP リクエストで呼び出せる関数を作成する - HttpExample/function_app.py: 関数の本体
- HttpExample/function.json: トリガーやバインディングの定義
⑧ 関数の実行 func start ローカルで関数を起動し、動作確認する 実行ログが表示され、関数が http://localhost:7071/api/HttpExample で呼び出せるようになる
---
📝 追加補足

- `requirements.txt`:今後 `pip install` したライブラリは `pip freeze > requirements.txt` で記録しておくと、Azure へのデプロイ時に便利です。
- `local.settings.json`:Azure にデプロイする際はこのファイルはアップロードされません。機密情報(APIキーなど)を入れる場合は注意が必要です。

---

この復習で、流れが整理できたと思います!  
次は「関数のロジックを編集する」「他のトリガーを試す」「Azure にデプロイする」など、
どこに進みましょうか?  

3. 終わりに

ここまで読んでくださってありがとうございました。
生成AIの力を借りながら、楽しく学習できたことに感謝しています。
今後は、他のトリガーやAzureとの連携、CI/CDなどにも挑戦していきたいと思います。

4. いつか確認

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?