dipper[DDNS_IP_UPEER]のバージョンアップ作業

自作DDNSシェルスクリプト[dipper]の機能拡張作業をここ最近めちゃめちゃ頑張りました!
いろいろと躓いたりで書きたいことはあったんですが、
ありすぎて書きづらくなりました(笑)

GitHub - smileygames/dipper: DDNSにipを自動でupdateするシェルスクリプト

DDNSにipを自動でupdateするシェルスクリプト. Contribute to smileygames/dipper development by creating an account on GitHub.

最初はCloudFlareの対応だけだったんですが、ついでということでメール通知機能とIPキャッシュ機能を追加したんです。
これが結構大変ではあったんですが、ネット情報とChatGPTさんのおかげで何とか動くようにはなりました。
その結果バージョン1.20でとりあえず最初にやりたかったことは出来ました。

ただ、思ったよりもメモリーの使用量が大きく
ddcliantというメジャーなDDNSクライアントの2/3程度になってしまいました。
こっちは2つしかDDNSのサービスに対応していないというのに。
ddcliantはかなり多くのサービスに対応しています。

v1.20での大まかな構成は4つの無限ループプロセスで構成していました。
3つのループはそれぞれ指定時間毎にサービスを実行するようにしていて、
まぁタイマーとして構成してバックグラウンドプロセスで実行していたんですが、
一つのタイマーで3MB程度メモリーを使用していました。
でフルのサービス(IP定期アップデート・IP更新時アップデート・エラーメール定期通知)を使用すると10.4MB使用してました。

メール通知機能とIPキャッシュ機能を実装する前は7MB程度だったのでそれくらいに戻したいと思ったわけで。。。

ここで結構前にDDNSクライアントスクリプトの作成情報を調べていた時に、
キャッシュファイルの作成時間から設定時間を超えたら処理を実行するという実装法をしていた人が居たことを思い出し、
今キャッシュファイルの機能を実装したのでそっちでやったらどうなるかを検証することにしました。

メモリーを食うけどv1.20の構成はリアルタイムOSっぽくて好きではあったんですが、
一応マルチタスクになっているはずだし。
まぁやるだけやってみようってことで実装しました。

要はループを1つにしてキャッシュファイルの作成時間をチェックし、設定時間を超えたら処理を実行するという構成です。
正直に言うとキャッシュファイルを使うこと自体あまり好きではないのですが、
まぁダメもとでやるだけやってみることに。

メインの構成を大幅に変更したことで、まぁバグが出るわ出るわw
処理内容が変わったことで関数名やスクリプトファイル名、コンフィグの内容なども変更があり、
コーディングミスしまくった(´;ω;`)

テストも感でやってる実機テストなんで後から思い付きでバグに気づいたり。
VSCodeでシェルスクリプトのデバッグも出来るようにはしているけども。
親プロセスしか追えないから、実機デバッグとほぼ変わらん。
そんなこんなで毎日テストの日々でした(´;ω;`)

今回自動テストなるものもチャレンジしては見たのですが
なかなか思うようには出来ず。
この辺がシェルスクリプトのデメリットなのかもなぁ…と思いながら頑張りました。
とりあえず異常テストだったらテストの自動化は出来そうなのでそこを今頑張ってはいますが。

そんなこんなで頑張った結果
約35%ほどメモリーの使用量を削減できました。
もちろん機能は変わらず。
ただ結果としてシングルタスク処理になってしまいました。
以前はそれぞれの処理をそれぞれ独立してループさせていたので非同期でも問題なかったんですが、
今回は1つのループで3つの処理を管理する都合上、非同期にすると重複起動の危険性があったので却下。
まぁこのスクリプトでやっていることはそんな複雑な処理じゃないので、
本来シングルタスクのほうが良かったと後になって気づいたんですが、ロマンがない(;´Д`A ```

その辺は何かいい案が思いついたらやってみることにします。

そんなこんなでものすごくシェルスクリプトの勉強にはなったし、ChatGPTの便利さに気づけたここ最近でした。
ChatGPTとはよく戦いました。(笑)

でも客観的にソースを見てくれるので、ソロ開発にはものすごく有用でしたね。
プログラム仕様書とか書くの苦手なので、そこはほぼChatGPT任せでした。

そもそもこだわって作ると、更新が大変になって放置されてしまうので、
AIに書いてもらって、多少情報が足りないとしても、
簡単に仕様書の更新ができて、ちゃんとコミットされていた方が何倍もましですからねぇ。

ただテストに関してはいまいちでした。
テストの自動化もChatGPT任せにできたら本当に楽なんですけどね。

そんな感じで、とりあえずまとまりもなく書いてみました。
書いておかないと、いつまでも書かずに忘れてしまいそうだったので。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です