🍽️
「渋谷でカフェ」とLINEするだけ。Claude × Google MapsでAIお店検索Botを作った
LINEで「@お店」と送るだけ!AIがお店を探してくれるBotを作った
はじめに
「渋谷で静かなカフェ探して」「新宿でデート向きの居酒屋ある?」
こんな風にLINEで聞くだけで、AIがGoogle Mapsから条件に合うお店を探して提案してくれるBotを作りました。

友達追加はこちらから
どんなサービス?
使い方はシンプル
LINEで @お店 に続けて条件を入力するだけ。
@お店 渋谷で静かなカフェ
@お店 上野で3000円以下の焼肉
@お店 品川駅近くでランチ
返ってくる情報
- 店名
- 距離(目安)
- 価格帯(目安)
- おすすめポイント
- Google Mapsへのリンク
さらに「もっと絞り込む質問」も提案してくれるので、会話しながら理想のお店を見つけられます。
技術構成
アーキテクチャ
※作画:claude opus4.5 with aws-diagram-mcp-server

使用技術
| カテゴリ | 技術 |
|---|---|
| AI/LLM | Amazon Bedrock (Claude) |
| 地図API | Google Maps API (MCP Server) |
| コンピュート | AWS Lambda (コンテナ) |
| API | Amazon API Gateway |
| シークレット管理 | AWS Systems Manager Parameter Store |
| IaC | Terraform |
| 言語 | Python 3.14 |
処理フロー
1. ユーザーがLINEで「@お店 渋谷でカフェ」と送信
2. LINE PlatformがWebhookでAPI Gatewayを呼び出し
3. API GatewayがLambda関数を起動
4. Lambdaが「検索中です」と即レス(reply)
5. Bedrock (Claude) がユーザーの意図を解析
6. Google Maps APIで条件に合うお店を検索
7. Claudeが結果を整形して返答を生成
8. LINEにプッシュメッセージで結果を送信
こだわりポイント
1. 即レス + 結果は後から
お店検索には数秒かかるため、まず「検索中です」と即レスして、結果は後からプッシュメッセージで送信。ユーザーを待たせない工夫です。
# ① まず即レス
send_line_reply(reply_token, "ただいま条件に合うお店をお探ししております...")
# ② 重い処理(AI + Google Maps)
ai_response = _call_agent(query)
# ③ 結果はpushで送信
send_line_push(dest, ai_response, CHANNEL_ACCESS_TOKEN)
2. グループチャット対応
個人チャットだけでなく、グループやトークルームでも使えます。
def _get_push_destination(ev):
source = ev.get("source", {})
source_type = source.get("type")
if source_type == "user":
return source.get("userId")
if source_type == "group":
return source.get("groupId")
if source_type == "room":
return source.get("roomId")
3. セキュアなシークレット管理
APIキーやトークンは環境変数ではなく、AWS Parameter Store(SecureString)で管理。
def get_secret(name: str) -> str:
ssm_prefix = os.environ.get("SSM_PREFIX")
client = boto3.client('ssm')
response = client.get_parameter(
Name=f"{ssm_prefix}/{name}",
WithDecryption=True
)
return response['Parameter']['Value']
開発中にハマったこと
1. Pythonのsecretsモジュールと名前衝突
自作のsecrets.pyがPython標準ライブラリと衝突してエラーに。ssm_secrets.pyにリネームして解決。
2. Mac (Apple Silicon) でのDockerビルド
普通にビルドするとLambdaで動かない!以下のオプションが必須でした。
docker build --platform linux/amd64 --provenance=false --sbom=false -t line-shop-bot .
3. Bedrock権限の追加忘れ
LambdaからBedrockを呼び出す権限をIAMポリシーに追加し忘れてAccessDeniedException。
まとめ
LINEで「@お店」と送るだけでAIがお店を探してくれるBot、ぜひ使ってみてください!
技術的には、Bedrock + Google Maps API + Lambda + API Gatewayというサーバーレス構成で、Terraformでインフラをコード管理しています。
Discussion