月末だけ忙しい経費精算
福岡の商社では、社員が領収書の写真を経費精算のシステムに送ります。写真が届くと、金額と日付を読み取ります。
普段は1日に50枚ほどです。ところが月末の2日間だけ、1日3,000枚に増えます。
月末に合わせて大きなサーバーを用意すると、残りの28日はほとんど空いたままです。
このレッスンのゴール
メモ
サーバーレスのコードが向いている仕事を見分けられる。
今日のキーワード
| ことば | いみ | れい |
|---|---|---|
| サーバーレス | サーバーの管理をせずにコードを動かす方法 | |
| 関数 | 呼ばれたときだけ動く短いコード | |
| イベント | 関数を呼び出すきっかけ | 写真がバケットに置かれた |
| 呼び出し回数 | 関数が動いた回数 | |
| 実行時間の上限 | 1回の呼び出しで動ける最長の時間 | |
| コールドスタート | しばらく呼ばれなかった後の遅い立ち上がり |
学生が入力するセルは、このプレビューでは空白です。
イベントが来たときだけ動く
サーバーレスでは、サーバーを用意しません。短いコードを関数として登録します。
関数は、イベントが来たときだけ動きます。たとえば「領収書の写真がバケットに置かれた」「毎晩0時になった」がイベントです。
仕事がない時間、関数は動いていません。料金は、呼び出し回数と動いた時間で決まります。
試す: イベントで関数を呼ぶ
# 関数は、イベントを1つ受け取って、1回分の仕事をします。
def handle(event):
key = event["key"]
# 本物なら、ここで写真から金額と日付を読み取ります
print("処理します:", key)
return "完了"
# イベントが3回来たつもりで、関数を3回呼びます
events = [
{"key": "receipts/2026-10-31/0001.jpg"},
{"key": "receipts/2026-10-31/0002.jpg"},
{"key": "receipts/2026-10-31/0003.jpg"},
]
for event in events:
print(handle(event))
# 4件目のイベントを一覧に加えて、もう一度実行しましょう。
向く仕事と向かない仕事
サーバーレスが向くのは、きっかけがはっきりした短い仕事です。量が日によって大きく変わる仕事にも向きます。月末に3,000回呼ばれても、クラウド側が自動で数を増やします。
向かないのは、長く動き続ける仕事です。関数には実行時間の上限があります。上限が15分なら、2時間かかる集計は途中で止められます。
また、しばらく呼ばれないと、最初の1回はコールドスタートで少し遅れます。
例: サーバーレスにするか
| 仕事 | 向き | 理由 |
|---|---|---|
| 領収書の写真から金額を読む | 向く | 短く、きっかけがある |
| 毎晩0時に前日の件数をメールする | 向く | 1日1回だけ動く |
| 2時間かかる月次の集計 | 向かない | 上限の時間を超える |
| 1日中、毎秒注文を受けるサイト | 向かないことが多い | ずっと動くならサーバーが安い |
学生が入力するセルは、このプレビューでは空白です。
よくある間違い
注意
サーバーレスにはサーバーが本当にない、と思う人がいます。実際は、コードはクラウドの会社のサーバーで動いています。サーバーの準備や管理を、自分たちがしなくてよいという意味です。だから、上限の時間やメモリなど、相手が決めた枠の中で動かす必要があります。
呼ばれない時間は0円
例として、呼び出し1回が2円、月末に合わせたサーバーが月36,000円とします。金額は説明用の例です。
経費精算は、普段の28日で1,400回、月末の2日で6,000回です。合わせて7,400回、14,800円です。サーバーより安くなります。
1日中、毎秒呼ばれる仕事なら、1か月で約260万回です。それならサーバーの方が安くなります。
例: 月の料金で比べる
| 仕事 | 呼び出し回数 | サーバーレス | サーバー |
|---|---|---|---|
| 経費精算の写真 | 7,400回 | 14,800円 | 36,000円 |
| 毎秒の注文 | 2,592,000回 | 5,184,000円 | 36,000円 |
学生が入力するセルは、このプレビューでは空白です。