AIにコードを書いてもらった。〜IP変更通知プログラム〜

記事を共有:

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とペアプロができる状態になりました。

そう遠くない未来にターミナルにもそれが実装されることとおもわれます。

これから登場していく様々な応用例が、今から非常に楽しみです。

記事がお役に立ちましたらぜひお知り合いに共有ください🤖🫶🧠

コメントを書く

コメントが入力されていません!
ここにあなたの名前を入力してください
Captcha verification failed!
Captchaユーザースコアが失敗しました。お問い合わせください!

人気記事

関連記事

不動産業界でのChatGPT活用事例

その汎用性の高さから、様々な業界で注...

ChatGPTの始め方と使い方を解説【画像つき】

この記事では、AIチャットボットCh...

AGI (Artificial General I...

はじめに AGIとは A...