サーバレスがなかなか理解できなかった時の記憶をたどっていろいろ質問してみた。

サーバが消えた?魔法使いの正体

🧙‍♂️(博士)「🐣よ、今日はサーバレスについて学ぶぞ。名前だけ聞くと"サーバが消えた魔法"みたいに思うかもしれんが、実はその正体はもっと地味で、でも奥深いんだ。」

🐣(学生)「サーバが無い?まさか博士がハリーポッターみたいに『サーバよ、消えろ!』って唱えたら本当に消えちゃったとか?」

🧙‍♂️(博士)「ハハハ、その発想、9割の人が最初に思うやつだ!だが実際には"サーバが無い"わけじゃない。クラウドの奥でサーバたちはギンギンに働いている。ただ利用者はその存在を意識しなくていいって意味なんだ。」

🐣(学生)「え?じゃあ詐欺じゃん。『無農薬野菜』って書いてあるのに、実は見えないところで農薬バンバン使ってるみたいな。」

🧙‍♂️(博士)「例えが斜め上すぎるが、まぁ的を射てる。“サーバレス"の"レス"は"管理レス"という意味だ。昔は自分でサーバを飼って、OSを入れて、障害に対応して…とまるでハムスターの世話だった。サーバレスではクラウド事業者が全部肩代わりしてくれるんだ。」

🐣(学生)「ハムスターって死んだら泣くけど、サーバって死んだらお客さんに怒られるからもっとつらいな。」

🧙‍♂️(博士)「しかもハムスターと違って、深夜3時に『データベースが応答しません』とかでたたき起こされるからな…。」


📌 注記:サーバレスの基本概念
サーバレス(Serverless)は「サーバが存在しない」という意味ではなく、「サーバの管理をクラウド事業者が代行する」アーキテクチャです。

  • 従来型:自分でサーバを購入・設置・管理
  • サーバレス:クラウド事業者がインフラを全て管理、利用者はコードのみに集中

サーバレスの仕組み:呼ばれたときだけ現れる忍者

🐣(学生)「使い方が難しそう。普通のサーバと何が違うの?」

🧙‍♂️(博士)「確かに。サーバレスは呼ばれたときだけ"ポンッ"と立ち上がって処理して、すぐ消える。だからアプリは"短距離ランナー"みたいに設計しなきゃならん。マラソンランナーは向いてない。」

🐣(学生)「つまり『今すぐ計算して!』って言われたら出てきて、『はい終わり』って言ったら消えるってこと?」

🧙‍♂️(博士)「その通り!まるで呼ばれたときだけ現れる忍者だな。普段は雲隠れしてるから、何もしてない時間の家賃は払わなくていい。」

🐣(学生)「でも忍者って毎回違う場所から現れるじゃん。IPアドレスとかどうなるの?」

🧙‍♂️(博士)「鋭い!固定の住所は持たない。毎回サーバが変わるから、クラウドが用意するAPIゲートウェイが『忍者の里の門番』みたいな役割をして、外からのリクエストを適切な忍者に振り分けるんだ。」

🐣(学生)「なるほど。でも忍者が毎回違うってことは、前回の記憶は持ってないってこと?」

🧙‍♂️(博士)「そうだ。だから"ステートレス"な設計が必須なんだ。『あ、昨日の続きね』みたいな会話はできない。毎回『初めまして』から始まる金魚の記憶だ。」

🐣(学生)「それって不便じゃない?ログインとかセッション管理はどうするの?」

🧙‍♂️(博士)「外部のデータベースやRedisに状態を保存する。つまり忍者本体は記憶を持たないが、『巻物倉庫』に大事な情報は預けておくんだ。」


📌 注記:ステートレス設計の重要性
サーバレス関数は実行のたびに新しいコンテナで起動するため、ローカルな状態(変数、ファイル、セッション)は保持されません。

  • 状態管理:外部DB、Redis、S3などを利用
  • セッション:JWTトークンや外部ストレージに保存
  • ファイル:一時的な処理以外は外部ストレージ必須

従来サーバとの違い:ペットvs忍者

🐣(学生)「具体的にはどんな感じ?」

🧙‍♂️(博士)「例えば『画像をアップロードしたらサムネイルを作る』みたいな処理を考えてみろ。従来だと24時間稼働のサーバが『まだかな〜、まだかな〜』と待機してる。電気代もかかるし、障害で止まることもある。」

🐣(学生)「それって、ドアの前で『誰か来ないかな〜』ってずっと立ってる門番みたいなもんか。」

🧙‍♂️(博士)「その通り!しかもその門番、風邪ひいて倒れることもある。一方、サーバレスは『画像がアップされました!』というベルが鳴ったときだけ忍者が現れて、サクッとサムネイル作って消える。」

🐣(学生)「それは確かに合理的だな。でも忍者が現れるまでに時間かかったりしない?」

🧙‍♂️(博士)「そこがコールドスタート問題だ。忍者が寝てる状態から起きて準備するのに数秒かかる。特にJavaとか重い言語だと『寝ぼけた忍者がヨガマットと朝食を準備してから仕事開始』みたいになる。」

🐣(学生)「それはイライラしそう。リアルタイムな処理には向かないってこと?」

🧙‍♂️(博士)「ウォームアップという仕組みもあるが、基本的にはバッチ処理や非同期処理が得意分野だな。『今すぐ返事くれ!』みたいなのは苦手だ。」


具体例で理解:写真共有アプリの場合

🐣(学生)「具体的な例で教えてよ。写真共有アプリを作るとしたら?」

🧙‍♂️(博士)「いい例だ。従来型だとこうなる:」

従来型サーバの場合:

24時間稼働のWebサーバ(月額5000円)
↓
「写真アップロードされました」
↓  
サーバ内でサムネイル生成処理
↓
データベースに保存

🧙‍♂️(博士)「この方式だと、誰も写真をアップしない月でも5000円払い続ける。まるで『客が来なくても家賃は変わらない店舗』だな。」

🐣(学生)「もったいないな。」

🧙‍♂️(博士)「サーバレスだとこうなる:」

サーバレス版:

画像がS3にアップロード
↓
S3イベントがLambda関数をトリガー
↓
Lambda関数が起動(0.1秒)
↓
サムネイル生成して別のS3バケットに保存
↓
Lambda関数が消滅
↓
課金:実行時間分のみ(1回あたり0.001円とか)

🐣(学生)「これだと誰も使わなければタダ?」

🧙‍♂️(博士)「その通り!『使った分だけ』が基本だ。ただし『大バズり』すると請求も大バズりする。バイラル動画が投稿されて100万回処理が走ったら…」

🐣(学生)「1000円の請求が来る!」

🧙‍♂️(博士)「計算は正しいが、実際には転送料金、API Gateway料金、データベース料金も加算される。気づいたら数十万円とかザラにある。『バズって有名になったけど破産』という現代の悲劇だ。」


📌 注記:従量課金のメリットとリスク

メリット

  • 初期コストほぼゼロ
  • 利用に応じた自動スケール
  • インフラ管理不要

リスク

  • 予期しない高額請求(特にバイラル時)
  • 料金体系の複雑さ
  • 複数サービス組み合わせによる料金の見えにくさ

対策

  • 課金アラートの設定
  • レート制限の実装
  • 事前の負荷テストと料金見積もり

サーバレスの種類:忍者の専門分野

🐣(学生)「サーバレスっていろんな種類があるって聞いたけど?」

🧙‍♂️(博士)「主に3つの流派がある。FaaS(Function as a Service)、BaaS(Backend as a Service)、そしてサーバレスコンテナだ。」

🐣(学生)「FaaSって?」

🧙‍♂️(博士)「『関数だけ預かります』サービスだ。AWS Lambda、Google Cloud Functions、Azure Functionsなどがある。君が関数を書いて預けると、『呼ばれた時だけ実行してお代は従量制』という寿司屋のような商売をしてくれる。」

🐣(学生)「BaaSは?」

🧙‍♂️(博士)「『データベースも認証もプッシュ通知も全部やっときます』という至れり尽くせりサービスだ。Firebase、Supabase、AWS Amplifyなどがある。まるで『お母さんが全部やってくれる実家暮らし』だな。」

🐣(学生)「実家暮らしは楽だけど、親の言うこと聞かなきゃいけないってやつね。」

🧙‍♂️(博士)「まさに!ベンダーロックインというリスクがある。気づいたら『このサービスなしでは生きていけない体』になってしまう。」


サーバレスが得意なこと・苦手なこと

🐣(学生)「じゃ肉体労働で頑張っておけばいいんじゃない?なんでわざわざサーバレスなんて使うの?」

🧙‍♂️(博士)「理由はスピードだ。思いついたアイデアを即公開できるし、利用が少ない間はほぼゼロコストで済む。『今夜思いついたWebサービスを明日の朝には公開』みたいなことができる。」

🐣(学生)「でもどんな処理でも向いてるわけじゃないでしょ?」

🧙‍♂️(博士)「そうだな。得意不得意がハッキリしている。」

得意なこと:

  • 画像処理(アップロード→サムネイル生成)
  • データ変換(CSV→JSON変換)
  • 通知送信(メール、プッシュ通知)
  • 定期バッチ処理(日次レポート生成)
  • APIの軽い処理(ユーザー検索、データ取得)

苦手なこと:

  • リアルタイム処理(チャット、ゲーム)
  • 長時間処理(動画エンコーディング、機械学習)
  • 複雑な状態管理が必要なアプリ
  • レガシーシステムとの密結合

🐣(学生)「つまり『瞬発力はあるけど持久力がない』ってこと?」

🧙‍♂️(博士)「まさに!100m走は得意だが、フルマラソンは苦手な選手だな。」


課金の罠:忍者の時給制

🐣(学生)「体力バカには必要ないし、下手したら請求で死ぬけど、頭良かったら得できるよって事?」

🧙‍♂️(博士)「その通り!サーバレスは"頭を使えば得、油断すれば爆死"という性質を持つ。課金の仕組みを理解しないと地獄を見るぞ。」

🐣(学生)「どんな地獄?」

🧙‍♂️(博士)「例えば、無限ループするコードを書いたとしよう。従来サーバなら『サーバが重くなった』で済むが、サーバレスだと『新しい忍者が無限に召喚され続ける』ことになる。」

🐣(学生)「忍者の大軍が働き続けて、時給を延々と請求してくるってこと?ホラーじゃん。」

🧙‍♂️(博士)「しかも気づくのは月末の請求書。『あれ?なんで100万円?』となる。実際にAWSで数百万円請求された事例は山ほどある。」

🐣(学生)「怖すぎる。でも対策はあるの?」

🧙‍♂️(博士)「もちろん。課金アラート、実行時間制限、同時実行数制限などを設定する。『忍者の雇用契約書』をちゃんと書くってことだな。」


実際の失敗例:バズったときの恐怖

🐣(学生)「実際に高額請求された話って聞いたことある?」

🧙‍♂️(博士)「山ほどある。有名なのは『写真加工アプリがバズって月額300万円請求』事件だ。」

🐣(学生)「うわあ…詳しく聞かせて。」

🧙‍♂️(博士)「あるスタートアップが『AIで写真を美化するアプリ』を作った。サーバレスで『1枚処理するのに0.1円』くらいの想定だったんだ。」

🐣(学生)「それがどうして?」

🧙‍♂️(博士)「SNSでバズって、1日に100万枚の写真がアップロードされた。しかも1枚の処理に予想以上に時間がかかって、実際は『1枚あたり3円』になってた。」

🐣(学生)「100万枚×3円=300万円…」

🧙‍♂️(博士)「しかもそれが30日続いた。『バズって有名になったけど会社が潰れる』という現代の悲劇だな。」

🐣(学生)「対策してなかったの?」

🧙‍♂️(博士)「課金制限を設定してなかった。『まさかそんなにバズるとは』という甘い見積もりだった。今では『成功の上限』を設定するのが常識になってる。」

🐣(学生)「成功の上限って皮肉だな。」

🧙‍♂️(博士)「『嬉しい悲鳴』が文字通り『悲鳴』になる時代だ。」


開発体験の変化:魔法の快楽と制約の苦痛

🐣(学生)「開発するときはどんな感じなの?普通のプログラムと違う?」

🧙‍♂️(博士)「最初は楽しいぞ。『関数を書いてポチッとデプロイ』で即座に世界公開だ。まるで魔法使いになった気分になる。」

🐣(学生)「おお、それは確かに楽しそう。」

🧙‍♂️(博士)「だが慣れてくると色々見えてくる。ローカルでテストしにくいし、デバッグも面倒だ。『なんで動かないの?』となっても、忍者は既に消えてるからログを追いかけるしかない。」

🐣(学生)「犯行現場に証拠だけ残されてる感じ?」

🧙‍♂️(博士)「的確だ。しかもそのログが複数のサービスに散らばってる。CloudWatch、X-Ray、CloudTrailと探偵ごっこが始まる。」

🐣(学生)「めんどくさいな。普通にサーバ立てた方が楽じゃない?」

🧙‍♂️(博士)「それが『サーバレスの罠』だ。最初は魔法みたいに簡単で、途中から呪いみたいに複雑になる。でも一度慣れると、従来の『サーバのお世話』には戻りたくなくなる。」

🐣(学生)「中毒性があるってこと?」

🧙‍♂️(博士)「そうだ。『サーバの心配をしなくていい』という快感は麻薬的だ。でも代わりに『課金の心配』と『設計の制約』というストレスが生まれる。」


サーバレスvs従来型:コスト比較の現実

🐣(学生)「結局、お金的にはどっちが得なの?」

🧙‍♂️(博士)「これが複雑でな。『使用量』と『予測可能性』によって全然違う。グラフで考えてみよう:

従来型サーバ

  • 固定費:月5万円
  • 変動費:ほぼゼロ
  • 『定食屋』モデル

サーバレス

  • 固定費:ほぼゼロ
  • 変動費:使用量次第
  • 『回転寿司』モデル」

🐣(学生)「どっちが安いかは『どれくらい食べるか』次第ってことか。」

🧙‍♂️(博士)「その通り!少食なら回転寿司、大食いなら定食屋が得だ。具体的には:

月間リクエスト100万回以下:サーバレスが圧倒的に安い 月間リクエスト1000万回以上:従来型サーバが安い
その間:どっちもどっち、運用コストも考慮が必要」

🐣(学生)「でも予測が外れたら?」

🧙‍♂️(博士)「そこがギャンブル要素だ。『来月どれくらい使われるか』の予測を間違えると、『定食屋で大食いするつもりが食欲不振』『回転寿司で軽く済ますつもりが大食い大会』みたいなことになる。」


サーバレスは成功するのか?

🐣(学生)「結局、サーバレスって成功するの?失敗するの?」

🧙‍♂️(博士)「『完全勝利』も『完全敗北』もないだろう。従来型、コンテナ、サーバレスが共存しながら、それぞれの得意分野で使われ続ける。『忍者も騎士も魔法使いも必要』な世界だ。」

🐣(学生)「なるほど。一つの技術が全てを解決することはないってことか。」

🧙‍♂️(博士)「そうだ。『銀の弾丸』は存在しない。ただし『適切な場面で使えば非常に強力な道具』であることは間違いない。」

🐣(学生)「じゃあどんな人におすすめ?」

🧙‍♂️(博士)「こんな人だな:

サーバレス向きの人

  • 『とりあえず動くものを早く作りたい』タイプ
  • 課金体系を理解できる算数力がある
  • 『完全な制御より楽な管理』を選ぶタイプ
  • 新しい技術にワクワクできる人

サーバレス向きじゃない人

  • 『全部自分で管理したい』職人タイプ
  • 予算管理が苦手な人
  • 『安定稼働』を何より重視する人
  • レガシーシステムから離れられない人」

🐣(学生)「つまり『新しいもの好きの節約家』みたいな?」

🧙‍♂️(博士)「うまい表現だ。『イノベーションとケチ』の両方が必要な技術だ。」


結び:サーバレスという生き方

🐣(学生)「博士は結局、サーバレスをおすすめするの?」

🧙‍♂️(博士)「『おすすめ』はしない。『理解して使え』とは言う。サーバレスは"便利さの誘惑"と"リスクの現実"を天秤にかけながら使いこなすべき現代の呪文なのだ。」

🐣(学生)「呪文か…。でも呪文って、使い方を間違えると自分に跳ね返ってくるやつだよね。」

🧙‍♂️(博士)「そうだ。だからこそ『正しい唱え方』を学ぶ必要がある。サーバレスは『頭を使えば得、油断すれば爆死』という性質を持つ。体力バカには向かないが、賢く使えば強力な武器になる。」

🐣(学生)「なるほど。つまり:

  • サーバ運用:筋肉で耐える地獄修行
  • サーバレス:頭脳で制御する請求サバイバル ってことですね。」

🧙‍♂️(博士)「完璧なまとめだ。どちらを選ぶかは状況次第。ただし『何も選ばない』という選択肢はもうない。現代のエンジニアは『騎士か忍者か魔法使いか』を選ばなければならない時代なんだ。」

🐣(学生)「わかりました。まずは基礎から、忍者はそれからですね。」

🧙‍♂️(博士)「その心がけがあれば、君も立派な『忍者使い』になれるだろう。ただし請求書には気をつけろよ。」

🐣(学生)「はい!課金アラートは必ず設定します!」


📌 最終注記:サーバレス採用の判断フレームワーク

サーバレスを採用するかどうかは、以下の要素を総合的に判断する:

技術的要因

  • 処理の性質(バッチ的 vs リアルタイム)
  • 実行頻度(低頻度 vs 高頻度)
  • 状態管理の必要性
  • レガシーシステムとの連携

ビジネス要因

  • 初期投資の予算
  • 運用チームのスキル
  • 成長予測の確実性
  • ベンダーロックインの許容度

結論:サーバレスは『万能の解決策』ではなく、『特定の状況で威力を発揮する専門技術』である。適切な理解と準備があれば強力な武器となるが、安易な導入は高額請求という代償を伴う。

現代のエンジニアにとって、サーバレスは『知っておくべき選択肢の一つ』であり、『適材適所で使い分ける技術』なのだ。