この記事では、時間のかかる処理が完了したときなどに、自分自身のスマートフォンにSMSで通知を送るための、再利用可能なPythonモジュールの作成方法を解説します。Twilio
APIサービスと、認証情報を安全に管理するための環境変数
の利用が中心となります。
1. 準備:Twilioアカウントとライブラリ
この機能を実現するには、Twilio
のアカウントが必要です。公式サイトで無料アカウントを登録し、以下の3つの情報を取得してください。
Account SID
Auth Token
Twilio Phone Number
(SMS送信元の電話番号)
次に、twilio
ライブラリをインストールします。
pip install twilio
2. 安全な認証情報管理:環境変数
Account SID
やAuth 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.py
のsend_sms
関数が呼び出され、自身のスマートフォンにSMSが届きます。
まとめ
通知機能を独立したモジュールとして作成することで、メインのプログラムロジックをきれいに保ちつつ、様々なスクリプトで通知機能を再利用できます。また、Account SID
やAuth Token
などの機密情報を環境変数として外部で管理することは、セキュリティ上非常に重要なプラクティスです。