「LINEで問い合わせが来るたびに手入力で返信している」「営業時間外の問い合わせを翌朝まとめて処理するのが大変」——飲食店・美容院・リテールの現場でよく聞く悩みです。Claude Codeを使うと、こうした顧客対応を自動化するLINEボットを、プログラミングの専門知識なしで構築できます。この記事では、LINE Messaging APIとClaude Codeを連携させてLINEボットを作る手順を、実際に動作するコードの全文つきで解説します。個人で試す場合と、会社のLINE公式アカウントでチームとして運用する場合の違い、よくあるエラーの対処法までカバーします。
本記事はclaudecode道場(malna株式会社が独自に提供する学習サービス)のブログ記事であり、Anthropic公式の製品ではありません。LINEおよびLINE Messaging APIはLINEヤフー株式会社の商標であり、本記事はLINEヤフー株式会社の公式コンテンツでもありません。
目次
- LINEボットで何が自動化できるか
- 必要なものを準備する
- LINE Messaging APIのアカウントを作る
- Claude CodeでLINEボットのコードを生成する
- 個人利用とチーム・法人利用の違い:権限管理と運用体制
- 飲食店向け実践例:予約受付ボット
- 美容院向け実践例:メニュー案内ボット
- リテール向け実践例:在庫問い合わせボット
- よくある失敗と対処法
- 運用・改善のポイント
- よくある質問(FAQ)
1. LINEボットで何が自動化できるか
LINEボットは、顧客からのメッセージに対して自動で返信するプログラムです。Claude CodeとLINE Messaging APIを組み合わせると、単純な定型回答だけでなく、自然な日本語で文脈を読みながら応答するボットが作れます。
自動化できる主な業務は次のとおりです。
予約受付・確認: 営業時間外の予約問い合わせに24時間対応できます。「来週の土曜17時は空いていますか?」という問いに対して、カレンダーを参照して空き状況を返信するボットが実現します。
FAQ自動回答: 営業時間・場所・メニュー・料金など、繰り返し来る質問への回答を自動化します。1回設定すれば何度でも正確に返答します。問い合わせ対応全体の効率化についてはカスタマーサポートでClaude Codeを使った事例でも詳しく紹介しています。
注文・問い合わせの一次受付: 「商品Aを3個注文したい」「〇〇は在庫ありますか?」という問い合わせを受け付けて、担当者に転送または回答します。
アンケート・フィードバック収集: 来店後のお礼メッセージとともに満足度アンケートを送り、回答を自動集計します。
具体的にどれくらいの対応時間を削減できるかは業態や問い合わせ内容によって変わりますが、本記事の6〜8章で飲食店・美容院・リテールの3つの想定シナリオを、削減時間の試算つきで紹介します。
試算すると、月間200件の問い合わせを手作業で処理する場合、1件あたり平均3分として合計10時間かかります。ボットで80%を自動化すれば、月間8時間の削減になります。時給換算で2,400円なら月19,200円分の工数が浮く計算です(いずれも仮の数値を用いた試算であり、実際の削減効果を保証するものではありません)。
2. 必要なものを準備する
LINEボットを作るために必要なものは、以下の4つです。
| 必要なもの | 用途 | 費用の目安 |
|---|---|---|
| LINE公式アカウント | ボットの窓口 | プランにより異なる(下記参照) |
| LINE Developers登録 | APIアクセスに必要 | 無料 |
| Claude Code(インストール済み) | コード生成 | 利用プランによる |
| Webhook受信サーバー | LINEからの通知を受け取る | 月額0円〜(Vercel等の無料枠) |
LINE公式アカウントは、すでに店舗やビジネスで使っているものがあれば流用できます。新規に作る場合は、料金プランと無料メッセージ通数を先に確認しておくと安心です。
事実(出典:LINE Developers公式ドキュメント、2026年9月2日確認):LINE公式アカウントの料金プランは3種類あり、プランごとに無料で送信できるメッセージ通数が異なります。
| プラン名 | 月額固定費(税別) | 無料メッセージ通数 |
|---|---|---|
| コミュニケーションプラン | 0円 | 200通 |
| ライトプラン | 5,000円 | 5,000通 |
| スタンダードプラン | 15,000円 | 30,000通(超過分は従量課金で追加購入可) |
出典:LINE Developers「Messaging APIの料金」、LINEヤフー「LINE公式アカウントの料金プラン」
ここで重要なのは、この記事で扱う「ユーザーからのメッセージに自動で返信する」タイプのボットで使う応答メッセージは、この無料メッセージ通数にカウントされないという点です(同じくLINE Developers公式ドキュメントに基づく事実)。通数にカウントされるのは、ボット側から自主的に送るプッシュメッセージ・マルチキャストメッセージ・ブロードキャストメッセージ・ナローキャストメッセージであり、問い合わせに対して返信するだけの用途であれば、コミュニケーションプラン(月額0円)のままでも通数の上限を気にする必要はほぼありません。
ただし、料金プランや料金体系は2026年10月に改定が予定されていることがLINE公式サイトに記載されています。実際に導入する際は、必ずLINE公式サイトで最新の内容を確認してください。
Webhook受信サーバーは、LINEからのメッセージを受け取る受け口です。Vercelという無料サービスを使えば、インターネット上にサーバーを立てる作業も不要で、Claude Codeがコードを生成してくれます。
3. LINE Messaging APIのアカウントを作る
LINE Developers(developers.line.biz)にアクセスし、LINEアカウントでログインします。次の手順でMessaging APIチャネルを作成します。
まずプロバイダーを作成します。プロバイダー名は自社名やサービス名を入力してください。次に「チャネルを作成する」から「Messaging API」を選択し、チャネル名・説明・業種カテゴリを入力します。
チャネルが作成できたら、「チャネルシークレット」と「チャネルアクセストークン(長期)」の2つを発行して控えておきます。これらは後でClaude Codeに渡すキー情報です。
Webhook設定では「Webhookの利用」をオンにします。Webhook URLは後でサーバーを立てた後に入力します。
なお、ここで発行するチャネルシークレットとチャネルアクセストークンは、第三者に渡ると成りすまし送信が可能になる重要な認証情報です。個人で使う場合と、会社のチームで共有する場合とでは管理方法を変える必要があります。詳しくは5章で解説します。
4. Claude CodeでLINEボットのコードを生成する
Claude Codeを起動して、次のようなプロンプトを入力します。
LINE Messaging APIを使ったボットを作ってください。
要件:
- ユーザーのメッセージを受け取り、Claude APIを使って自然な日本語で回答する
- Webhookエンドポイントはvercel functionsで動かす
- 環境変数でLINE_CHANNEL_SECRET・LINE_CHANNEL_ACCESS_TOKEN・ANTHROPIC_API_KEYを受け取る
- 飲食店のFAQボットとして、予約受付・営業時間・メニューに関する質問に答える
- システムプロンプトで店舗情報を埋め込む
このプロンプトに対してClaude Codeは、動作するコードを生成してくれます。実際に生成されるコードのイメージは、たとえば以下のようになります(Flask・line-bot-sdk(v3系)・Anthropic Python SDKを使った例。line-bot-sdk-python公式README記載のWebhook実装パターンをもとにしています)。
api/webhook.py
import os
from flask import Flask, request, abort
from linebot.v3 import WebhookHandler
from linebot.v3.exceptions import InvalidSignatureError
from linebot.v3.messaging import (
Configuration,
ApiClient,
MessagingApi,
ReplyMessageRequest,
TextMessage,
)
from linebot.v3.webhooks import MessageEvent, TextMessageContent
import anthropic
app = Flask(__name__)
# 環境変数はVercelのプロジェクト設定(Settings > Environment Variables)で登録する
LINE_CHANNEL_SECRET = os.environ["LINE_CHANNEL_SECRET"]
LINE_CHANNEL_ACCESS_TOKEN = os.environ["LINE_CHANNEL_ACCESS_TOKEN"]
ANTHROPIC_API_KEY = os.environ["ANTHROPIC_API_KEY"]
# 使用するモデル名はAnthropic公式ドキュメントの最新モデル一覧を確認して指定する
CLAUDE_MODEL = os.environ.get("CLAUDE_MODEL", "claude-sonnet-4-5")
configuration = Configuration(access_token=LINE_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(LINE_CHANNEL_SECRET)
claude_client = anthropic.Anthropic(api_key=ANTHROPIC_API_KEY)
SYSTEM_PROMPT = """あなたは飲食店「〇〇レストラン」のLINE公式アカウント担当です。
以下の情報をもとに、丁寧で簡潔な日本語で回答してください。
- 営業時間:11:30-14:30(ランチ)、17:30-22:00(ディナー)
- 定休日:月曜日
- 予約は希望日時・人数・お名前・連絡先を確認する
- 価格交渉やキャンセルポリシーの詳細には回答せず、担当者へ確認する旨を案内する
"""
@app.route("/api/webhook", methods=["POST"])
def webhook():
signature = request.headers.get("X-Line-Signature", "")
body = request.get_data(as_text=True)
try:
handler.handle(body, signature)
except InvalidSignatureError:
abort(400)
return "OK", 200
@handler.add(MessageEvent, message=TextMessageContent)
def handle_message(event):
# ボット自身の発言はMessageEvent(ユーザー発言)として飛んでこないため、
# このハンドラだけでは無限ループは発生しない設計になっている
user_text = event.message.text
try:
reply_text = ask_claude(user_text)
except Exception:
reply_text = "只今混み合っております。恐れ入りますが、少し時間を置いて再度お問い合わせください。"
with ApiClient(configuration) as api_client:
line_api = MessagingApi(api_client)
line_api.reply_message(
ReplyMessageRequest(
reply_token=event.reply_token,
messages=[TextMessage(text=reply_text)],
)
)
def ask_claude(user_text: str) -> str:
response = claude_client.messages.create(
model=CLAUDE_MODEL,
max_tokens=300,
system=SYSTEM_PROMPT,
messages=[{"role": "user", "content": user_text}],
)
return response.content[0].text
if __name__ == "__main__":
app.run(port=3000)
requirements.txt
flask
line-bot-sdk
anthropic
このコードは、Vercelのapi/ディレクトリにPythonファイルを置くだけでサーバーレス関数として動くVercelの標準的な仕組みを前提にしています。実際にClaude Codeが生成するコードは、店舗情報やエラーメッセージの内容によって細部が変わります。生成されたら、そのまま動かす前に一度中身を読んで、店舗情報が正しく埋め込まれているか確認してください。
生成されたコードをVercelにデプロイするには、Claude Codeにそのままお願いします。「このコードをVercelにデプロイする手順を教えてください」と続けて質問すれば、GUI操作で完結する手順を案内してくれます。デプロイの際は、LINE_CHANNEL_SECRET・LINE_CHANNEL_ACCESS_TOKEN・ANTHROPIC_API_KEYをVercelのプロジェクト設定にも忘れずに登録してください(ローカルの.envファイルの値は自動的には反映されません)。
デプロイが完了するとURLが発行されます。そのURLに/api/webhookを足したものをLINE DevelopersのWebhook URLに設定すれば、ボットが動き始めます。
5. 個人利用とチーム・法人利用の違い:権限管理と運用体制
LINEボットを試しに作ってみる段階と、会社のLINE公式アカウントで本番運用する段階とでは、気をつけるポイントが変わります。
個人・少人数で試す場合
- LINE公式アカウントもClaude Codeも自分のアカウントで完結するため、権限設計は基本的に不要です
- チャネルシークレット・チャネルアクセストークン・Anthropic APIキーは、自分のPCの環境変数や
.envファイルで管理すれば十分です(.envはGitの管理対象から必ず除外してください) - 動かなくなっても影響範囲は自分の検証環境だけなので、まず動くものを作って試すというアプローチが取りやすい段階です
会社・チームで運用する場合
個人検証で作ったものをそのまま会社の公式アカウントに持ち込むと、退職・異動時のアクセス権限の引き継ぎ漏れや、認証情報の管理が特定の人に属人化するリスクが生じます。チームで運用する場合は、次の点を最初に決めておくと安全です。
- LINE公式アカウントの権限分離:LINE Official Account Managerには管理者・運用担当者などの権限区分があります。ボットの開発・保守を担当する人と、実際の接客・エスカレーション対応をする人を分ける場合は、それぞれに必要な権限だけを付与します
- 認証情報の共有方法:チャネルアクセストークン・APIキーをチャットやメールで直接共有しない。パスワード管理ツールや、Vercelのプロジェクト単位の環境変数機能を使い、担当者ごとにアクセス権を管理します
- コードの変更管理:Claude Codeが生成したコードは必ずGitでバージョン管理し、誰がいつどんな変更を加えたかを追跡できる状態にします。特に複数人でボットの改修を進める場合、変更履歴がないと「なぜこの挙動になっているか」が分からなくなりがちです
- 本番反映の確認ステップ:個人検証段階では確認なしにデプロイしてよいものも、会社のアカウントで本番稼働させる際は、動作確認済みのコードだけを反映するといった簡単な確認ステップを挟むと事故を防ぎやすくなります
これらは一般的なシステム運用における基本的な考え方であり、Claude CodeやLINEボットに特有のルールではありません。ただし、Claude Codeによってコード生成のハードルが下がった分、権限管理や変更管理を後回しにしたまま本番運用に進んでしまうケースは起きやすくなると考えられます。
ここから紹介する6〜8章の3つの実践例は、Claude CodeでLINEボットを構築する際によくある活用パターンを、想定シナリオとして具体的な数値とともに整理したものです。特定の企業に対して検証済みの効果測定結果ではなく、削減時間や対応件数の数値はあくまで目安としてご参照ください。
6. 飲食店向け実践例:予約受付ボット
飲食店の業務効率化はLINEボットに限らず幅広く進められます。詳しくは飲食店でClaude Codeを使った事例もあわせてご覧ください。
席数24席のイタリアンレストランを想定したケースでは、電話対応とLINE問い合わせの処理に1日あたり平均90分かかっていたところ、Claude CodeでLINEボットを構築してから、この時間が15分程度まで短縮される(削減率83%)というシナリオを試算しています。
ボットのシステムプロンプトには次の情報を埋め込みます。
- 店名・営業時間・定休日
- 席数・個室の有無
- コース料理の種類と価格帯(ランチ1,500円〜、ディナー4,500円〜)
- 予約受付の手順(希望日時・人数・お名前・連絡先を聞いて記録)
- 予約確認のフロー(担当者が折り返し確認する旨を伝える)
ボットが受け取った予約情報をGoogleスプレッドシートに自動記録する機能拡張も、Claude Codeに追加で依頼できます。「予約情報をGoogleスプレッドシートに追記する機能を追加してください。スプレッドシートIDは〇〇です」というプロンプトで対応できます。
7. 美容院向け実践例:メニュー案内ボット
美容室特有の文章業務については美容室でClaude Codeを使った事例でも取り上げています。
「カラーとカットで何時間かかりますか?」「ヘアマニキュアとヘアカラーの違いは?」といった技術的な質問への回答に1日30分程度かかっているケースを想定します。
メニュー案内ボットを導入すると、こうした質問への対応時間をゼロに近づけられます。ボットはメニュー表のPDFをClaude Codeに読み込ませて学習させます。「このPDFの内容をもとに、顧客の質問に答えるボットのシステムプロンプトを作成してください」というプロンプト1つで、メニュー知識をボットに組み込めます。
さらに「ご予約はこちらから」というボタンをLINEメッセージに追加し、予約ページへ誘導する機能も追加できます。LINE Messaging APIのリッチメッセージ機能を使うコードも、Claude Codeが生成してくれます。
8. リテール向け実践例:在庫問い合わせボット
雑貨店で「〇〇は在庫ありますか?」という問い合わせが1日平均20件来ており、スタッフが在庫システムを確認して返信するのに1件あたり5分かかる、合計100分が問い合わせ対応に消えている、というケースを想定します。
在庫問い合わせボットでは、Googleスプレッドシートで管理していた在庫データとLINEボットを連携させます。Claude Codeへのプロンプトは「Googleスプレッドシートから在庫数を取得して、LINEで問い合わせた商品の在庫状況を返答するボットを作ってください」という形になります。
このケースでは構築にかかる時間は半日(約4時間)程度、導入後は問い合わせ対応の多くをボットが処理するようになり、スタッフの対応時間を大きく減らせる、という試算になります。
9. よくある失敗と対処法
Webhookの設定ミス: LINEからメッセージを受け取れないケースの多くは、Webhook URLの入力ミスかSSL証明書の問題です。VercelのデプロイURLをそのまま使えば証明書の問題は発生しません。URLをコピーしてLINE Developersに貼り付ける際、末尾のスラッシュの有無や/api/webhookのパスが抜けていないかを確認してください。
署名検証エラー(Invalid signature): X-Line-Signatureの検証に失敗するケースです。原因の多くは、チャネルシークレットの設定ミス、またはリクエストボディを一度JSONとしてパースしてから再度シリアライズしてしまい、署名計算のもとになる文字列が変わってしまうことです。対処法は、LINEから届いた生のリクエストボディをそのまま検証に渡すことです(上記コード例のようにrequest.get_data(as_text=True)で取得した文字列をそのままhandler.handle()に渡します)。
タイムアウト・reply tokenの失効: LINEのWebhookは、一定時間内にレスポンスを返さないと再送してくることがあります。また、返信に使うreply_tokenには有効期限があり、一度使うと再利用できません。Claude APIの応答に時間がかかりすぎる場合は、システムプロンプトを短くする、max_tokensを絞るなどして応答時間を短縮する対処が必要です。
環境変数の設定漏れ: ローカルの.envファイルには値を書いたのに、Vercelにデプロイした本番環境でボットが動かないケースです。原因のほとんどは、Vercelのプロジェクト設定(Environment Variables)に同じ変数を登録し忘れていることです。ローカルの.envとVercelの環境変数は別物として管理し、デプロイ後は改めて設定画面を確認してください。
ボットが無限ループする: ボットがメッセージを送信すると、そのメッセージを自分で受け取ってまた返信する、というループが発生することがあります。Claude Codeに「ボット自身の発言には応答しないよう処理を追加してください」と依頼すれば修正できます。
回答の精度が低い: システムプロンプトに情報が少ない場合に起きます。店舗情報・よくある質問と回答例・回答してはいけない内容(価格交渉、キャンセル対応など)を具体的に書き込むことで改善します。
Claude APIやLINE APIのレート制限に達する: 短時間に大量のメッセージが集中すると、いずれかのAPIのレート制限に引っかかることがあります。エラー発生時に一定回数だけ間隔を空けて再試行する処理をClaude Codeに追加してもらうと、一時的なエラーの多くは吸収できます。
10. 運用・改善のポイント
LINEボットは作って終わりではなく、運用しながら改善していくことで精度が上がります。
週1回ログを確認する: ボットが答えられなかった質問や、誤った回答をしたケースを確認します。Claude Codeに「このログからボットが苦手な質問を抽出してください」と依頼すれば、改善すべきポイントが見えてきます。
人間へのエスカレーション設計: すべての問い合わせをボットで完結させようとしないことが重要です。「クレーム」「返金」「複雑な要望」といったキーワードが含まれる場合は担当者に転送するよう設定しておきます。誰が転送先の担当者になるかは、5章で触れた権限設計ともあわせて決めておくとスムーズです。
季節・キャンペーン情報の更新: 年末年始の営業時間変更やセール情報は、システムプロンプトを更新するだけで反映できます。更新作業はClaude Codeに「システムプロンプトの営業時間を〇〇に変更してください」と依頼すれば短時間で完了します。
11. よくある質問(FAQ)
Q: Claude CodeでLINEボットを作るのにプログラミング経験は必要ですか? コードを自分で一行ずつ書く必要はありません。Claude Codeに日本語で要件を伝えると、動作するコードを生成してくれます。ただし、生成されたコードの中身をある程度読んで、店舗情報が正しく反映されているか、意図しない動作をしていないかを確認する姿勢は必要です。
Q: LINE Messaging APIの利用に費用はかかりますか? Messaging API自体の利用料は無料です。費用が発生するのはLINE公式アカウントの料金プランに応じたメッセージ配信分のみで、ユーザーからの問い合わせに返信する「応答メッセージ」は無料メッセージ通数にカウントされません(LINE Developers公式ドキュメントに基づく事実、2026年9月2日確認)。プッシュメッセージやブロードキャストメッセージを多用する場合は、プランごとの無料通数と料金を事前に確認してください。
Q: Claude CodeとLINEの連携にVercel以外のサーバーは使えますか? 使えます。この記事ではVercelを例に紹介していますが、Webhookを受け取れるサーバーであれば、他のホスティングサービスや自社サーバーでも同じ考え方で構築できます。使うサービスに応じて、Claude Codeへのデプロイ手順の質問内容を変えてください。
Q: 個人開発したLINEボットをそのまま会社の公式アカウントで使ってもいいですか? 技術的には可能ですが、認証情報の管理者が特定の個人に属人化する、変更履歴が残らないといったリスクがあります。会社のアカウントで本番運用する前に、5章で紹介した権限管理・認証情報の共有方法・コードの変更管理を整えておくことをおすすめします。
Q: LINEボットが返信しない・エラーになる場合、最初に確認すべきことは? まずはWebhook URLのパスと末尾のスラッシュ、次にVercelの環境変数が正しく設定されているかを確認してください。この2点が原因になっているケースが多く、9章で紹介した対処法の多くはこのどちらかに関連しています。
社内向けの問い合わせ対応を自動化したい場合も、基本的な考え方は同じです。SlackボットをClaude Codeで作る方法もあわせてご覧ください。


