Help us understand the problem. What is going on with this article?

LINEbot開発、ローカル環境で動作確認したい

この記事は動作確認のたびにherokuにpushするのどうにかしてぇ!! って思う方を対象にしています。

動作環境

  • Ubuntu 18.04
  • Python 3.8.1

herokuを使う意味

問題を解決する前に、そもそもどうしてherokuを使っていたのか考えます。
LINEbotとherokuはアクセストークン、シークレットキーとwebhookURLを介して繋がっていました。
「図」
herokuのアプリは公開(デプロイ)されるとURL(〜herokuapp.comのやつ)を持つことができます。
これがwebhookURLとして使うやつです。
このwebhookURLを自前で用意できたらいいのですが、なかなかできないですよね。
なので仕方なくデプロイして、アプリのURLをゲットするためにherokuを利用していたのです(それだけじゃないけど)。

じゃあどうするか

自分のlocalhostをherokuを使わず、外部に公開します。
こうすることでwebhookURLを用意できます。
(localhostを公開ってセキュリティ的にどーなんやろとか思ってしまいますが、置いときます)
使うツールはngrokってやつです。

やりかた

  • ngrokのインストール

ngrok公式サイトの赤いボタンでzipファイルをダウンロード
Screenshot from 2020-02-19 03-45-22.png

次に以下のコマンドで解凍〜version確認までを行います

ngrokのインストール
cd ~/Downloads
unzip ngrok-stable-linux-amd64.zip
sudo cp ngrok /usr/bin/
ngrok version

これでngrokが使えるようになりました。実際に使うときは

ngrokで外部公開
ngrok http [port番号]

でローカルサーバーの[port番号]が外部に公開されます。

ngrok実行結果
ngrok by @inconshreveable    (Ctrl+C to quit)
Session Status                online
Session Expires               7 hours, 59 minutes
Version                       2.3.35
Region                        United States (us)
Web Interface                 http://127.0.0.1:☓☓☓☓
Forwarding                    http://☓☓☓☓☓☓☓☓.ngrok.io -> http://localhost:5000 
Forwarding                    https://☓☓☓☓☓☓☓☓.ngrok.io -> http://localhost:5000
Connections
ttl     opn     rt1     rt5     p50     p90
0       0       0.00    0.00    0.00    0.00  

Forwardingの横にあるhttps://☓☓☓☓☓☓☓☓.ngrok.ioがlocalhostを外部公開したときのURL(port番号は5000)。これをwebhookURLとして使えばいい!

  • LINEbot関係の準備
    たくさん記事があるのでググってみてください

  • 環境変数設定
    環境変数は設定する。
    .envってファイルをプロジェクト配下につくっていつもの2つをLINEdevelopersからコピペしてくる(' とか " とか一切つけない、そのまま)。

    .envは環境変数を設定するファイルなのでGitHubとかにはpushしてはいけない。pushしないためには.gitignoreってファイルの使い方とかを調べてください。

.env
LINE_CHANNEL_ACCESS_TOKEN = ☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓
LINE_CHANNEL_SECRET = ☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓

main.pyを走らせる
ターミナルを2つ用意して、片方でもう一度ngrokを実行する。
(ngrokは実行するたびに異なったURLを紐つけるので、さっきと値は変わっているはず)。
それを実行したままで、LINEdevelopersのwebhookURLを

https://☓☓☓☓☓☓☓☓.ngrok.io/callback

に設定する(httpsであること!)。
最後にもう一つのターミナルでmain.pyを以下のようにして走らせる。

main.pyを実行
pipenv shell //仮想環境にin
pipenv run python3.8 main.py

うまくいけばサンプルが動く。

エラーの場合
Error: the command python3.8 could not be found within PATH or Pipfile's [scripts].
上記のようなエラーが出た場合は、
python3.8を自分の環境にあったものに変更するとよい。

main.pyを実行
pipenv run python main.py

pythonpython3 など。

  • 連続して動作確認する
    さらに、ngrokは実行したままでmain.pyを止める。
    つぎにmain.pyをかきかえて(例えば「OK」って返信するように)保存。
    再度、main.pyを実行して動作確認してみると「OK」が返ってくるはず!

まとめ

毎回herokuにpushしなくてもローカルで動作確認できた。
main.pyを 編集 ⇒ 実行 ⇒ 編集 するだけなので開発がスムーズ。

ただ、ngrokは実行するたびにURLを変更するのでngrokを止めるたびにLINEdevelopersのwebhookURLを変更しないといけない。
また、localhostを外部に公開ってセキュリティ的にまずい気もする(詳しいことはわかりません)。

以上!

参考記事

ngrokは安全か危険か、無料か有料か、などいろいろあるみたい。
webhook周りのアクションをローカルホストで検証
ngrokが便利すぎる
少しでも安全にngrokを使用する(Basic認証)

proken216
プログラミングを学びたい学生のためのコミュニティとして活動しています!
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした