こんにちは!ADWAYS DEEE でアプリケーションエンジニアをしている25卒の日置です!
8月に初めてのエンジニアブログを書いてから早くも数ヶ月が経ち、気づけば年末。時の流れの速さに驚きつつ、今回は2本目のブログを執筆することになりました。
前回は「AI を毛嫌いしていた新卒エンジニアが、Claude Code を相棒にするまでの話」というテーマで、AI に対する価値観の変化についてお話ししました。あれから業務で AI を活用する機会がさらに増え、今では AI エージェントの開発にも携わるようになりました。
今回は、Amazon Bedrock・AgentCore Runtime・Strands Agents などを活用した AI エージェント開発について、私の経験を交えながらご紹介していきます。
【背景】 LP 改善の自動化という挑戦
現在、私が取り組んでいるのは LP(ランディングページ)改善の自動化です。Amazon Bedrock と AgentCore Runtime、そして Strands Agents を組み合わせて、AI エージェントによる効率化を進めています。 具体的にどのようなフローで何を行っているかについては、申し訳ないのですが企業秘密ということでお伝えできません…!ただ、この開発を通じて得た知見や、AI エージェント開発の入門的な部分については共有できればと思います。
【基礎知識】 登場人物たちの紹介
まずは今回使用している技術スタックについて、それぞれ詳しく説明させてください。
Amazon Bedrock とは
Amazon Bedrock *1 は、Amazon が提供するフルマネージド型の生成 AI サービスです。Anthropic(Claude)、Meta(Llama)、Amazon(Titan、Nova)、Mistral AI など、複数の AI 企業が提供する高性能な基盤モデルを、統合された API を通じて利用できます。
Bedrock の何が嬉しいかというと、自前でモデルをホスティングする必要がないという点です。従来、生成 AI をアプリケーションに組み込もうとすると、GPU インスタンスの調達やモデルのデプロイ、スケーリングの設定など、インフラ周りの作業が大きな負担になっていました。しかし Bedrock を使えば、API を叩くだけで Claude や Llama といった最先端のモデルを利用できます。
主な特徴をまとめると以下のようになります。
- 複数の基盤モデルを同一の API で利用可能。用途に応じてモデルを切り替えられる
- RAG(検索拡張生成)、AI エージェント、ガードレールといった生成 AI に必要な機能が統合されている
- 入力データがモデルの学習に使用されないため、セキュリティ・プライバシーの面で安心
- 従量課金制で、使った分だけ支払う料金体系
※参考: https://repost.aws/ja/knowledge-center/amazon-bedrock-model-data-use
2024年12月には Amazon 独自の基盤モデル「Nova シリーズ」も発表され、選択肢がさらに広がりました。私のような新卒エンジニアでも、インフラの複雑な設定に悩まされることなく AI 機能の実装に集中できるのはとてもありがたいですね。
AgentCore Runtime とは
AgentCore Runtime *2 は、2025年7月16日に発表された Amazon Bedrock AgentCore の中核をなすサービスで、AI エージェントを本番環境で安全にデプロイ・実行・スケールするためのサーバーレスランタイム環境です。
「AI エージェントを作ったけど、本番環境でどう動かせばいいんだろう…」という悩みを解決してくれるのがこのサービスです。プロトタイプから本番環境への移行は、想像以上に大変な作業です。セッション管理、スケーリング、セキュリティ、認証…考えることが山ほどあります。AgentCore Runtime はこれらの「面倒だけど重要な部分」を引き受けてくれます。
AgentCore Runtime の主な特徴は以下の通りです。
- フレームワーク非依存で、Strands Agents、LangGraph、CrewAI など、好きなフレームワークで作ったエージェントをそのままデプロイできる
- モデル非依存であり、Bedrock のモデルはもちろん、OpenAI や Gemini など他のプロバイダーのモデルも利用可能
- セッション分離となっており、各ユーザーセッションは専用の microVM で実行され、データ漏洩を防止。機密データを扱うアプリケーションには必須の機能
- 最大8時間の長時間実行に対応しており、複雑な推論や非同期ワークロードも問題なし
- 100MB までのペイロードをサポートしており、テキスト、画像、音声、動画などマルチモーダルなコンテンツも処理可能
- 消費ベースの課金。実際に使用したリソースに対してのみ課金される
※参考: https://zenn.dev/aws_japan/articles/679e723bb34cb6
AgentCore は Runtime 以外にも、Memory(セッション・長期記憶の管理)、Identity(認証・認可)、Gateway(API をエージェント用ツールに変換)、Observability(監視・デバッグ)といったサービスが用意されており、これらを組み合わせることでエンタープライズグレードのエージェントシステムを構築できます。
ちなみに AgentCore に関しては、10月に新卒で同期の中西くんが Amazon Bedrock AgentCoreで何ができる?新卒エンジニアのワークショップ体験記 というエンジニアブログを投稿されているので、ここについて詳細が気になる方はぜひ読んでみてください!
Strands Agents とは
Strands Agents *3 は、AWS がオープンソースで公開している AI エージェント構築用の Python SDK です。「モデル駆動型アプローチ」という思想に基づいて設計されており、最小限のコードで強力なエージェントを構築できます。
従来のエージェントフレームワークでは、開発者がワークフローを詳細に定義し、各ステップでモデルに何をさせるかを細かく指示する必要がありました。しかし Strands は違います。最新の LLM は十分に賢いので、計画・推論・ツール選択を自律的に行えるという前提に立っています。開発者は「プロンプト」と「ツール」を定義するだけで、あとはモデルが自分で考えて動いてくれるのです。
Strands Agents の特徴をまとめます。
- 軽量でシンプルな作りであり、複雑なワークフロー定義は不要、プロンプトとツールを渡せばエージェントが動く
- モデル非依存であり、Amazon Bedrock、Anthropic、OpenAI など、様々なプロバイダーに対応
- MCP(Model Context Protocol)ネイティブサポートしており、数千もの公開 MCP サーバーをツールとして利用可能
- 本番環境に対応しており、OpenTelemetry によるトレーシング、デバッグ機能が組み込み済み
- コミュニティ駆動のツールエコシステム、strands-agents-tools パッケージで 20 以上のプリビルトツールを提供
※参考: https://note.com/aoki_monpro/n/ne4764c773780
【実践】 最低限の AI エージェントを書いてみよう
さて、ここからは実際にコードを見ながら AI エージェントの世界に入っていきましょう。「AI エージェント」と聞くと何やら難しそうに感じるかもしれませんが、Strands Agents を使えば驚くほどシンプルに書けます。
まずは環境構築から(MacBook 環境を想定)。
# 仮想環境を作成して有効化 python -m venv .venv source .venv/bin/activate # Strands Agents をインストール pip install strands-agents strands-agents-tools
次に、最もシンプルなエージェントを作ってみましょう。
from strands import Agent # たったこれだけで AI エージェントが動く! agent = Agent() # エージェントに質問を投げる response = agent("株式会社アドウェイズについて教えて〜") print(response)
これを実行すると下記のような実行結果が得られます。
# 株式会社アドウェイズについて ## 会社概要 株式会社アドウェイズ(Adways Inc.)は、日本のインターネット広告会社です。 ## 基本情報 - **設立**: 2001年2月 - **本社**: 東京都新宿区 - **上場**: 東京証券取引所プライム市場(証券コード: 2489) - **創業者**: 岡村陽久(現会長) ## 主な事業内容 ### 1. **アドテクノロジー事業** - アフィリエイト広告 - スマートフォン向け広告配信 - アプリマーケティング支援 ### 2. **EC支援事業** - ECサイトの構築・運営支援 - D2Cブランド支援 ### 3. **その他の事業** - メディア事業 - 海外事業展開 ## 特徴 - **アフィリエイト広告**: 「JANet」などのアフィリエイトサービスを運営 - **スマホ特化**: モバイル広告分野で強み - **グローバル展開**: アジアを中心に海外展開 ## グループ企業 複数の子会社を持ち、広告関連の様々なサービスを展開しています。 何か特定の情報について詳しく知りたいことはありますか?
いとも簡単に会社情報が取得できました!
いかがでしょうか?たった3行で AI エージェントが動作します!!
デフォルトでは Amazon Bedrock の Claude 4 Sonnet が使用されます(AWS の認証情報が設定されている必要があります)。
このように必要最低限の機能はとても簡単に実行完了することが確認できるかと思います!
もう少し実用的な例として、ツールを使ったエージェントを作ってみましょう。
from strands import Agent, tool from strands_tools import current_time # カスタムツールを定義(@tool デコレータを使う) @tool def greet_user(name: str) -> str: """ユーザーに挨拶をする。nameには挨拶する相手の名前を指定する。""" return f"こんにちは、{name}さん!今日も一日頑張りましょう!" # ツールを渡してエージェントを作成 agent = Agent( system_prompt="あなたは親切なアシスタントです。", tools=[current_time, greet_user] ) # エージェントが適切なツールを選択して実行 response = agent("日置さんに挨拶して、今の時刻を教えて") print(response)
@tool デコレータを付けた Python 関数がそのままツールになります。関数の docstring がモデルへのツール説明として使われるので、何をするツールなのかを明確に書いておくことが重要です。
エージェントは質問に応じて 自分で判断し、必要なツールを呼び出して回答を生成 します。この「自律的にツールを選んで実行する」という部分が、AI エージェントの醍醐味ですね。
出力結果は以下のようになります。
Tool #1: greet_user Tool #2: current_time こんにちは、日置さん!今日も一日頑張りましょう! 現在の時刻は**2025年12月3日 5時31分24秒(UTC)**です。
今回は @tool デコレータを用いて、人物名に対応した挨拶を返す greet_user 関数を実装し、さらに AWS によって提供された SDK の一部である current_time モジュールを使用し、時刻が取得できました。
【応用】 本番環境へのデプロイと監視
基本がわかったところで、もう少し実践的な内容に踏み込んでいきます。
AgentCore Runtime へのデプロイ
ローカルで動くエージェントを本番環境にデプロイするには、AgentCore Runtime を使います。
驚くべきことに、数行のコード追加だけで本番対応のエンドポイントが手に入ります。
from strands import Agent from bedrock_agentcore.runtime import BedrockAgentCoreApp # エージェントを作成 agent = Agent( system_prompt="あなたはカスタマーサポートのアシスタントです。" ) # AgentCore アプリを作成 app = BedrockAgentCoreApp() # エントリーポイントを定義 @app.entrypoint def invoke(payload) -> str: """ユーザーからの入力を処理してレスポンスを返す""" user_message = payload.get("prompt", "Hello") response = agent(user_message) return str(response) if __name__ == "__main__": app.run()
デプロイは CLI ツールを使って行います。
# 設定を行う
agentcore configure --entrypoint agent.py
# AWS にデプロイ
agentcore launch
# デプロイしたエージェントをテスト
agentcore invoke '{"prompt": "こんにちは!"}'
これだけで、セッション分離やスケーリングが自動で行われるサーバーレスエンドポイントが立ち上がります。
インフラの設定に悩む必要がないのは本当にありがたいです。
CloudWatch による監視
AI エージェントを業務で運用していく上で避けて通れないのが、コスト管理とパフォーマンス監視です。
生成 AI は従量課金であるため、使いすぎると予想外の請求が…なんてことも起こりえます。
実はこれは実体験がありまして...
Amazon Bedrock で Claude モデルを駆使して AI エージェントを実行していたのですが、@tool デコレータを用いてスクレイピングのようなことをさせていた時のことです。関数の docstring に「〇〇に関する情報を取得するまでスクレイピングをしてください」と言った感じで説明文を書いていたら、その条件に当てはまる情報が一向に手に入らないのか、無限スクレイピング編が始まってしまい過金額が ...(*_*) という結果になってしまいました...
幸いこの時はログを取っていたのでログから無限にスクレイピングが行われていることに気づいて慌てて止めたのですが、これが一晩中暴走し続けてたと考えると末恐ろしいですね...
そうならないためにも重要なのは 監視 です!
AgentCore Runtime は Amazon CloudWatch と連携しており、以下のような情報を可視化・監視できます。
- トークン使用量: どれだけトークンを消費しているか、コストに直結する重要な指標
- レイテンシ: エージェントの応答時間、ユーザー体験に直結
- セッション数・実行時間: どれだけのユーザーがエージェントを使っているか
- エラー率: 問題が発生していないかをリアルタイムで把握
さらに AgentCore Observability を使えば、エージェントの推論過程をステップバイステップで可視化できます。 「なぜこのツールを選んだのか」「どのような思考プロセスを辿ったのか」がわかるので、デバッグや品質改善に非常に役立ちます。
CloudWatch のアラート機能を設定しておけば、コストが一定額を超えた場合やエラー率が上昇した場合に通知を受け取ることもできます。 「コストが見えない」という不安はエージェント導入の大きな障壁になりがちですが、適切なモニタリングを設定しておけば安心して運用できます。
【学び】 AI エージェント開発を通じて感じたこと
AI エージェント開発に携わる中で、改めて感じたことがあります。
まず、前回のブログでも書いたことですが、AI の出力を鵜呑みにしてはいけないという点は、エージェント開発においても変わりません。むしろエージェントは自律的に動く分、想定外の動作をする可能性も高くなります。
ツールの定義は明確に、プロンプトは具体的に、そしてエージェントの振る舞いを常に監視することが重要です。
また、AI エージェントは「魔法の杖」ではありません。適切なタスク分解、明確なツール設計、そして人間によるレビューと改善のサイクルがあってこそ、真に役立つエージェントになります。技術に振り回されるのではなく、解決したい課題から逆算してエージェントを設計することが大切だと感じています。
【まとめ】 これから AI エージェントに挑戦するあなたへ
ここまで読んでいただきありがとうございました!
AI エージェントは、これからのソフトウェア開発において間違いなく重要な技術になっていくと感じています。最初は「難しそう」「自分にはまだ早い」と思うかもしれませんが、この記事でご紹介したように Strands Agents を使えば数行のコードから始められます。
8月の記事で書いた通り、私自身もともとは AI に対して抵抗感を持っていました。しかし今では、Claude Code を相棒に日々の業務をこなし、さらには AI エージェントの開発にまで挑戦しています。
まずは小さく始めてみること。
これが、AI と上手く付き合っていくための第一歩だと思います。この記事が、あなたの AI エージェント開発への一歩を踏み出すきっかけになれば幸いです。
それでは、良いお年をお迎えください!