7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

フリューAdvent Calendar 2024

Day 13

サービス終了するLINE Notifyの代わりにDiscordを使ってみた

Last updated at Posted at 2024-12-12

この記事はフリューアドベントカレンダー2024の記事になります。


LINEを使って通知を送信できる「LINE Notify」のサービス終了がアナウンスされました。
サービス終了の詳細はこちら

このサービス終了を受けて、代替手段として Discord を利用することにしました。
本記事では、Pythonを用いた実装方法やLINE Notifyとの機能の違いについて、わかりやすく解説します。

LINE Notifyとは

LINE NotifyはアプリやWebサービスからの通知をLINEで受け取れるサービスです。
外出中でもスマホで簡単に確認できるので通知手段として非常に使い勝手がよく、しかも無料で利用できるため個人の開発者やサービス運営者にとって重宝されているサービスではないかと思います。

以下は私の活用例の一つです。

  • インターホンが押されたら通知

自宅のインターホンが押された際に、LINEに通知を送信する仕組みを構築していました。

image.png

LINE Notifyに代わるサービス

LINE Notifyのサービス終了に伴い、代替となるサービスをいくつか検討しました。
以下は候補として挙がったサービスです

  • LINE Messaging API
  • Discord
  • Slack
  • Teams

他にも選択肢はありますが、できるだけ手間をかけずに実装したいという観点から、既にスマホにアプリがインストールされているサービスを中心に検討しました。


LINE Messageing API

LINE Notifyと利用感が大きく変わらないのは、LINE Messaging APIです。

公式サイト

このAPIは月200通までは無料で利用可能ですが、それ以上になると有料プランが必要です。

無料枠で十分であれば、引き続きLINEプラットフォームを利用するのが良いと思います。
しかし、私は月200通を超えるのでコスト面から見送りました。


Discord

Discord は、無料で利用できるインスタントメッセージングサービスです。

普段から利用しており、スマホにもアプリをインストールしていたこともあって、試してみることにしました。
DiscordのAPIは無料で利用可能で、手軽に導入できる点が大きな魅力となります。
今回の記事では、このDiscordを活用した通知の実装方法について解説します。


Slack,Teams

SlackTeams も候補に挙げました。
実現は可能ですが以下の理由から利用を見送りました

  • 個人の通知利用では機能が過剰で、やや使いにくそうな印象
  • 業務でこれらのツールを利用しており、プライベートとの切り替えが手間そうに感じた

そのため、今回は候補から外しました。


LINE NotifyからDiscordに切り替えてみてどうだったか

詳細を説明する前に、結論を簡単に述べておきます。
Discordは通知機能として問題なく利用でき、実装も簡単なので、すぐに切り替え可能です。
私は実際に通知をDiscordで受け取る形に変更しています。
ただし、LINE Notifyと比較するといくつか気になる点があるため、それについても紹介します。


気になる点

  1. スマホの通知バナーからDiscordを開いた際の遅延
    Discordでは、スマホの通知バナーをクリックしてアプリを開くと、通知内容が表示されるまでに 1秒程度の遅延を感じます。
    この遅延により、似たような通知が続く場合には前のメッセージが今回届いたものだと勘違いしてしまうことがあります。

  2. 通知メッセージの視認性
    1番と似たような話ですが、LINE Notifyでは通知が1メッセージごとに吹き出し形式で表示されるため、視覚的にわかりやすい構造になっています。
    一方、Discordでは投稿が連続すると以下のように1つのメッセージに見える場合があります。
    image.png
    この例では、2つの通知メッセージが連続して投稿されていますが、瞬間的に2つの通知であることに気づきにくい点がLINE Notifyとの違いです。
    とはいえ、これは通知内容や利用者の好みによる部分も大きいと思います。


総評

無料で利用でき、最低限やりたいことを実現できる点から、DiscordはLINE Notifyの代替サービスとして十分と判断しました。
また、Discordではチャンネルを分けることで、通常の通知、エラー系の通知などシーンに応じた通知をまとめられる点が強みかなと感じました。
先ほど述べた気になる点もありますが、実装元の通知の仕組みを大きく変更することなく切り替えが可能なため、コストを抑えつつスムーズに移行したい方にはおすすめです。


Discordで通知を実現する

では、内容に入ります。
Discordで通知を実現するには、LINE Notifyに比べて少し手間が掛かりますが、難しい内容ではありません。
具体的には、以下の手順で通知を行います。

  1. DiscordのBOT(アプリ)を作成する
  2. Discordの通知用サーバーを作成する
  3. 作成したサーバーのテキストチャンネルにBOT(アプリ)を参加させる
  4. BOTを介して通知を送信する

「BOTを使うなら、応答アプリをサーバーにホストする必要があるのでは?」と思うかもしれません。
しかし、通知を送るだけであれば APIを呼び出すだけで実現可能です。
この点において、実装レベルでの使用感はLINE Notifyとほとんど変わりません。

順を追って説明します。

実装手順

1.Botアプリケーションの設定

Discord Developer Portalにアクセス
まず、以下のURLからDiscord Developer Portalにログインします
Discord Developer Portal

ログイン後、New Applicationを選択します

image.png

アプリケーションの作成

  1. アプリケーション名を入力します(例:NOTIFICATION-TEST)
  2. 利用規約とポリシーに同意するチェックをしてCreateします

image.png

Botの作成と設定

  1. サイドメニューからBotを選択します

  2. USERNAME欄でBotの名前を設定します、これがDiscord上で表示される名前です(例:通知くん)
    image.png

  3. サイドメニューからInstallationを選択し、以下の設定を行います

  • User Installのチェックを外します
  • Guild InstallScopeとして「bot」を追加します
  • Permissionsに「Administrator」と[Send Messages]を追加します

今回はテストとして権限をAdministratorにしています、個人チャンネル以外への通知やBotとして受け答えさせる場合には然るべき権限にしてください

image.png


2.通知を行うチャンネルを作成

次に、通知を送信するDiscordのテキストチャンネルを作成します。

サーバーの作成

  1. Discordにログインして、サーバーを追加を選択します
    image.png

  2. オリジナルの作成を選択します
    image.png

  3. サーバーの規模を選択します、今回は自分と友達のためを選択します
    image.png

  4. サーバー名を入力し、新規作成をクリックします
    image.png
    5.サーバーが作成されます
    image.png


3.Botアプリを通知用のチャンネルへ追加する

Botアプリインストールリンクを取得

  1. Discord Developer Portalのアプリケーション設定ページに戻ります
  2. Installationを選択し、Install Linkに表示されているURLをコピーします
    image.png
  3. コピーしたリンクをブラウザに貼り付けて開きます
  4. 以下のようなインストール画面が表示されるので、先程追加したサーバー名を選択して はい をクリックします
    image.png

Bot権限の確認と認証

  1. Botアプリケーションで設定した権限が正しく表示されていることを確認します

  2. 認証をクリックして、インストールを完了します
    image.png

  3. インストール完了
    image.png

Botの追加確認

インストールが完了すると、Botが通知用のテキストチャンネルに追加されているはずです。

image.png

これでサーバー側の設定が完了しました。


4.BOTを介して通知を送信する

通知元の実装

ここでは、DiscordのBotに通知を送信するためのPythonコードを実装します。
動作確認は以下の環境で行っています。

環境 バージョン
OS Windows 11
Python 3.11.9

必要なライブラリのインストール
コードの実行にはrequestsライブラリが必要です。
以下のコマンドでインストールしてください

pip install requests

送信クラスの作成
以下は、通知を送信するためのシンプルなクラスです。
また必要最低限のエラー処理しか実装していないので、必要に応じて作成してください。

discode_send_message.py
import requests

class DiscordSendMessage:

    __default_token : str = 'your_default_token' # アプリケーションのトークンを設定する
    __default_channel_id : str = '1234567890'    # テキストチャンネルのIDを設定する

    def __init__(self, token: str = __default_token, channel_id: str = __default_channel_id):
        self.__token = token
        self.__channel_id = channel_id
        
    def send_message(self, message: str):
        url = f"https://discord.com/api/v10/channels/{self.__channel_id}/messages"
        headers = {
            "Authorization": f"Bot {self.__token}",
            "Content-Type": "application/json"
        }
        data = {
            "content": message
        }

        response = requests.post(url, headers=headers, json=data)
        
        if response.status_code == 200:
            print(f"送信完了: {self.__channel_id}")
        else:
            print(f"送信失敗: {response.status_code}, {response.text}")

トークンの取得と設定

  1. Discord Developer Portalのアプリケーション設定ページにアクセスします
  2. BotメニューのReset Tokenをクリックします
    image.png
  3. 自身のDiscordのログインパスワードを入力します
    image.png
  4. トークンが発行されるので、そのトークンをコード内の__default_token に設定してください

トークンのセキュリティに注意
この取得したトークンは外部に漏らさないよう注意してください。
サンプルコードでは直接コードに記載していますが、実際の運用では環境変数などから取得するようにしましょう。

4. チャンネルIDの取得と設定

  1. Discordのサーバーにあるテキストチャンネルを右クリックし、IDをコピー を選択します
    image.png
  2. 取得したチャンネルIDをコード内の __default_channel_id に設定してください

5. メインコードの作成
以下のコードで送信クラスを呼び出し、Botに通知を送信します。

main.py
from discord_send_message import DiscordSendMessage

if __name__ == "__main__":
    discord_utility = DiscordSendMessage()

    # 完了通知をDiscordへ送信
    discord_utility.send_message("通知のテストです。")

このコードを実行すると、メッセージが指定したテキストチャンネルに送信されるはずです。
image.png

5.参考リンク

DiscordのAPIリファレンスについては、以下のリンクを参考にしてください

さいごに

いかがでしたでしょうか?
Discordでの通知システムは、サーバーにBotアプリケーションを設置する手間があるだけで、基本的な使い勝手はLINE Notifyとほとんど変わらないと感じていただけたのではないでしょうか。

また、Discordの「Message Components」を活用すれば、通知だけでなくUIを設置してインタラクティブな操作を行うことも可能です。
将来的には、Discordからの入力を受けて遠隔実行など、より高度な機能に挑戦してみようと考えています。
この記事が、LINE Notifyの代替を探している方の参考になれば幸いです。

7
3
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
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?