はじめに
学生向けハッカソン/ワークショップの題材にLINEBotをつかってましたが、Heroku無料枠廃止をうけて環境見直す機会に、サンプルをリライトしようということでFastAPI+GoogleColaboratory版を作成します。
- ハッカソンやちょっとしたプロトタイプ作成向けにクレジットカード登録不要で無料で使える環境を
- いままであまり触ってないけど今後伸びそうなFastAPIを使う
- LINEDevelopersの登録方法や使い方、ngrokの使い方については割愛
できあがり
送られたメッセージをそのまま返すエコーbotです。自分のドライブにコピーして、トークンとシークレットを設定して使ってください。
# ngrokのauthtoken
NGROK_AUTHTOKEN = '入力して下さい'
# LINE Bot のチャンネルアクセストークン
LINEBOT_ACCESS_TOKEN = '入力して下さい'
# LINE Bot のチャンネルシークレット
LINEBOT_SECRET = '入力して下さい'
いくつか説明
ngrok
最初に起動したらあとはそのままでOK。
無料の場合は張れるトンネルがひとつだけなので、トンネルを切断したりurlを変更したくなったら、ランタイムをいったん終了してください。
またブラウザから閲覧するとき、初回は確認画面が挟まれるのでVisitSiteで画面へ移動してください。
!pip install pyngrok
!ngrok authtoken $NGROK_AUTHTOKEN
from pyngrok import ngrok
from pyngrok.conf import PyngrokConfig
import os
os.system('kill -9 $(pgrep ngrok)')
ngrok_tunnel = ngrok.connect(addr='127.0.0.1:8000', pyngrok_config=PyngrokConfig(start_new_session=True))
print (ngrok_tunnel)
uvicorn
先にngrokを起動して、後からuvicornの起動でOK。ngrokのトンネルの設定とポート番号をあわせてください(今回の例では8000)。
セルがずっと実行中になるので、終了する場合は選択して実行を停止してください。
!pip install uvicorn nest_asyncio
import uvicorn
import nest_asyncio
# 設定や動作確認で使用するURLをここで表示しておく
print('public_url : ' + ngrok_tunnel.public_url + '/')
print('health_check_url : ' + ngrok_tunnel.public_url + '/health')
print('doc_url : ' + ngrok_tunnel.public_url + '/docs')
# サーバ起動
nest_asyncio.apply()
uvicorn.run(app, port=8000)
ここまでの感想
- コード量が少ないのはたいへん便利
- FastAPIのドキュメント自動生成も便利
今後の予定
- uvicornからgunicornへ変更
- databaseがわりのgooglespreadsheet連携サンプル
- 適当な外部apiの利用サンプル
参考記事