---
# System prepended metadata

title: LINEのチャットbotを作る2

---

# LINEのチャットbotを作る2

### <font color='red'>コード解説</font>
---
「LINEのチャットbotを作る1」の続きです. 環境変数設定が終わったのでコードの解説書いていきます. 
```python=
@app.route("/")
def hello_world():
    return "hello world!"
```
これ結構意味なさそうに見えるけど, 後々
```
$heroku open
```
やった時に, **hello world!** が表示されたらとりあえずpushとかは上手くいってる証拠になる. 
```python=
@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)
    return 'OK'
```
この辺は結構理解してない部分が多い. 認証周りの話かなって勝手に思ってる. 強いて言うなら, ”/callback”の部分かな. 後々, URL使う時末尾に, ”/callback”追加してあげたら動くようになるよ〜ってくらい. 

```python=
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=event.message.text))
```
実際にオウム返しの処理を行っている関数になります. 意外とこれだけで処理できてしまう. プログラム側から見て送られてくる文章, つまりユーザが送っている文章は, ”message=TextMessage”として処理されています. 送られてきた文章は, 変数messageとして扱いますってこと. それ以下の処理は, このプログラム書いてくれた人がわかりやすい変数名にしてくれてるから, 読むだけで案外理解できる. ”TextSendMessage()”これが基本の形. この()内にプログラム側が送る文章, つまりbotに返信して欲しいこと書けば色々と応用ができる. 今回は送られてきた文章をそのまま返したいから, ”event.message.text”を変数textに入れて使ってる. 

```python=
if __name__ == "__main__":
    port = int(os.getenv("PORT", 5000))
    app.run(host="0.0.0.0", port=port)
```
この辺は全然理解してないからおまじないになってる. けどオウム返しやってる時に, ポート番号いじって動いたり, これと全く違う書き方してる人もいるから, 結局よくわからない. 

### <font color='red'>いざ実装</font>
--- 
コードの準備ができたので実装していきます. 初心者の自分が初めに落ちた穴として
* これから準備するファイルとプログラムは同一ファイルで管理する
* コマンドラインから実装する時 `cd パス名`でファイルを移動しないといけない

これ今考えると, 本当に何もわからん状態でやってたんやな. はい, ファイル準備していきます. 用意するのは以下の3つです. 
* Procfile
実行したいプログラム名を書く
* runtime.txt
自分のPythonのバージョンを記入
* requirements.txt
インストール済みのものを記述

ここで問題になったのが以下の2つ
* Pipfile
ライブラリをインストールするもの
* Pipfile.lock
インストールしたものが書かれている

どうやらrequirements.txtとPipfileの相性が良くないみたいで, 無限に時間溶かしました. 自分の場合はPipfileを採用して使っているけど, requirements.txtでもできるのかな. よく分かんないけど動くしいいやってなってしまってる. こういうのがよくないんだよな. はい, 次行きます. 

ここまできたらherokuにデプロイできる準備が整っているのでやっていきます. 
```
$git add .　// ．以下を追加
$git commit -m'コミットメッセージ'
$git push heroku master
```
無事pushが成功したら
```
$heroku open
```
して**hello World!!** が表示されたら成功です. 以下のように動いてくれます. 
![](https://i.imgur.com/o24xE72.png)

ジバニャン可愛いでしょ. 上の方は失敗して返信なかった時のです. 一方的な片想いずっとやってました. これ以上に返信ない時ありましたからね. ここで原点にして頂点の対策お教えします. それは
```
$heroku logs --tail
```
でログを見ることです. 結局なんでエラーになっているのか, ただ考えていても無駄なことの方が多いと思うから, とりあえずログを見る. そしてエラー文で検索をかける. めんどくさく思えるけど一番の近道です. てなわけでオウム返しbotが完成したので次からは, クラブチーム用に作ったLINEチャットbotの記事書いていくので, よかったら見てください!