Azure Functions開発入門|VS Codeでの関数作成からデプロイまでの全手順
生徒
「サーバーレス(さーばーれす)な開発に興味があるのですが、Azure Functions(あじゅーる・ふぁんくしょんず)をVS Code(ヴぃじゅある・すたじお・こーど)で使うにはどうすればいいですか?」
先生
「Azure Functionsは、サーバーの管理を意識せずにコードを実行できる非常に便利なサービスです。VS Codeの拡張機能を使えば、作成からクラウドへのデプロイ(公開)までスムーズに行えますよ。」
生徒
「初心者でも自分のパソコンからクラウドへプログラムを飛ばせるんでしょうか?」
先生
「もちろんです!まずは開発環境(かいはつかんきょう)を整えるところから、ステップバイステップで解説していきましょう!」
1. Azure Functionsとは何か?サーバーレスの基本
Azure Functions(アジュール・ファンクションズ)は、Microsoft(まいくろそふと)が提供するクラウドコンピューティングサービスの一つで、サーバーレス・コンピューティングと呼ばれる形態を採用しています。通常、Webアプリケーションを動かすにはサーバーをレンタルしてOSの設定を行う必要がありますが、サーバーレスではそれらの面倒な管理をすべてクラウド側が引き受けてくれます。
開発者は「動かしたい処理(関数)」を書くだけで、特定のイベント(HTTPリクエストやタイマーなど)が発生したときにだけプログラムが実行されます。使った分だけ料金が発生する従量課金制(じゅうりょうかきんせい)が基本のため、コストを抑えたい個人開発者や初心者にも非常に人気があります。歴史的には、AmazonのAWS Lambda(らむだ)に対抗する形で進化し、今ではC#やJavaScript、Pythonなど多くの言語をサポートしています。
2. 開発に必要なツールのインストールと準備
まずは、自分のパソコンで開発を行うための準備をしましょう。以下のツールをインストールする必要があります。これらはすべて無料で利用可能です。
- Visual Studio Code (VS Code):世界中で使われている軽量で強力なコードエディタです。
- Azure Functions Core Tools:ローカル環境で関数を実行・デバッグするために必要です。
- Azure Functions 拡張機能:VS Code内でAzureを操作するためのプラグインです。
- .NET SDK:今回はC#(しーしゃーぷ)を使用するため、最新のSDKをインストールします。
インストールが完了したら、VS Codeを起動し、左側の「拡張機能」アイコンから「Azure Functions」を検索してインストールしてください。これにより、エディタ上で直接Azureのアイコンが表示されるようになります。
3. VS Codeで初めての関数プロジェクトを作成する
準備ができたら、新しいプロジェクトを作成しましょう。VS CodeのAzureアイコンをクリックし、「Create New Project」を選択します。画面上部に出てくる指示に従って、保存フォルダーの選択、言語(C#)、テンプレート(HTTP trigger)などを選んでいきます。
HTTP trigger(えいちてぃーてぃーぴー・とりがー)とは、特定のURLにアクセスしたときにプログラムが動き出す仕組みのことです。Webサイトのお問い合わせフォームの送信ボタンを押したときの処理などに使われます。作成が終わると、以下のような基本的なコードが自動生成されます。
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
namespace MyFirstFunction
{
public class SimpleGreeting
{
[Function("SimpleGreeting")]
public IActionResult Run([HttpTrigger(AuthorizationLevel.Anonymous, "get")] HttpRequest req)
{
return new OkObjectResult("Azure Functionsの世界へようこそ!");
}
}
}
このコードは、ブラウザからアクセスされた際に「Azure Functionsの世界へようこそ!」というメッセージを返すだけのシンプルなものです。まずはここからスタートしましょう。
4. 計算処理を行う関数の実装例
次に、少しだけ実用的なプログラムを書いてみましょう。2つの数値を足し算する簡単なAPIを作成します。プログラムは論理的な思考(ろんりてきなしこう)を育てるのに最適です。以下のコードは、URLの末尾に数値を付けてアクセスすると、その合計を計算して返します。
[Function("AddNumbers")]
public IActionResult RunAdd([HttpTrigger(AuthorizationLevel.Anonymous, "get")] HttpRequest req)
{
string num1 = req.Query["a"];
string num2 = req.Query["b"];
if (int.TryParse(num1, out int a) && int.TryParse(num2, out int b))
{
int result = a + b;
return new OkObjectResult($"計算結果は {result} です。");
}
return new BadRequestObjectResult("数値を正しく入力してください。");
}
この関数を実行すると、以下のような結果が得られます。プログラムが正しく動いていることを確認しましょう。
URL例: http://localhost:7071/api/AddNumbers?a=10&b=20
実行結果: 計算結果は 30 です。
5. ローカル環境でのテストとデバッグ方法
プログラムを書いたら、いきなりクラウドへ上げるのではなく、自分のパソコンの中で動かしてみる「ローカルデバッグ」が重要です。VS Codeで「F5」キーを押すと、Azure Functions Core Toolsが起動し、ローカルサーバーが立ち上がります。ターミナル(画面下の黒い領域)に、アクセス可能なURLが表示されます。
func start
Found Python version 3.9.13 (python).
Azure Functions Core Tools
Core Tools Version: 4.0.5198
Worker Runtime: dotnet-isolated
Functions:
SimpleGreeting: [GET] http://localhost:7071/api/SimpleGreeting
AddNumbers: [GET] http://localhost:7071/api/AddNumbers
表示されたURLをCtrlキーを押しながらクリックすると、ブラウザが開き、先ほど作成したプログラムの実行結果が表示されます。エラーが出た場合は、VS Codeのデバッグ機能を使って、一行ずつプログラムを止めながらどこが間違っているかを確認しましょう。
6. 条件分岐を使った高度な関数作成
次に、入力された値によって返答を変える「条件分岐(じょうけんぶんき)」を組み込んだコードを見てみましょう。これは、ユーザーの年齢によって成人か未成年かを判定するような仕組みです。プログラミングの基本である「if文」をフル活用します。
[Function("AgeCheck")]
public IActionResult RunCheck([HttpTrigger(AuthorizationLevel.Anonymous, "get")] HttpRequest req)
{
string ageString = req.Query["age"];
if (int.TryParse(ageString, out int age))
{
if (age >= 18)
{
return new OkObjectResult("あなたは成人です。");
}
else
{
return new OkObjectResult("あなたは未成年です。");
}
}
return new BadRequestObjectResult("年齢を数値で入力してください。");
}
このコードは、実社会でもよく使われるユーザー認証(にんしょう)や入力チェックの基礎となります。複雑な条件を組み合わせることで、より高度なアプリケーションへと発展させることができます。
7. Azureへデプロイして世界中に公開する
ローカルでのテストが成功したら、いよいよクラウドのAzure上へプログラムを公開(デプロイ)します。これにより、自分のパソコンを閉じていても、世界中のどこからでもあなたの作った関数にアクセスできるようになります。
デプロイの手順は以下の通りです:
- Azureアイコンをクリックし、「Resources」の横にある「+」ボタンを押して「Create Function App in Azure」を選択します。
- アプリ名(世界で唯一の名前)を入力します。
- 実行スタック(.NET 8など)とリージョン(Japan Eastなど)を選択します。
- 作成されたリソースを右クリックし、「Deploy to Function App」を選択して完了です。
8. データベース連携と今後の学習ステップ
Azure Functionsの本当の力は、他のサービスと連携したときに発揮されます。例えば、Azure SQL Databaseにデータを保存したり、Blob Storage(ぶろぶ・すとれーじ)にファイルを保存したりすることが可能です。まずは、SQLを使ってデータを抽出する簡単なイメージを掴んでおきましょう。
id | name | age | email
---+------------+-----+-------------------
1 | 佐藤健一 | 24 | sato@example.com
2 | 鈴木愛 | 31 | suzuki@example.com
3 | 高橋大介 | 45 | takahashi@example.com
4 | 田中裕子 | 22 | tanaka@example.com
このようなテーブルから、特定のユーザーを取得するSQL文は以下のようになります。
SELECT name, email
FROM Users
WHERE age < 30;
実行した結果、以下のようなデータが関数を通じて取得できます。
name | email
---------+-------------------
佐藤健一 | sato@example.com
田中裕子 | tanaka@example.com
このように、関数とデータベースを組み合わせることで、本格的なWebシステムを構築できるようになります。Azureのドキュメント(公式の説明書)は非常に充実しているため、一つずつ新しい技術を組み合わせて、自分だけの便利なツールを作ってみてください。一歩ずつ進んでいけば、あなたも立派なクラウドエンジニアになれるはずです!
まとめ
ここまで、Azure Functions(あじゅーる・ふぁんくしょんず)の基礎からVS Code(ヴぃじゅある・すたじお・こーど)を用いた具体的な開発手順、そしてクラウドへのデプロイ(公開)方法までを詳しく解説してきました。サーバーレス・コンピューティングという画期的な仕組みを利用することで、私たちは物理的なサーバーの管理やOSの複雑な設定から解放され、純粋に「プログラムのロジック」を記述することだけに集中できるようになります。これは現代のシステム開発において非常に大きなメリットであり、開発スピードの向上や運用コストの削減に直結する重要な技術です。
今回の学習を通じて、HTTPトリガー(えいちてぃーてぃーぴー・とりがー)を使用した基本的な関数の作成方法を学びました。ブラウザからのリクエストを受け取り、適切なレスポンスを返すという一連の流れは、WebアプリケーションやAPI開発の根幹をなす部分です。C#(しーしゃーぷ)という強力なプログラミング言語を使用することで、型安全で保守性の高いコードを書くことができる点も魅力の一つです。また、ローカル環境でのデバッグ手順を確認したことで、開発効率を落とさずにエラーを特定し、修正するスキルも身についたはずです。
さらに、条件分岐(じょうけんぶんき)や外部サービスとの連携についても触れました。データベース(でーたべーす)とのやり取りは、実用的なアプリケーションを構築する上で欠かせない要素です。Azure SQL DatabaseなどのクラウドデータベースとAzure Functionsを組み合わせることで、スケーラブルで堅牢なバックエンドシステムを短期間で構築することが可能になります。例えば、ユーザーからの入力を受け取り、それをデータベースに保存したり、特定の条件に合致するデータを抽出して加工し、ユーザーに通知したりといった処理が、数行のコードとわずかな設定で実現できるのです。
応用的なプログラムの実装例
まとめとして、学んだ知識を統合し、もう少し実用に近いプログラムの例を紹介します。以下のコードは、入力された名前をチェックし、データベースに登録されているユーザーかどうかを判定するシミュレーションプログラムです。実際のデータベース接続コードは複雑になるため、ここでは論理的な流れ(ろじっく)を理解するためのサンプルとして記述します。
[Function("UserVerification")]
public IActionResult RunVerify([HttpTrigger(AuthorizationLevel.Anonymous, "get")] HttpRequest req)
{
string userName = req.Query["name"];
// 本来はここでデータベースからユーザーリストを取得します
// 今回は簡易的なリストでシミュレーションを行います
var registeredUsers = new List<string> { "佐藤健一", "鈴木愛", "高橋大介", "田中裕子" };
if (string.IsNullOrEmpty(userName))
{
return new BadRequestObjectResult("名前を指定してください。");
}
if (registeredUsers.Contains(userName))
{
return new OkObjectResult($"{userName}さんは登録済みユーザーです。");
}
else
{
return new OkObjectResult($"{userName}さんは未登録です。新規登録を行ってください。");
}
}
このプログラムを実行すると、クエリパラメータで渡された名前に応じて結果が変わります。実行結果のイメージは以下の通りです。
URL例: http://localhost:7071/api/UserVerification?name=佐藤健一
実行結果: 佐藤健一さんは登録済みユーザーです。
URL例: http://localhost:7071/api/UserVerification?name=山田太郎
実行結果: 山田太郎さんは未登録です。新規登録を行ってください。
プログラミングにおいて、このような「入力・処理・出力」の基本構造を理解することは非常に大切です。Azure Functionsは、この基本構造を最もシンプルに形にできるプラットフォームと言えるでしょう。また、VS Codeの拡張機能(かくちょうきのう)を使いこなすことで、ソースコードの変更を即座にローカルで確認し、完成したらコマンド一つで世界中にデプロイできる体験は、エンジニアとしての自信に繋がります。
これからの学習ステップとしては、さらに高度な「バインド(ばいんど)」という機能を学ぶことをお勧めします。バインドを使えば、データベースへの読み書きをさらに少ないコードで記述できるようになります。また、Azure Cosmos DBなどのモダンなデータベースとの連携や、GitHubを通じた自動デプロイ(CI/CD)の構築など、学ぶべきことは尽きません。しかし、まずは今日学んだ「自分で書いたコードがクラウドで動く」という感動を忘れずに、小さな機能からコツコツと作り続けてみてください。クラウドネイティブな開発者への道は、ここから始まります。
生徒
「先生、ありがとうございました!Azure Functionsを使うと、自分の書いたプログラムが魔法みたいにURL一つで動くようになるんですね。感動しました!」
先生
「その感動こそがエンジニアの原動力ですよ。サーバーレス(さーばーれす)の凄さは、今まで何時間もかかっていたサーバーのセットアップが不要になり、数分で公開まで辿り着けるスピード感にあります。」
生徒
「VS Code(ヴぃじゅある・すたじお・こーど)でのデバッグも便利でした。プログラムが途中でどう動いているか、変数の中身を見ながら確認できるので、エラーを見つけるのがパズルみたいで楽しかったです。」
先生
「良い視点ですね。デバッグ(でばっぐ)は、ただの作業ではなく、プログラムの振る舞いを深く理解するための対話です。今回、C#(しーしゃーぷ)で条件分岐(じょうけんぶんき)を書いてみましたが、理解度はどうですか?」
生徒
「はい!if文を使って、年齢や名前で処理を分ける仕組みがよく分かりました。これを使えば、会員制のサイトや、特定の条件の時だけメールを送るようなシステムも作れそうですね。」
先生
「その通りです。さらにSQL(えすきゅーえる)を使ってデータベース(でーたべーす)と連携すれば、保存できるデータ量も格段に増えます。例えば、過去の全ユーザー情報を管理するテーブルを考えてみましょうか。」
id | name | age | email | status
---+--------------+-----+----------------------+-------
1 | 佐藤健一 | 24 | sato@example.com | active
2 | 鈴木愛 | 31 | suzuki@example.com | active
3 | 高橋大介 | 45 | takahashi@example.com| inactive
4 | 田中裕子 | 22 | tanaka@example.com | active
5 | 伊藤純平 | 19 | ito@example.com | active
6 | 渡辺美紀 | 28 | watanabe@example.com | inactive
7 | 山本和也 | 35 | yamamoto@example.com | active
生徒
「この中から、例えば『active(有効)』なユーザーだけを取り出すには、どういう命令を書けばいいんですか?」
先生
「その場合は、WHERE句を使って条件を指定します。以下のようなSQL文になりますよ。」
SELECT name, email
FROM Users
WHERE status = 'active' AND age >= 20;
生徒
「なるほど!statusがactiveで、さらに20歳以上の人を絞り込んでいるんですね。実行結果はどうなりますか?」
先生
「実行結果は、条件に当てはまるユーザーのリストになります。これを見てみてください。」
name | email
-------------+----------------------
佐藤健一 | sato@example.com
鈴木愛 | suzuki@example.com
田中裕子 | tanaka@example.com
山本和也 | yamamoto@example.com
生徒
「すごい!こうやって必要なデータだけを取り出して、Azure Functionsで加工してユーザーに届けるんですね。仕組みが繋がってきました!」
先生
「素晴らしい理解力です。Azure(あじゅーる)には他にもたくさんのサービスがありますが、まずはこのFunctionsとデータベースの組み合わせをマスターするのが、バックエンドエンジニアへの近道です。焦らず、自分のペースで新しい関数を追加して、プログラムを育てていきましょう!」
生徒
「はい!さっそく、学んだことを活かして自分だけの簡単な便利ツールを作ってみます。先生、これからもよろしくお願いします!」