Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
脱 雰囲気実装!AgentCoreを良い感じにWEBアプリケーションに組み込むために
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Takuya Yonezawa
March 18, 2026
Programming
540
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
脱 雰囲気実装! AgentCoreを良い感じに WEBアプリケーションに組み込むために
Takuya Yonezawa
March 18, 2026
More Decks by Takuya Yonezawa
See All by Takuya Yonezawa
20260516_SecJAWS_Days
takuyay0ne
4
680
20260422_Midosuji_Tech
takuyay0ne
2
63
20260228_JAWS_Beginner_Kansai
takuyay0ne
5
690
20260204_Midosuji_Tech
takuyay0ne
1
230
20260129_CB_Kansai
takuyay0ne
1
360
20260126_JAWS_Osaka
takuyay0ne
1
60
こんな時代だからこそ! 想定しておきたいアクセスキー漏洩後のムーブ
takuyay0ne
4
780
セキュリティは全員参加!_JAWSのイベントサイトで脅威モデリングを学んでみよう!
takuyay0ne
0
200
20250920_ServerlessDays
takuyay0ne
9
4.3k
Other Decks in Programming
See All in Programming
Swiftのレキシカルスコープ管理
kntkymt
0
210
CLIであることを活かしたGitHub Copilot CLI活用術 / GitHub Copilot CLI Pro Tips & Tricks
nao_mk2
1
1.2k
LLM Plugin for Node-REDの利用方法と開発について
404background
0
160
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
190
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
650
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
580
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
13
3.5k
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
1.7k
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.2k
RTSPクライアントを自作してみた話
simotin13
0
510
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
460
柔軟なPDFレイアウトエディタを支える型システム設計 — Discriminated UnionとConditional Typeの実践
minako__ph
4
1.4k
Featured
See All Featured
Building AI with AI
inesmontani
PRO
1
1.1k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
440
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.3k
Making Projects Easy
brettharned
120
6.7k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
1
160
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
Being A Developer After 40
akosma
91
590k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
200
New Earth Scene 8
popppiees
3
2.3k
So, you think you're a good person
axbom
PRO
2
2.1k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Transcript
1 © 2026 Japan Digital Design, Inc. Takuya Yonezawa 2026.03.19
脱 雰囲気実装! AgentCoreを良い感じに WEBアプリケーションに組み込むために AgentCore Lunch オンライン 〜本格アプリ開発ノウハウ編!〜
2 © 2026 Japan Digital Design, Inc. 米澤 拓也 Software
Engineer Technology & Development Div. and Corporate Culture室 プロフィール 前職ではCCoE、現職ではSoftware Engineer。 フロント/バックエンドの実装からインフラ構築など何でもやってます 証券系→銀行系 と 金融×IT なキャリアを歩んでいます 生息地:大阪 & 奈良 Community Builder (Serverless) 2023~ AgentCore/Strandsは先月入門して趣味でやってます takuya_y0ne
3 © 2026 Japan Digital Design, Inc. 0 お断り
4 © 2026 Japan Digital Design, Inc. アーキテクチャに絶対解は無いし、 あらゆる選択はトレードオフの上に成り立つ アーキテクチャ図も解説しますが
あくまで1つの実装例として見てもらえれば幸いです
5 © 2026 Japan Digital Design, Inc. 本日のターゲット - AgentCoreを本格的にアプリケーションへ
組み込んでいく予定の方 - 「とりあえずヌルヌルした画面作って!」 と言われてしまった方 AgentCore自体の話は少なめです。 その辺は神野さんが語ってくれます。
6 © 2026 Japan Digital Design, Inc. 1 とりあえずこれを見てくれ
8 © 2026 Japan Digital Design, Inc. 公開用スクショ
9 © 2026 Japan Digital Design, Inc. 今見せたのは米澤がAgentCore×Strandsで “人力”作成した検証用アプリ ぬるぬる動いてましたよね?
10 © 2026 Japan Digital Design, Inc. 2 ぬるぬるの正体
11 © 2026 Japan Digital Design, Inc. Server Sent Eventは
技術としては昔からあるもの Server Sent Event (SSE) 2004年に初めて仕様化 ※1 ※2 サーバからクライアントに逐次的に データを送信するための仕組み HTTPベースで実現される サーバ→クライアントの単方向通信 ▪ なんで今さら? LLMの回答生成には時間がかかる。 回答生成が完了してから一発で レスポンスを返すような従来方式だと、 UX的に微妙なので再注目されている。 ※1 https://html.spec.whatwg.org/multipage/server-sent-events.html Client Server https://developer.mozilla.org/ja/docs/ Web/API/Server-sent_events/Using_server-sent_events ※2 HTTPで接続 データ データ データ HTTP接続終了 ・・・
12 © 2026 Japan Digital Design, Inc. WebSocketは? クライアント側のポーリングは? 玄人の方向け
WebSocketやクライアント側の ポーリングだと、 - 双方向のハンドシェイク - クライアント側の処理負荷増大 などをケアして上げる必要があり、 アプリケーションが複雑になる WebSocketに対応していない プラットフォームもある その点 Server Sent Eventは単方向の HTTPベースなのでトータルすっきりする (ロジックミスで無限Client Pollingとか しちゃったら泣ける) Client Server データ取得 データ取得 データ取得 ・・・ Client Server WebSocketコネクション確立 データ送受信 WebSocket Client Polling
13 © 2026 Japan Digital Design, Inc. Server Sent Eventの中身
https://developer.mozilla.org/ja/docs/Web/API/Server-sent_events/Using_server-sent_events
14 © 2026 Japan Digital Design, Inc. Server Sent Eventの中身
https://developer.mozilla.org/ja/docs/Web/API/Server-sent_events/Using_server-sent_events AgentCoreで特に意識しないといけないのは この”data”という項目
15 © 2026 Japan Digital Design, Inc. 実際に Strands on
AgentCore が 返してくるストリーミングデータの中身を眺めてみる
16 © 2026 Japan Digital Design, Inc. AWSドキュメント内のサンプルコード から一部修正したもの
17 © 2026 Japan Digital Design, Inc. 辛い。。
18 © 2026 Japan Digital Design, Inc. すこし整理してみる
19 © 2026 Japan Digital Design, Inc. この細切れのデータを組み立てると 「こんにちは!今日はお手伝いできることはありますか」 になる(=Strandsの応答)
キー名が”event”のデータのみ抽出 Agent実行で消費されたトークン数 キー名が”event”のデータのみ抽出
20 © 2026 Japan Digital Design, Inc. キー名が”event”のテキストを組み合わせれば アプリケーション上でいい感じに表示できそう
21 © 2026 Japan Digital Design, Inc. 3 が、この細切れのデータを組み立てるのが大変。。
22 © 2026 Japan Digital Design, Inc. そもそも event: messageStartとか
event: contentBlockDeltaとか って何?
23 © 2026 Japan Digital Design, Inc. https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/ conversation-inference-call.html#conversation-inference-call-response 実態はBedrockのConverseStream
24 © 2026 Japan Digital Design, Inc. messageStart contentBlockStart contentBlockDelta
contentBlockStop messageStop metadata ▪ メッセージ開始イベント アプリケーション上は無視してOK ▪ ツール利用時に出力される どのツールを利用するか?等が出力される ▪ 回答生成時/ツール利用時に出力される モデルの回答やツールへのインプットなどが出力される ▪ 回答生成時/ツール利用時に出力される モデルの回答停止やツール利用時の停止イベント ▪ メッセージの停止イベント 各ブロック毎にモデルの回答生成が完了したら出力される ▪ モデル回答が完了する際に出力される トークン利用量やレイテンシーが出力される
25 © 2026 Japan Digital Design, Inc. 参考:Tool利用も含めた際のペイロード
26 © 2026 Japan Digital Design, Inc. フロント側で、前述のように流れてくるデータを イベントタイプに合わせてハンドリングする必要がある
27 © 2026 Japan Digital Design, Inc. targetText という変数の中に「を使用」が格納される
28 © 2026 Japan Digital Design, Inc. サンプルのReact側コード。辛い。。
29 © 2026 Japan Digital Design, Inc. 検証している時の私の叫び
30 © 2026 Japan Digital Design, Inc. 4 ここまでのまとめ
31 © 2026 Japan Digital Design, Inc. AgentCoreのストリーミングレスポンスの特性上、 どんなイベントデータがフロント側に届くかが分からない バックエンド側で担わないといけないデータ整形処理を
フロント側に押し付ける形になる (本来フロント側にロジックを多く持たせるべきではない)
32 © 2026 Japan Digital Design, Inc. ぬるぬるした画面表示、本当に必要ですか? ローディング画面→一括表示 で代替できるなら
そちらのほうが遥かにシンプルにできる
33 © 2026 Japan Digital Design, Inc. 5 今回組んだシステム構成
34 © 2026 Japan Digital Design, Inc.
35 © 2026 Japan Digital Design, Inc. 設計の大方針: - インフラの面倒を見たくないのでサーバレス
- API-GWの周辺機能に乗っかりたい (APIキーによる流量制御/CognitoによるAPI認証) - CDK(Pipelines)で良い感じにデプロイ回したい - AgentCoreとかAPI-GWがサ終しても移植可能
36 © 2026 Japan Digital Design, Inc. Strandsの中の構成。ただの私の趣味です Master Agent
WEB検索Agent (MCP) What’s New 検索Agent AWS環境 調査Agent 不動産情報 取得Agent フロント実装Tips 取得Agent Knowledge Bases Knowledge Bases StrandsTools RSS tavily
37 © 2026 Japan Digital Design, Inc. この辺の話をします
38 © 2026 Japan Digital Design, Inc. 6 Lambdalithというアプローチ
39 © 2026 Japan Digital Design, Inc. Lambdalith - Lambda+Monolith
- Lambdalith ? REST APIのルーティング処理を 単一のLambda関数に集約するという 設計アプローチ 非Lambdalithでは、APIのパス毎に Lambda関数を定義し、ミニマムな処理 構成を目指すのが一般的 (HTTPパス×メソッド毎に切るというケースもある) Lambdalisth / 非Lambdalith もちろんどちらもトレードオフである。 非 Lambdalith Lambdalith API-GW API-GW Lambda Lambda /history /search /user /history /user /search Logs Logs
40 © 2026 Japan Digital Design, Inc. Lambdalith - Lambda+Monolith
- Lambdalith ? REST APIのルーティング処理を 単一のLambda関数に集約するという 設計アプローチ 非Lambdalithでは、APIのパス毎に Lambda関数を定義し、ミニマムな処理 構成を目指すのが一般的 (HTTPパス×メソッド毎に切るというケースもある) Lambdalisth / 非Lambdalith もちろんどちらもトレードオフである。 API-GW API-GW Lambda Lambda /history /search /user /history /user /search Logs Logs Lambdalith 非 Lambdalith - 各Lambdaごとに関心の分離 ex.) アクセス先リソース/IAM権限 etc… - Lambdaロジックのスリム化 - Lambda関数のバンドルサイズ圧縮 - バグった時の影響範囲が小 良い点 - 付随リソースの集約 ex.) IAMロール/CloudWatch Logs - コールドスタート発動確率の低減 - 移植/開発容易性(シングルソース) - ローカルでの開発体験◦ 良い点
41 © 2026 Japan Digital Design, Inc. ちゃちゃっと開発してTry&Errorしたかったので 私はLambdalithパターンを採用
42 © 2026 Japan Digital Design, Inc. 7 モノリスなLambda、どう作る?
43 © 2026 Japan Digital Design, Inc. Lambda Web Adapter
(LWA) パターン #1 LambdaでWEBフレームワークを 動かすためのOSS。 通常のDockerファイルに1行追加する だけでLambda互換仕様にできる。 実は JAWS DAYS 2025、 JAWS PANKRATION 2024のサイトも LWAで動かしている。 (App Runnerから引っ越した) たまに動き遅いけど許してね いつものDockerfileに魔法のコマンドを1行追加 上記はJAWS PANKRATIONのLWA版Dockerfile (モノレポ構成でのNext.js) もちろんNest.jsやExpress, FastAPIも行ける
44 © 2026 Japan Digital Design, Inc. https://speakerdeck.com/tmokmss/aws-lambda-web-adapterwohuo-yong-suruxin-siisabaresunoshi-zhuang-patan https://speakerdeck.com/tmokmss/aws-lambda-web-adapterwohuo-yong-suruxin-siisabaresunoshi-zhuang-patan パターン
#1 LWAの詳細を知りたい方はこちら
45 © 2026 Japan Digital Design, Inc. CDK × パターン
#2 CDKプロジェクト配下で組むと最高 CDKのNodejsFunctionを利用すると 丸ごとjsにバンドルしてLambdaへ展開可能 (コンテナイメージを作らなくて良い!) CDKの世界線でロジックを書きつつ、 ローカルでのDevEx向上(後述) https://hono-ja.pages.dev/docs/getting-started/aws-lambda Hono(Lambda)の ロジックコード CDKでの Lambdaリソース定義
46 © 2026 Japan Digital Design, Inc. ローカルでLambda用のHonoを ガシガシ開発/検証したい! パターン
#2 もちろんできます @hono/node-server というパッケージを 利用すればローカルでhonoを動かせる (ホットリロードもできる) ストリーミング処理を簡単に書けるのも嬉 Honoのアプリ定義 Lambda用ハンドラ定義 ローカル起動用サーバ定義 [参考] https://www.youtube.com/watch?v=9tR3dYFFyTQ
47 © 2026 Japan Digital Design, Inc. ローカル開発の体験 デプロイの楽さ LWAよりシンプルに動かせる
※1 の観点でHono on Lambdaを採用した (※1) - LWA上のFWが/tmp以外に書き込もうとして異常終了する - SigV4署名のケアが不要 など
48 © 2026 Japan Digital Design, Inc. Local w/ HotReload
(Vite Server) Local w/ HotReload (Hono Server) AWS環境 DynamoDB AgentCore/ KnowledgeBase ローカル開発どんな感じでやってるか? フロント部分/Hono部分はローカルサーバで ホットリロードを効かせつつ実装を進める HonoはOpenAPIに対応しているのでスキーマ駆動
49 © 2026 Japan Digital Design, Inc. Local w/ HotReload
(Vite Server) AWS環境 API-GW+Lambda(Hono) AWS環境 DynamoDB AgentCore/ KnowledgeBase ローカル開発どんな感じでやってるか? Hono部分をAWS環境(API-GW+Lambda)に 持っていってもローカル環境時と同じように動くので 環境差分による事故が少なくて済む API-GW Lambda (Hono)
50 © 2026 Japan Digital Design, Inc. 8 ここでも ストリーミング対応で辛くなる
51 © 2026 Japan Digital Design, Inc. この辺の話をします
52 © 2026 Japan Digital Design, Inc. - Streamingでぬるぬる表示 -
Bufferedで一括表示 「異なるレスポンスパターンを同居させたい」 誰もがそう思うはず
53 © 2026 Japan Digital Design, Inc. ぬるぬる表示させたい部分 (Streaming) 一括表示させたい部分
(Buffered)
54 © 2026 Japan Digital Design, Inc. API-GWでStreaming、 使えるようになりましたよね Lambdalith構成が裏目に
Lambda-lithなHono製Lambdaを動かすた め、API-GWでは /{proxy+} というパスを 利用する必要がある Lambdaプロキシ統合では、 - STREAM(ストリーミング) - BEFFERED(一括レスポンス) が選べるが、パスごとに1:1対応となる Lambdalithなパターンだと 1API-GWで STREAM/BUFFEREDの同居ができない API-GW Lambda (Hono) /{proxy+} Client /history /invoke ▪ Buffered ▪ Streaming /history /invoke /invokeは レスポンス形式の 不一致でエラーになる (Buffered vs Streaming) Buffered/Stramingの択一
55 © 2026 Japan Digital Design, Inc. Cloudfrontでパス毎に振り分け Lambdalith構成が裏目に API-GWはStreaming用、Buffered用の
2本を生やす Cloudfrontのパスパターンを利用して - API-GW(Streaming) - API-GW(Buffered) - S3(アプリケーション) へのルーティングを振り分ける Hono(Lambda)のハンドラ部分にも 工夫を入れる必要がある。 API-GW (Streaming) Client ▪ Buffered ▪ Streaming Cloudfront API-GW (Buffered) S3 (Web App) Lambda (Hono) Lambda (Hono) /api/history /api/invoke /* AgentCore DynamoDB (呼び出し履歴)
56 © 2026 Japan Digital Design, Inc. 漂う悪魔構成感。。 Lambdalith構成が裏目に HonoではLambda用のハンドラとして、
- streamHandle(Streaming用) - handle(Buffered用) の2種類が用意されている Lambdaへのデプロイ時にこの2つのハンド ラを呼び分けることで、シングルソースの Honoアプリで、Streaming/Bufferedに 両対応できるようにしている Hono内 Lambda用ハンドラ定義 (Stream/Bufferd両対応版) CDK Lambda定義抜粋(Streaming) ▪ Buffered ▪ Streaming CDK Lambda定義抜粋(Buffered)
57 © 2026 Japan Digital Design, Inc. ぬるぬるした画面表示、本当に必要ですか? ローディング画面→一括表示 で代替できるなら
そちらのほうが遥かにシンプルにできる
Thank you. 58 © 2026 Japan Digital Design, Inc.