Upgrade to Pro — share decks privately, control downloads, hide ads and more …

サーバーレス構成で遊びを作ったら、学びが返ってきた話

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Manato Sano Manato Sano
July 25, 2026
6

 サーバーレス構成で遊びを作ったら、学びが返ってきた話

AWS Summitに作った「Cloudestiny」を構成図とハマったポイント/工夫したポイントを書いてます!

Avatar for Manato Sano

Manato Sano

July 25, 2026

More Decks by Manato Sano

Transcript

  1. 00 自己紹介 マナティ / Manato Sano ▸ 2026 Japan AWS

    Jr.Champions ▸ Bedrock AgentCore触るのが好き ▸ AWS SummitのKiroキーホルダーほしかった。。。 ▸ ギター弾けません、 放課後にティータイムするところの聖地です。
  2. なぜアプリケーションを作ったか 01 AWS Summit 2026でお会いする方との接点を作りたいなぁ。。。 課題 名刺交換は覚えてもらいづらい。。。 アンケートはハードルが高い。 解決策 QRコード読み取り

    → AWSサービスを選択 → AIが自分専用のRPGカード生成 → みんなでクイズに答えてボスを倒す 「好きなAWSサービスがRPGカードになる」なら興味もってもらえる?? 2日間だけのイベント → 常時稼働インフラは過剰?? サーバーレスなら使った分だけ → サーバーレス構成で作ろう!!
  3. 03 つまずき① — 画像生成LambdaだけDockerが必要だった カード画像を描画するライブラリが、Linuxのシステムライブラリに依存していた。 通常のLambda(zip形式)にはそれが入っていない。 FROM public.ecr.aws/lambda/nodejs:22 通常のLambda(zip形式) RUN

    dnf install -y ¥ ・コードをzipでアップロード pango-devel libjpeg-turbo-devel giflib-devel librsvg2-devel ・システムライブラリは追加できない ・コールドスタート 約200ms(速い) COPY fonts/ ${LAMBDA_TASK_ROOT}/fonts/ COPY package.json package-lock.json ${LAMBDA_TASK_ROOT}/ RUN npm ci --omit=dev RUN npx esbuild functions/generateCard/index.ts ¥ Docker Lambda(今回の解決策) ・Dockerfileで環境ごとに --bundle --platform=node --target=node22 ¥ --outfile=dist/generateCard/index.js ¥ パッケージング --external:@napi-rs/canvas ・必要なライブラリを自由に インストールできる カード生成だけDockerにする使い分け。他の関数は速さ優先でzip形式。 ・コールドスタート 3~10秒(遅い)
  4. つまずき② — DynamoDB Transactionsの「同時に2つ失敗する」 04 クイズ回答で3テーブルをアトミック更新に変更。ConditionExpressionが2つ同時に失敗するケースを見落としていた。 解決策 // 1回のTransactWriteで3テーブルを更新 TransactItems:

    [ { Put: RaidAnswers { Update: RaidBoss // 条件: attribute_not_exists(二重回答防止) }, // 条件: currentHp >= 1(HP残あり) { Update: RaidPlayerStats // 成績を +1 }, }, CancellationReasons 配列のインデックスで 各条件の成否を個別判定 ] 1人テストでは気づけない。。。 // 想定: どちらか一方が失敗 // 想定外: 他プレイヤーが同時にボスを倒し、自分の回答も重複 // → 条件1と条件2が同時に失敗 エラーの原因を1つずつ個別判定する処理を追加して解決した。 複数人同時プレイで 初めて起きるバグ。
  5. 05 つまずき③ — AIが作った問題の 3/70問 が間違っていた クイズ70問をClaude Sonnetで生成。AWS MCPの read_documentation

    で全問を公式ドキュメントと突合検証。 例: S3に保存できるファイルの最大サイズは? AIの回答: 5TB → 正解: 50TB(2025年12月に変更) 他にもAWSサービスの仕様に関する数値を2問間違えていた。 AWSの仕様は頻繁に更新される → ナレッジカットオフを意識する必要がある。 実装当時は公式情報を参照して作成し、頻繁に変わるので公式のリンクも掲載して担保した。 対策: 全問に docUrl と verifiedAt を付与。正解後の画面にも公式ドキュメントへのリンクを表示。
  6. 06 AI-DLCで実装してみた AI-DLC(AI-Driven Development Life Cycle)= AIが開発を主導し、 人間が判断するフレームワーク Inception Construction

    Operations 何を作るか どう作るか 動かす・直す 人間が企画・仕様を決定 Claude Codeが設計・実装 本番で見つかるバグを 優先順位を判断 CDK・Lambda・React全実装 人間が判断しAIが即修正 「ダメージは全員平等に1」 DynamoDBテーブル設計 参加者数0人バグ → 発見即日修正 などの設計判断 MCPで70問ドキュメント突合 セキュリティレビュー ソースコード約6,500行(TypeScript / TSX / JSON)
  7. 07 実際どれくらい遊んでもらえた?? 46 35 849 623 カード生成 バトル参加者 クイズ回答 ボス総ダメージ

    プレイヤー 正解 回答 正答率 1 プレイヤーA 71 104 68% 2 プレイヤーB 64 89 72% 3 プレイヤーC 63 97 65% 4 プレイヤーD 60 74 81% 5 プレイヤーE 51 72 71% 1位の方は104問回答。想定した以上に遊んでいただけた。ありがとうございました!
  8. 08 運用コストはいくらだった?? サービス コスト Lambda(8関数) $0 DynamoDB(4テーブル) $0 API Gateway

    $0 CloudFront + S3 $0 Bedrock(カード生成46回) 46人 × 849問の運用コスト ~$0.20 ≈ $0 EC2を1台立てっぱなしにするだけで月$10以上かかりますが、今回のサーバーレスはその心配がない! 2日間限りのイベントにちょうどいいサービスを運営できた。
  9. 作ってから気づいたこと 09 01 02 03 04 同時実行は設計時に見えない DynamoDB Transactionsの複合エラーは、1人でテストしていたら絶対に気づかなかった AIの出力は「もっともらしく間違う」

    70問中3問の誤り。S3の5TB→50TBはAWSが更新したばかりの仕様。人間の検証が必要 サーバーレスの強さはゼロスケール 使われていない時間のコストがゼロになる。イベント用途にぴったり 「作ってから直す」速度が大事 完璧に設計してから作るより、早く作って早く直すほうが結果的に良いものができた