Pythonで自分にSMS通知を送る再利用可能なモジュールを作成する

この記事では、時間のかかる処理が完了したときなどに、自分自身のスマートフォンにSMSで通知を送るための、再利用可能なPythonモジュールの作成方法を解説します。Twilio APIサービスと、認証情報を安全に管理するための環境変数の利用が中心となります。


目次

1. 準備:Twilioアカウントとライブラリ

この機能を実現するには、Twilioのアカウントが必要です。公式サイトで無料アカウントを登録し、以下の3つの情報を取得してください。

  • Account SID
  • Auth Token
  • Twilio Phone Number(SMS送信元の電話番号)

次に、twilioライブラリをインストールします。

pip install twilio

2. 安全な認証情報管理:環境変数

Account SIDAuth Tokenのような機密情報を、スクリプト内に直接書き込む(ハードコーディングする)のは非常に危険です。代わりに、環境変数としてOSに設定し、プログラムから読み込むのが安全で推奨される方法です。

環境変数の設定例(macOS/Linux):

export TWILIO_ACCOUNT_SID='ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
export TWILIO_AUTH_TOKEN='your_auth_token'
export TWILIO_PHONE_NUMBER='+1234567890'
export MY_PHONE_NUMBER='+819012345678'

Windowsでは「環境変数」のシステム設定から同様に設定します。


3. SMS送信モジュールの作成

notify.pyという名前で、SMS送信機能を持つモジュールファイルを作成します。このモジュールは、環境変数から認証情報を読み込み、メッセージを送信する単一の関数send_sms()を定義します。

# notify.py

import os
from twilio.rest import Client

# 1. 環境変数から認証情報を読み込む
ACCOUNT_SID = os.getenv('TWILIO_ACCOUNT_SID')
AUTH_TOKEN = os.getenv('TWILIO_AUTH_TOKEN')
TWILIO_NUMBER = os.getenv('TWILIO_PHONE_NUMBER')
MY_NUMBER = os.getenv('MY_PHONE_NUMBER')

# 2. SMSを送信する関数を定義
def send_sms(message_body):
    """指定されたメッセージを環境変数MY_NUMBER宛にSMSで送信する。"""
    
    # 認証情報が設定されているか確認
    if not all([ACCOUNT_SID, AUTH_TOKEN, TWILIO_NUMBER, MY_NUMBER]):
        print("エラー: 必要な環境変数が設定されていません。")
        return

    try:
        client = Client(ACCOUNT_SID, AUTH_TOKEN)
        message = client.messages.create(
            body=message_body,
            from_=TWILIO_NUMBER,
            to=MY_NUMBER
        )
        print(f"メッセージを送信しました。SID: {message.sid}")
    except Exception as e:
        print(f"SMS送信中にエラーが発生しました: {e}")


4. 作成したモジュールの使い方

作成したnotify.pyは、他のPythonスクリプトからimportして簡単に利用できます。これにより、様々なプログラムからSMS通知機能を呼び出せるようになります。

例えば、別のファイルmain_task.pyで、時間のかかる処理の完了を通知するには以下のようにします。

# main_task.py

import time
import notify # 作成したモジュールをインポート

print("時間のかかる処理を開始します...")
# 10秒かかる処理をシミュレート
time.sleep(10)
print("処理が完了しました。")

# 完了通知をSMSで送信
notify.send_sms("データ処理が完了しました。")

このmain_task.pyを実行すると、10秒後にnotify.pysend_sms関数が呼び出され、自身のスマートフォンにSMSが届きます。

まとめ

通知機能を独立したモジュールとして作成することで、メインのプログラムロジックをきれいに保ちつつ、様々なスクリプトで通知機能を再利用できます。また、Account SIDAuth Tokenなどの機密情報を環境変数として外部で管理することは、セキュリティ上非常に重要なプラクティスです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次