ChatGPTに、コードを書いてみてもらいました。今回は、オフィスのIPが変わった際に通知をするプログラムを作成していきます。
コードの作成を依頼する
次のようにざっくりと依頼してみました。
オフィスのIPが変更されたときに通知するプログラムがほしい。cronで実行しようと思っています。コードを書いてもらえますか?
一般的に、日本語よりも英語のプロンプトのほうがアウトプットの精度がよくなります。ですので実際は上記を英訳しChatGPTに送っています。
「もちろんです! このタスクを実行するためのPythonスクリプトを以下に示します。」 という元気な返事と共に、下記のコードを出してくれました。
import requests
import smtplib
import time
# Replace with your email information
email_from = '[email protected]'
email_password = 'your-email-password'
email_to = '[email protected]'
# Replace with your URL that returns your IP address
url = 'http://ipinfo.io/ip'
# Initialize previous IP to an empty string
previous_ip = ''
while True:
# Get the current IP address
response = requests.get(url)
current_ip = response.text.strip()
# If the IP has changed, send an email notification
if current_ip != previous_ip:
message = f'Subject: IP address has changed\n\nNew IP: {current_ip}'
with smtplib.SMTP('smtp.gmail.com', 587) as smtp:
smtp.starttls()
smtp.login(email_from, email_password)
smtp.sendmail(email_from, email_to, message)
# Update previous IP
previous_ip = current_ip
# Wait for 5 minutes before checking again
time.sleep(300)
すばらしい。ものの数秒でこれを出してくれるのは、大幅に手間が減ります。
しかも、回答はまだ続いています。
このスクリプトは、指定されたURLへのGETリクエストによって、あなたの現在のIPアドレスを継続的にチェックし、IPアドレスをプレーンテキストで返すはずです。IPアドレスが変更された場合、指定された受信者に新しいIPアドレスを含む電子メール通知が送信されます。このスクリプトはその後、リクエストの頻度を減らすために、5分間待ってから再度チェックします。
このスクリプトを cron で実行するには、ファイルとして保存し (例:ip_notifier.py
) 、実行可能であることを確認します(chmod +x ip_notifier.py
) 。次に、希望する頻度でスクリプトを実行するように cron ジョブを追加します。例えば、1時間ごとにスクリプトを実行するには、crontab ファイルに次の行を追加します(crontab -e
)。
0 * * * * /path/to/ip_notifier.py
なんと丁寧な…と喜んでいましたが、いくつか気になる点が。
まず、cronで実行すると伝えていたのですがコード内には While True
との記述や確認のインターバルの設定があります。定期実行の仕組み自体はcronに一任できたほうがシンプルそうです。この旨を伝えると…
おっしゃるとおりです。cronで定期的に実行するのであれば、while True
ループは必要ありません。スクリプトを修正して、一回だけ処理を実行して終了するようにすればいいのです。以下は、このスクリプトの修正版です:
import requests
import smtplib
# Replace with your email information
email_from = '[email protected]'
email_password = 'your-email-password'
email_to = '[email protected]'
# Replace with your URL that returns your IP address
url = 'http://ipinfo.io/ip'
# Get the current IP address
response = requests.get(url)
current_ip = response.text.strip()
# Read the previous IP from a file, or initialize to an empty string
with open('/path/to/previous_ip.txt', 'r') as file:
previous_ip = file.read().strip()
# If the IP has changed, send an email notification
if current_ip != previous_ip:
message = f'Subject: IP address has changed\n\nNew IP: {current_ip}'
with smtplib.SMTP('smtp.gmail.com', 587) as smtp:
smtp.starttls()
smtp.login(email_from, email_password)
smtp.sendmail(email_from, email_to, message)
# Save the current IP as the previous IP in the file
with open('/path/to/previous_ip.txt', 'w') as file:
file.write(current_ip)
ループさせない記述にコードを書き直してくれました。
次に気になった点ですが、crontabの記述が、ファイルパスが記載されているのみでコマンドになっていません。この旨も指摘すると、
その通り、cronでPythonスクリプトを実行する場合、使用するインタープリタを指定する必要があります。cronのジョブは次のようになります。
0 * * * * /usr/bin/python3 /path/to/ip_notifier.py
usr/bin/python3
が他の場所にある場合は、あなたのシステム上の Python インタプリタのパスで置き換えてください。
と、さっくりと誤りを認識し修正してくれました。
このように、そのまま使うことはできないものの、ちょっとしたコードを書く際の初速はかなり出そうですね。
その他感じた点
その後もしばらくChatGPTと会話をして感じた点をご紹介します。
エラーメッセージ
ターミナルでエラーメッセージを受け取った際、
以下のエラーメッセージを受け取りました。私はどうするべきですか?
{エラーメッセージ}
と、丸投げをしてみました。エラーの背景、どうすべきかを説明してくれたため、従来的な検索エンジンで検索をかけるまえに検索の材料や取っ掛かりを集めることができます。
コマンドオプション
久しぶりに触るコマンドだと、どういったオプションが存在したのか忘れてしまいます。そこで当該コマンドのオプションを尋ねると、コマンド自体のhelpよりリッチに、また本家ドキュメントよりは簡潔に、といった具合のちょうどいい回答を得られました。
これらは、開発業務におけるChatGPTの用い方として使い勝手がいいかもしれません。
おわりに
これから、各ツールへのLLMチャットボットの統合が加速していくでしょう。
つい先日、まさしくIDEであるGhostwriterにチャット機能が搭載され、AIとペアプロができる状態になりました。
そう遠くない未来にターミナルにもそれが実装されることとおもわれます。
これから登場していく様々な応用例が、今から非常に楽しみです。