はじめに
旅行先から自宅に VPN 接続のために、Dynamic DNS の1つである「MyDNS.JP」を利用していますが、定期的にIPアドレスを通知する必要があります。
PC や Mac を買い替えるたびに、このIPアドレス通知の処理をコピーすることを忘れて、Webで調べて設定していました。
Gemini に聞けばすんだ
Web で調べる前に、Gemini さんに聞けばあっという間に解決。
以下、やりとりの要点。
Shell 作成依頼
macOSで以下の処理を実行する、zshファイルを作成してください。
・httpsでipv4.mydns.jp に接続する。
・ログインに使用するユーザーIDは「XXXXXX」とする。
・ログインに使用するパスワードは「YYYYYY」とする。
Gemini 回答
macOSで指定された条件(MyDNSのIP通知を想定)を実行するzshスクリプトを作成しました。
#!/bin/zsh
# 認証情報
USER="XXXXXX"
PASS="YYYYYY"
# MyDNSのHTTPS更新用URL
# ログインすることで送信元のIPアドレスが登録されます
URL="https://ipv4.mydns.jp/login.html"
echo "Updating MyDNS IP address via HTTPS..."
# curlによる実行
# -u: Basic認証 (ユーザー名:パスワード)
# -s: 進捗を表示しない(サイレント)
curl -s -u "${USER}:${PASS}" $URL
echo "\nUpdate process finished."
筆者補足
・「mydns_update.sh」のパーミッションは「700」、配置場所は「/Users/ユーザー名」
※ 「Documents」「Desktop」フォルダは、プログラムの実行が制限されている模様。
launchd 設定確認
mydns_update.sh を毎時 05分と35分の30分ごとに実行する、macOSのlunchd plistファイルを作成し、設定する方法を提示してください。
筆者補足
自宅のフレッツ光で IP アドレスが変わった場合に、MyDNS.JPへの反映時間を考慮して、更新タイミングは30分に1回としました。
Gemini 回答
macOSのlaunchdを使用して、指定されたスケジュール(毎時05分と35分)でスクリプトを自動実行するための設定手順をまとめました。
1. plistファイルの作成
以下の内容を jp.mydns.update.plist という名前で保存してください。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>jp.mydns.update</string>
<key>ProgramArguments</key>
<array>
<string>/Users/あなたのユーザー名/mydns_update.sh</string>
</array>
<key>StartCalendarInterval</key>
<array>
<dict>
<key>Minute</key>
<integer>5</integer>
</dict>
<dict>
<key>Minute</key>
<integer>35</integer>
</dict>
</array>
<key>StandardOutPath</key>
<string>/tmp/mydns_update.log</string>
<key>StandardErrorPath</key>
<string>/tmp/mydns_update.err</string>
</dict>
</plist>
2. 設定と実行の手順
ステップ1:plistファイルを配置する
ユーザー用のエージェント設定ディレクトリにファイルを移動します。
mv ~/Desktop/jp.mydns.update.plist ~/Library/LaunchAgents/
ステップ2:ファイルの権限を確認
plistファイルの権限が適切であることを確認します。
chmod 644 ~/Library/LaunchAgents/jp.mydns.update.plist
ステップ3:launchdに登録・開始する
以下のコマンドで、macOSにこの設定を読み込ませて開始します。
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/jp.mydns.update.plist
停止する場合
launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/jp.mydns.update.plist
3. 動作確認の方法
正しく登録されたか、また動いているかを確認するには以下のコマンドを使います。
・登録状況の確認:
launchctl list | grep mydns
(左側の数字が「0」であれば正常終了しています)
・手動で今すぐ実行テスト:
launchctl kickstart -p gui/$(id -u)/jp.mydns.update
・ログの確認: 実行結果やエラーは /tmp/mydns_update.log または /tmp/mydns_update.err に書き込まれます。
cat /tmp/mydns_update.log
まとめ
最初の質問で用途は伝えていないにもかかわらず、接続先 URL から MyDNS.JP の IP 通知用と判断したあたり脱帽でした。
調べ物をするときは、「生成AIにまず聞く」→「Webで確認する」で十分ですね。