Python応用

PythonでLINE Messaging APIを使ってBot・通知を自作する方法【完全ガイド2026】

PythonでLINE Botを作ろう!APIって何?から始める完全ガイド

LINE chatbot Python programming
LINE chatbot Python programming / Photo by Nemuel Sereti via Pexels

「LINEで自動返信できたらいいな」「サーバーのエラーをLINEで通知したい」——そんな夢、Pythonで叶えられます!

この記事では、LINE Messaging APIをPythonで使う方法を、APIの基礎知識からBot作成・通知送信まで丁寧に解説します。プログラミング初〜中級者でも迷わないよう、ステップバイステップで進めていきますよ。

⚠️ 注意:この記事は2025年時点の情報をもとに書いています。LINE APIの仕様は今後変更される可能性があります。最新情報はLINE Developers公式サイトでご確認ください。

そもそも「API」って何?初心者向けにざっくり解説

APIとは「Application Programming Interface」の略で、一言で言うと「他のサービスの機能を自分のプログラムから使うための窓口」です。

たとえばレストランで例えると……

  • 🍳 厨房(LINEサーバー):料理(機能)を持っている
  • 📋 メニュー・注文票(API):どんな料理を頼めるか、どう頼むかのルール
  • 🙋 あなたのPythonプログラム:注文するお客さん

つまり、LINEのAPIを使えば「LINEにメッセージを送って」「返信を受け取って」といった操作を、自分のPythonコードから直接命令できるようになるんです。難しそうに聞こえますが、手順通りに進めれば大丈夫です!


事前準備:LINE Developers登録とチャネル作成

コードを書く前に、まずLINEの開発者アカウントとチャネル(Botの入れ物)を準備します。

ステップ1:LINE Developersに登録する

  1. LINE Developers にアクセスし、LINEアカウントでログイン
  2. プロバイダーを作成(自分の名前やプロジェクト名でOK)
  3. Messaging API」チャネルを新規作成

ステップ2:必要なトークンを取得する

チャネルを作成したら、以下の2つをメモしておきましょう。

項目場所用途
チャネルアクセストークンMessaging API設定タブAPIを叩くときの認証キー
チャネルシークレット基本設定タブWebhookの署名検証に使う

⚠️ これらのトークンは絶対に外部に公開しないこと!GitHubなどにそのままアップすると悪用される危険があります。


Pythonライブラリのインストール

LINE公式のPythonライブラリ「line-bot-sdk」を使うと、複雑なAPI処理をシンプルに書けます。まずはインストールしましょう。

# ターミナル(コマンドプロンプト)で実行
pip install line-bot-sdk flask python-dotenv
  • line-bot-sdk:LINE API操作用ライブラリ
  • flask:Webhookを受け取るための軽量Webサーバー
  • python-dotenv:トークンを安全に管理するためのライブラリ

次に、プロジェクトフォルダに .env ファイルを作り、トークンを記載します。

# .env ファイル(このファイルはGitにコミットしない!)
LINE_CHANNEL_ACCESS_TOKEN=ここにチャネルアクセストークンを貼る
LINE_CHANNEL_SECRET=ここにチャネルシークレットを貼る

サンプル①:おうむ返しBotを作ろう(基本のWebhook処理)

まずは基本中の基本、「ユーザーが送ったメッセージをそのまま返す(おうむ返し)Bot」を作ってみましょう。

Webhookとは?
ユーザーがBotにメッセージを送ると、LINEサーバーが「こんなメッセージが来たよ」とあなたのサーバーに自動で通知してくれる仕組みです。これがWebhookです。

# app.py(おうむ返しBot)
from flask import Flask, request, abort
from linebot.v3 import WebhookHandler
from linebot.v3.messaging import (
    Configuration,
    ApiClient,
    MessagingApi,
    ReplyMessageRequest,
    TextMessage
)
from linebot.v3.webhooks import MessageEvent, TextMessageContent
from linebot.v3.exceptions import InvalidSignatureError
from dotenv import load_dotenv
import os

# .envファイルを読み込む
load_dotenv()

app = Flask(__name__)

# 環境変数からトークンを取得
configuration = Configuration(
    access_token=os.environ['LINE_CHANNEL_ACCESS_TOKEN']
)
handler = WebhookHandler(os.environ['LINE_CHANNEL_SECRET'])


@app.route("/callback", methods=['POST'])
def callback():
    """LINEからのWebhookを受け取るエンドポイント"""
    signature = request.headers['X-Line-Signature']
    body = request.get_data(as_text=True)

    try:
        handler.handle(body, signature)
    except InvalidSignatureError:
        abort(400)  # 署名が不正なリクエストは拒否

    return 'OK'


@handler.add(MessageEvent, message=TextMessageContent)
def handle_message(event):
    """テキストメッセージが来たときの処理"""
    with ApiClient(configuration) as api_client:
        line_bot_api = MessagingApi(api_client)
        # 受け取ったメッセージをそのまま返信
        line_bot_api.reply_message_with_http_info(
            ReplyMessageRequest(
                reply_token=event.reply_token,
                messages=[TextMessage(text=event.message.text)]
            )
        )


if __name__ == "__main__":
    app.run(port=5000)

このコードを動かすには、外部からアクセスできるURLが必要です。開発中は ngrok(無料ツール)を使うと簡単にローカルサーバーを公開できます。

# ターミナルその1:Flaskサーバーを起動
python app.py

# ターミナルその2:ngrokでポート5000を公開
ngrok http 5000
# → https://xxxx-xx-xx-xxx-xx.ngrok-free.app のようなURLが表示される

ngrokで表示されたURLに /callback を付けたもの(例:https://xxxx.ngrok-free.app/callback)を、LINE DevelopersのWebhook URLに設定すれば完成です!


サンプル②:キーワードで自動返答するBot

おうむ返しができたら次は「特定のキーワードに反応する」Botに発展させましょう。

@handler.add(MessageEvent, message=TextMessageContent)
def handle_message(event):
    """キーワードに応じて返答を変えるBot"""
    user_text = event.message.text  # ユーザーが送ったテキスト

    # キーワードと返答のペアを辞書で管理
    responses = {
        "天気": "今日の天気は晴れです☀️(本番ではAPIと連携してね!)",
        "ヘルプ": "使えるコマンド:\n・天気\n・ヘルプ\n・時間",
        "時間": f"現在の時刻をお知らせする機能です(実装してみよう!)",
    }

    # キーワードが辞書にあれば対応する返答、なければデフォルト返答
    reply_text = responses.get(user_text, f"「{user_text}」ですね!まだ対応していないコマンドです。")

    with ApiClient(configuration) as api_client:
        line_bot_api = MessagingApi(api_client)
        line_bot_api.reply_message_with_http_info(
            ReplyMessageRequest(
                reply_token=event.reply_token,
                messages=[TextMessage(text=reply_text)]
            )
        )

辞書(dict)を使うことで、キーワードと返答のペアを簡単に管理できます。これを応用すれば、FAQBotや簡易カスタマーサポートも作れますよ!


サンプル③:PythonからLINEに通知を「プッシュ送信」する

BotへのリプライだけでなくBotから能動的にメッセージを送る(プッシュメッセージ)こともできます。サーバー監視やスクレイピング結果の通知などに超便利!

プッシュ送信には「送り先のユーザーID」が必要です。自分のユーザーIDは、LINE DevelopersコンソールのBotにメッセージを送ると、Webhookのログから確認できます。

# push_notify.py(任意のタイミングでLINE通知を送るスクリプト)
from linebot.v3.messaging import (
    Configuration,
    ApiClient,
    MessagingApi,
    PushMessageRequest,
    TextMessage
)
from dotenv import load_dotenv
import os

load_dotenv()

configuration = Configuration(
    access_token=os.environ['LINE_CHANNEL_ACCESS_TOKEN']
)

def send_line_notify(user_id: str, message: str):
    """指定ユーザーにLINEメッセージをプッシュ送信する"""
    with ApiClient(configuration) as api_client:
        line_bot_api = MessagingApi(api_client)
        line_bot_api.push_message(
            PushMessageRequest(
                to=user_id,
                messages=[TextMessage(text=message)]
            )
        )
    print(f"送信完了: {message}")


if __name__ == "__main__":
    # 実際の使用例
    MY_USER_ID = "Uxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"  # 自分のユーザーIDに変更

    # 例1:シンプルな通知
    send_line_notify(MY_USER_ID, "🔔 サーバーの処理が完了しました!")

    # 例2:変数を含む通知
    cpu_usage = 85.3
    if cpu_usage > 80:
        send_line_notify(MY_USER_ID, f"⚠️ CPU使用率が高くなっています: {cpu_usage}%")

このスクリプトをcronやタスクスケジューラーで定期実行すれば、監視Botの完成です!


本番環境への公開:Renderでの無料デプロイ

開発が終わったら、常時起動できるサーバーにデプロイしましょう。Render(無料プランあり)が初心者におすすめです。

デプロイ前の準備ファイル

# requirements.txt(使用ライブラリを記録するファイル)
flask
line-bot-sdk
python-dotenv
gunicorn
  1. GitHubにコードをプッシュ(.env.gitignoreに追加して除外!)
  2. Renderでアカウント作成 → 「New Web Service」でGitHubリポジトリを選択
  3. Start Commandに gunicorn app:app を設定
  4. Environment Variables(環境変数)にトークンを入力
  5. デプロイ後に発行されるURLをLINE DevelopersのWebhook URLに設定

⚠️ Renderの無料プランは一定時間アクセスがないとスリープします。常時起動が必要な場合は有料プランや他のサービスを検討しましょう。


よくあるエラーと対処法

エラー内容原因対処法
400 Bad Request署名の不一致 / チャネルシークレットが間違い.envのチャネルシークレットを再確認
401 Unauthorizedアクセストークンが無効トークンを再発行して.envを更新
Webhook URLに到達できないngrok未起動 / URLの設定ミスngrokを起動してURLを再設定
ModuleNotFoundErrorライブラリ未インストールpip install を再実行
reply_token無効エラーreply_tokenは1回しか使えない同じtokenで2回返信しないよう修正

まとめ:できることと次のステップ

この記事で学んだことを整理しましょう!

項目内容難易度
APIの基礎知識サービスの機能を外部から使う仕組み
LINE Developers登録チャネル作成・トークン取得
おうむ返しBotWebhook受信 → リプライ送信⭐⭐
キーワード応答Bot辞書を使った条件分岐⭐⭐
プッシュ通知任意タイミングでLINE通知⭐⭐
本番デプロイRenderで常時起動⭐⭐⭐

次に挑戦してみよう!

  • 🌤️ 天気APIと組み合わせて「天気予報通知Bot」を作る
  • 📈 株価・仮想通貨の価格変動を定期通知する
  • 🤖 ChatGPT APIと組み合わせてAI会話Botを作る
  • 📋 Googleスプレッドシートと連携してデータ管理Botを作る

PythonとLINE Messaging APIの組み合わせは、アイデア次第で無限に広がります。まずは今回のおうむ返しBotを動かしてみて、そこから少しずつ機能を追加していくのがおすすめです。

「動いた!」という体験が、プログラミング上達の一番の近道です。ぜひ手を動かしてみてください。

💡 最後に注意:LINE APIは今後もバージョンアップが予定されています(v3への移行が進行中)。本記事のコードが動作しなくなった場合は、LINE公式ドキュメントで最新の書き方を確認してください。

📚 関連商品・おすすめ書籍

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

もしも

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

初心者に定番のPython入門書

Amazonで見る
徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

もしも

徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

電子工作とプログラミングを同時に学べる

Amazonで見る
実践Claude Code入門―現場で活用するためのAIコーディングの思考法

もしも

実践Claude Code入門―現場で活用するためのAIコーディングの思考法

AIコーディングの現場活用法を学ぶ一冊

Amazonで見る

※本記事にはアフィリエイトリンクが含まれます。

ABOUT ME
やまちゃん
これまで学生と社会人を合わせて5000人以上にプログラミング学習を指導。 ゼロからイチをわかりやすく解説する専門家として活動しており、本業ではArduinoを用いたIoT開発とロボットプログラミングが専門。 Pythonを用いたアプリ開発、ウェブアプリケーションの開発で業務の効率化をサポートしています。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です