183
207

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 3 years have passed since last update.

サーバー立てずGitHubだけでLINEbotを動かす【Python】

Last updated at Posted at 2021-02-07

今までLINEbotを作るときはVPSやherokuでサーバー立てたりしてその上で動かしていました。
しかし、GitHub Actionsを使えばGitHub上にpushするだけでLINEbotを動かすことが可能です。
今回は一方的にメッセージが届くbotの作成について一連の流れを説明します。

追記2021/02/10

※注意事項
GitHub Actionsの利用規約は確認しましょう。
https://docs.github.com/en/github/site-policy/github-additional-product-terms#a-actions-usage
GitHub Actionsを利用することでサーバーレスが可能になりますが、GitHubに負荷をかけてしまうことになります。そのため、リポジトリのプロジェクト運用に関係ないのであればサーバーを立てるもしくはサーバーレスのサービスを利用することをおすすめします。

やること

  • PythonでLINEメッセージを送信する
  • GitHub上でトリガーを元にLINEbotを動かす

環境

Python
Messaging API
GitHub

PythonでLINEにメッセージを送信する

事前準備

  • LINE Developersからチャネルの設定(詳細は割愛します)
  • Messaging API SDKインストール
pip install line-bot-sdk
  • python-dotenvのインストール
pip install python-dotenv

python-dotenvを使って環境変数を設定する

必要ライブラリインポート

  • envファイル用
setting.py
import os
from os.path import join, dirname
from dotenv import load_dotenv

.envに後述で利用するMessagin APIのアクセストークンとユーザーIDを設定してsetting.pyでそれらを取得します。

  • メッセージ用
message.py
from linebot import LineBotApi
from linebot.models import TextSendMessage
import setting

メッセージを送る

message.py
# setting.pyで取得したアクセストークンとユーザーIDを代入
CHANNEL_ACCESS_TOKEN = setting.CHANNEL_ACCESS_TOKEN
USER_ID = setting.USER_ID
line_bot_api = LineBotApi(CHANNEL_ACCESS_TOKEN)

def push():
    # LINEで送る内容を記述
    messages = TextSendMessage(text="おはよう〜〜〜〜")
    line_bot_api.push_message(USER_ID, messages=messages)

# 実行!
push()

GitHub上でトリガーを元にLINEbotを動かす

記述してきた内容をコミットし、GitHubにプッシュします。
GitHub上でActionsタブを選択し、ymlファイルにトリガーや実行する処理を記述していきます。
https://docs.github.com/en/actions/reference/events-that-trigger-workflows#manual-events
トリガーにworkflow_dispatch というイベントが実装されたことによって手動で実行することが可能になったようです。

スクリーンショット 2021-02-07 9.43.11.png

今回はcronを指定して、定期的にメッセージを送るようにします。
cronについては下記を参考に設定しました。
crontabコマンドについてまとめました 【Linuxコマンド集】
※注意 
GitHub Actionsのcronの時刻はUTCなので、日本時間に合わせるために日本時刻から-9時間で設定する必要があります。

# 10分毎にメッセージを送信
on:
  schedule:
    - cron: '*/10 * * * *'

10分間隔にしていましたが、実際に届いたメッセージは10~20分の間でランダムになってました。謎
スクリーンショット 2021-02-07 9.57.58.png

参考

183
207
4

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
183
207

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?