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

「LINEで自動返信できたらいいな」「サーバーのエラーをLINEで通知したい」——そんな夢、Pythonで叶えられます!
この記事では、LINE Messaging APIをPythonで使う方法を、APIの基礎知識からBot作成・通知送信まで丁寧に解説します。プログラミング初〜中級者でも迷わないよう、ステップバイステップで進めていきますよ。
そもそも「API」って何?初心者向けにざっくり解説
APIとは「Application Programming Interface」の略で、一言で言うと「他のサービスの機能を自分のプログラムから使うための窓口」です。
たとえばレストランで例えると……
- 🍳 厨房(LINEサーバー):料理(機能)を持っている
- 📋 メニュー・注文票(API):どんな料理を頼めるか、どう頼むかのルール
- 🙋 あなたのPythonプログラム:注文するお客さん
つまり、LINEのAPIを使えば「LINEにメッセージを送って」「返信を受け取って」といった操作を、自分のPythonコードから直接命令できるようになるんです。難しそうに聞こえますが、手順通りに進めれば大丈夫です!
事前準備:LINE Developers登録とチャネル作成
コードを書く前に、まずLINEの開発者アカウントとチャネル(Botの入れ物)を準備します。
ステップ1:LINE Developersに登録する
- LINE Developers にアクセスし、LINEアカウントでログイン
- プロバイダーを作成(自分の名前やプロジェクト名でOK)
- 「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
- GitHubにコードをプッシュ(
.envは.gitignoreに追加して除外!) - Renderでアカウント作成 → 「New Web Service」でGitHubリポジトリを選択
- Start Commandに
gunicorn app:appを設定 - Environment Variables(環境変数)にトークンを入力
- デプロイ後に発行される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登録 | チャネル作成・トークン取得 | ⭐ |
| おうむ返しBot | Webhook受信 → リプライ送信 | ⭐⭐ |
| キーワード応答Bot | 辞書を使った条件分岐 | ⭐⭐ |
| プッシュ通知 | 任意タイミングでLINE通知 | ⭐⭐ |
| 本番デプロイ | Renderで常時起動 | ⭐⭐⭐ |
次に挑戦してみよう!
- 🌤️ 天気APIと組み合わせて「天気予報通知Bot」を作る
- 📈 株価・仮想通貨の価格変動を定期通知する
- 🤖 ChatGPT APIと組み合わせてAI会話Botを作る
- 📋 Googleスプレッドシートと連携してデータ管理Botを作る
PythonとLINE Messaging APIの組み合わせは、アイデア次第で無限に広がります。まずは今回のおうむ返しBotを動かしてみて、そこから少しずつ機能を追加していくのがおすすめです。
「動いた!」という体験が、プログラミング上達の一番の近道です。ぜひ手を動かしてみてください。
💡 最後に注意:LINE APIは今後もバージョンアップが予定されています(v3への移行が進行中)。本記事のコードが動作しなくなった場合は、LINE公式ドキュメントで最新の書き方を確認してください。









