7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LINEBOTをwindows10環境でHerokuで作成した

Last updated at Posted at 2022-03-11

はじめに

linebotを作成したので備忘録です。
プログラミング経験がほぼない素人ですのでご容赦ください
・Python歴=0年
・linux歴=1年

GitとかPythonとか全く知識がないので、
間違い等がありましたら、ご指摘いただけると幸いです。
(元気があれば修正します)

環境

image.png
(1)開発環境
Windows10

(2)中間サーバ
Line Developers

(3)サーバ側環境
Heroku
-Python
-Flask

参考にさせていただいたサイト

(ソースはほぼ●パクリです…すみません…)
https://uepon.hatenadiary.com/entry/2018/07/27/002843

作成手順

1. Herokuのインストール

(1)リンクから、サイトに移動する
Heroku

(2)アカウントを作成する

(3)作成したアカウントでログインする
(4)右上のNew > Create new appを選択
image.png
(5)App nameとregionを入力
※App nameは一意だ思うので、適当な名前を付けてください。これから結構使うので短いほうがいいかも
image.png
→App nameを控える①

2. gitのダウンロード・インストール

(1)リンクから、サイトに移動する
git-ダウンロード

(2)左上のDownloadsをクリック
image.png

(3)Download for Windowsをクリック
image.png

(4)64-bit Git for Windows Setup.をクリック
image.png

(5)ダウンロードしたGit-2.35.1.2-64-bit.exeをダブルクリック

(6)Nextをクリック
image.png

(7)Nextをクリック
image.png

(8)Nextをクリック
image.png

(9)Nextをクリック
image.png

(10)Nextをクリック
image.png

(11)Nextをクリック
image.png

(12)Nextをクリック
image.png

(13)Nextをクリック
image.png

(14)Nextをクリック
image.png

(15)Nextをクリック
image.png

(16)Use Windows' default console windowをクリック後、
Nextをクリック
image.png

(16)Nextをクリック
image.png

(17)Nextをクリック
image.png

(18)Nextをクリック
image.png

(19)Nextをクリック
image.png

(20)ちょっと待つ
image.png

(21)完了
image.png

3. Heroku CLIのダウンロード・インストール

(1)リンクから、サイトに移動する
Heroku CLI-ダウンロード

(2)64をクリック
image.png

(3)ダウンロードしたheroku-x64.exeをダブルクリック

(4)Nextをクリック
image.png

(5)Installをクリック
image.png

(6)ちょっと待つ
image.png

(7)完了
image.png

4. Line Developerでアカウントを作成・設定する

(1)リンクから、サイトに移動する
LINE Developers

(2)ログインする(アカウントがなければ作成)

(3)新規プロバイダー作成をクリック
image.png

(4)プロバイダー名を入力する
image.png

(5)Messaging APIをクリック
image.png

(6)入力する
image.png
image.png
image.png

(6)OK > 同意するをクリック
image.png

(7)チャネル基本設定 > チャネルシークレットの発行をクリック → コードを控える②
image.png
image.png
image.png

(7)Messaging API設定 > チャネルアクセストークン(長期)をクリック → コードを控える③
image.png
image.png

5. ファイルを準備する

作成するフォルダとファイル
C:\linebot
├─main.py
├─Procfile
├─requirements.txt
└─runtime.txt

(1)エクスプローラーを開いてローカルディスク(C:)をクリック
image.png

(2)linebotフォルダを作成する
image.png

(3)linebotフォルダに空ファイルを作成する
image.png

(4)main.pyに以下を貼り付ける

main.py
'''
必要モジュールの読み込み
'''
from flask import Flask, request, abort
import os
from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
)

'''
変数appにFlaskを代入。インスタンス化
'''
app = Flask(__name__)

'''
変数に格納
'''
YOUR_CHANNEL_SECRET = "さっき控えたチャネルシークレット"
YOUR_CHANNEL_ACCESS_TOKEN = "さっき控えたチャネルアクセストークン(長期)"

line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(YOUR_CHANNEL_SECRET)

'''
Herokuログイン接続確認のためのメソッド
Herokuにログインすると「hello world」とブラウザに表示される
'''

@app.route("/")
def hello_world():
    return "hello world!"

'''
ユーザーからメッセージが送信された際、LINE Message APIからこちらのメソッドが呼び出される。
'''
@app.route("/callback", methods=['POST'])
def callback():
    '''
    リクエストヘッダーから署名検証のための値を取得
    '''
    signature = request.headers['X-Line-Signature']

    '''
    リクエストボディを取得
    '''
    body = request.get_data(as_text=True)
    app.logger.info("Request body: " + body)

    '''
    署名を検証し、問題なければhandleに定義されている関数を呼び出す。
    '''
    try:
        handler.handle(body, signature)
    '''
    署名検証で失敗した場合、例外を出す。
    '''
    except InvalidSignatureError:
        abort(400)
    '''
    handleの処理を終えればOK
    '''
    return 'OK'

'''
LINEでMessageEvent(普通のメッセージを送信された場合)が起こった場合に、
def以下の関数を実行します。
reply_messageの第一引数のevent.reply_tokenは、イベントの応答に用いるトークンです。 
第二引数には、linebot.modelsに定義されている返信用のTextSendMessageオブジェクトを渡しています。
'''
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):

    '''
    メッセージの返信を条件によって変える
    '''
    input_text = event.message.text
    if "" in input_text:
        reply_text = "おつかれさま!気をつけて帰ってきてね!"
    elif  "おはよう" in input_text:
        reply_text = "おはよう!今日もがんばって!"
    elif  "" in input_text:
        reply_text = "いってらっしゃーい"
    elif  "プリン" in input_text:
        reply_text = "ぷるる~ん"
    elif  "" in input_text:
        reply_text = "今日のごはんはなににする?"
    elif  "" in input_text:
        reply_text = "食べすぎはだめだぞ!!!!"
    else:
        reply_text = "ねむい。おやすみ"        

    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=reply_text))

'''
ポート番号の設定
'''
if __name__ == "__main__":
    '''
    app.run()
    '''
    port = int(os.getenv("PORT"))
    app.run(host="0.0.0.0", port=port)

(5)Procfileに以下を貼り付ける

Procfile
heroku config:set YOUR_CHANNEL_SECRET="さっき控えたチャネルシークレット" --app さっき控えたHerokuのApp name
heroku config:set YOUR_CHANNEL_ACCESS_TOKEN="さっき控えたチャネルアクセストークン(長期)" --app さっき控えたHerokuのApp name

(6)requirements.txtに以下を貼り付ける

requirements.txt
Flask==2.0.3
line-bot-sdk==2.1.0

(7)runtime.txtに以下を貼り付ける

requirements.txt
python-3.9.10

Heroku(サーバ)へファイルを作成してデプロイする
(1)スタートからGit CMDを実行
image.png

(2)''で囲われている箇所の指示に従って操作

Git CMD
C:\>heroku login '←入力'
 »   Warning: Our terms of service have changed: https://dashboard.heroku.com/terms-of-service
heroku: Press any key to open up the browser to login or q to exit:'←適当なキーを入力'
Opening browser to **************'←ログイン画面のブラウザが立ちあがるので、id, passwordを入力'
Logging in... done'←ログイン完了した旨が表示される'
Logged in as **************

6. Heroku(サーバ)へデプロイ(apiを利用可能に)する

警告
前提:以前の操作で立ち上げたGit CMDはそのまま操作します。

(1)linebotフォルダに移動

Git CMD
cd c:\linebot

(2)環境変数を設定(意味ないかも…)

Git CMD
heroku config:set YOUR_CHANNEL_SECRET="さっき控えたチャネルシークレット" --app さっき控えたHerokuのAppName
heroku config:set YOUR_CHANNEL_ACCESS_TOKEN="さっき控えたチャネルアクセストークン(長期)" --app さっき控えたHerokuのAppName

(3)gitのリポジトリを作成する

Git CMD
git init
Initialized empty Git repository in C:/linebot/.git/'<-が表示されればOK'

(4)c:\linebot配下のすべてのファイルをコミット対象とする

Git CMD
git add .

'↓が表示されればOK'
[master (root-commit) xxxxxx] first commit
 4 files changed, 85 insertions(+)
 create mode 100644 Procfile
 create mode 100644 main.py
 create mode 100644 requirements.txt
 create mode 100644 runtime.txt

(5)gitにc:\linebot配下のすべてのファイルをコミット

Git CMD
git commit -m "first_comm"

(6)herokuにc:\linebot配下のすべてのファイルをアップロード

警告
app nameがaaaの場合は、以下の通りになります。
https://git.heroku.com/aaa.git

Git CMD
git remote add heroku https://git.heroku.com/さっき控えたapp name.git

(7)ローカルリポジトリ(c:\linebot配下)の内容をリモートリポジトリ(heroku)に送信する

Git CMD
git push heroku master

'↓が表示されればOK'
Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Delta compression using up to 6 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (6/6), 1.98 KiB | 1.98 MiB/s, done.
Total 6 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Building on the Heroku-20 stack
remote: -----> Determining which buildpack to use for this app
remote: -----> Python app detected
remote: -----> Using Python version specified in runtime.txt
remote: -----> Installing python-3.9.10
remote: -----> Installing pip 21.3.1, setuptools 57.5.0 and wheel 0.37.0
remote: -----> Installing SQLite3
remote: -----> Installing requirements with pip
remote:        Collecting Flask==2.0.3
remote:          Downloading Flask-2.0.3-py3-none-any.whl (95 kB)
remote:        Collecting line-bot-sdk==2.1.0
remote:          Downloading line_bot_sdk-2.1.0-py2.py3-none-any.whl (83 kB)
remote:        Collecting itsdangerous>=2.0
remote:          Downloading itsdangerous-2.1.1-py3-none-any.whl (15 kB)
remote:        Collecting click>=7.1.2
remote:          Downloading click-8.0.4-py3-none-any.whl (97 kB)
remote:        Collecting Werkzeug>=2.0
remote:          Downloading Werkzeug-2.0.3-py3-none-any.whl (289 kB)
remote:        Collecting Jinja2>=3.0
remote:          Downloading Jinja2-3.0.3-py3-none-any.whl (133 kB)
remote:        Collecting future
remote:          Downloading future-0.18.2.tar.gz (829 kB)
remote:          Preparing metadata (setup.py): started
remote:          Preparing metadata (setup.py): finished with status 'done'
remote:        Collecting aiohttp>=3.7.4
remote:          Downloading aiohttp-3.8.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.2 MB)
remote:        Collecting requests>=2.0
remote:          Downloading requests-2.27.1-py2.py3-none-any.whl (63 kB)
remote:        Collecting charset-normalizer<3.0,>=2.0
remote:          Downloading charset_normalizer-2.0.12-py3-none-any.whl (39 kB)
remote:        Collecting multidict<7.0,>=4.5
remote:          Downloading multidict-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (114 kB)
remote:        Collecting yarl<2.0,>=1.0
remote:          Downloading yarl-1.7.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (304 kB)
remote:        Collecting frozenlist>=1.1.1
remote:          Downloading frozenlist-1.3.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (156 kB)
remote:        Collecting attrs>=17.3.0
remote:          Downloading attrs-21.4.0-py2.py3-none-any.whl (60 kB)
remote:        Collecting async-timeout<5.0,>=4.0.0a3
remote:          Downloading async_timeout-4.0.2-py3-none-any.whl (5.8 kB)
remote:        Collecting aiosignal>=1.1.2
remote:          Downloading aiosignal-1.2.0-py3-none-any.whl (8.2 kB)
remote:        Collecting MarkupSafe>=2.0
remote:          Downloading MarkupSafe-2.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25 kB)
remote:        Collecting idna<4,>=2.5
remote:          Downloading idna-3.3-py3-none-any.whl (61 kB)
remote:        Collecting certifi>=2017.4.17
remote:          Downloading certifi-2021.10.8-py2.py3-none-any.whl (149 kB)
remote:        Collecting urllib3<1.27,>=1.21.1
remote:          Downloading urllib3-1.26.8-py2.py3-none-any.whl (138 kB)
remote:        Building wheels for collected packages: future
remote:          Building wheel for future (setup.py): started
remote:          Building wheel for future (setup.py): finished with status 'done'
remote:          Created wheel for future: filename=future-0.18.2-py3-none-any.whl size=491070 sha256=b70e3fd11a80fa1401cc
remote:          Stored in directory: /tmp/pip-ephem-wheel-cache-i95uqc7e/wheels/2f/a0/d3/4030d9f80e
remote:        Successfully built future
remote:        Installing collected packages: multidict, idna, frozenlist, yarl, urllib3, MarkupSafe, charset-normalizer, certifi, attrs, async-timeout, aiosignal, Werkzeug, requests, Jinja2, itsdangerous, future, click, aiohttp, line-bot-sdk, Flask
remote:        Successfully installed Flask-2.0.3 Jinja2-3.0.3 MarkupSafe-2.1.0 Werkzeug-2.0.3 aiohttp-3.8.1 aiosignal-1.2.0 async-timeout-4.0.2 attrs-21.4.0 certifi-2021.10.8 charset-normalizer-2.0.12 click-8.0.4 frozenlist-1.3.0 future-0.18.2 idna-3.3 itsdangerous-2.1.1 line-bot-sdk-2.1.0 multidict-6.0.2 requests-2.27.1 urllib3-1.26.8 yarl-1.7.2
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote:
remote: -----> Compressing...
remote:        Done: 60.7M
remote: -----> Launching...
remote:        Released v5
remote:        https://linebot-1212.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/linebot-1212.git
 * [new branch]      master -> master

警告
ここでエラーがでた場合は、以下を確認してください。
・pythonのバージョンがherokuのサポート内かどうか

それでも分からない場合は、エラー個所をコピーして検索してください。

(8)リモートリポジトリを追加、削除する

Git CMD
c:\linebot>heroku git:remote -a さっき控えたapp name

'↓が表示されればOK'
 »   Warning: heroku update available from 7.53.0 to 7.59.4.
set git remote heroku to https://git.heroku.com/linebot-1212.git

(9)デプロイしたアプリを実行する

Git CMD
heroku ps:scale web=1

'↓が表示されればOK'
 »   Warning: heroku update available from 7.53.0 to 7.59.4.

(10)デプロイしたアプリにアクセス

Git CMD
heroku open

(11)ブラウザが開いて以下が表示されれば成功です!
image.png

警告
ここでhello world以外が表示されていれば、以下を確認してください。
(a). requirements.txtファイルの内容を再度確認してください。
(b). コマンドを実行して、ERRORと記載がある行をコピー・検索して原因を確認してください。

Git CMD
heroku logs --tail

'↓が表示されればOK'
 »   Warning: heroku update available from 7.53.0 to 7.59.4.
2022-03-11T10:00:06.292364+00:00 app[api]: Initial release by user xxxxxx@xx.com
2022-03-11T10:00:06.292364+00:00 app[api]: Release v1 created by user xxxxxx@xx.com
・
・
・

7. Line Developer

(1)リンクから、サイトに移動する
LINE Developers

(2)Messaging API設定をクリック
image.png

(3)Webhook設定をする

入力項目
https://さっき控えたapp name.herokuapp.com/callback

image.png

(4)あいさつメッセージの右側の編集をクリック
image.png

(5)応答設定を編集
image.png

(6)スマホからLINEを開いて、QRコードを読み込む
image.png

(7)スマホのLINEで友達追加する

(8)チャットしてみる
image2

(9)完成です!お疲れさまでした!

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?