VBScriptのコードが冗長な言い訳
前回まで監視のスクリプトを書いてきたわけですが、このシリーズのVBScriptのコードはsendMail.vbs以外でかなりのダブりがあり、無駄があります。
このダブりをなくす方法がないわけではないのですが、あえて無駄な状態で公開しました。
その訳を説明します。
「VBScriptのクラスは継承の機能を持たない」
全く同じ関数/サブルーチン(以下関数)や同名同目的の関数があるので、抽象クラスを作って継承して作るのが妥当に思われるかもしれません。
VBScriptでもクラスは作れますが、継承が出来ないのです。
検索すると「擬似的にクラスの継承のようなことをする」やり方もありますが、この程度の規模のコードでそれを採用すること自体かなり冗長です。
「単体で使いやすく」
取り回しの問題です。sendMail.vbsだけは外部ファイル化してますが、それ以外は出来るだけファイル単体で使いやすくしたかったのです。
また、分離することで、内容を変更した場合の影響範囲がわかりやすくなります。
「sendMail.vbsだけ外部ファイル化」した訳
共通の関数の中で、環境依存の変数が必要なのはログファイルのディレクトリだけなのに比べて、sendMailだけは環境依存変数が特に多く、最大8項目あります。
これを個々に持たせるのは流石にアレですよね。
まぁ、ログディレクトリを個々に持たせてるのもアレなんですが。
今後の発展
直近で予定しているものはないですが、発展させるとしたら・複数ファイルになるけどやっぱりクラス化して冗長をなくしつつ計量化。
・もっとスマートにWMIとか使う。(Win32_Service)
・いやそろそろPowerShellで出来るところはそっちに移行。
とかですかね。
このコードを書いていたころはまだクライアントもWindowsXPだったので、デフォルトで入っていないPowerShellは使わない方針でしたが、XPのサポートも来年で切れ、ほとんどすべてのWindowsにおいて標準でPowerShellが入っている環境になります。
無限ループしても警告してくれないし、クラスの継承はできないし、例外処理もまともにできないし、色々かゆいところに手が届かないけど、
デフォルトの環境(メモ帳)でチョチョっと編集でき、デフォルトの環境で実行でき、事前コンパイルが要らず、一応クラスも書ける。
超絶に中途半端だけどお手軽なVBScriptはまだまだ活用するシーンがあるんではないかと思っておる次第です。
今後はVBScriptなエントリが増えるかもしれないです。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。