今回の話題は「Windows PowerShellでのソフト開発のきっかけ」です。
私は、ネットワークに関連するソフト開発も行います。もともと、ソフト開発は大好きです。昨年から取り組んだ仕事で、LinuxとWindowsを連携した、データ伝送の仕組みを開発しました。
Linux側は100%bashスクリプトで開発し、Windows側は一つの小さな機能モジュールをC言語で、主体となる部分はWindows PowerShellで開発しています。
Windows PowerShellでの開発はそれまで経験無しです。最初はWindows PowerShellでの開発ではなく、busybox.exeというWindows上で走る極めてコンパクトなLinux上で開発を始めました。bash, cur, wgetなど慣れたLinuxツールの活用が目論見でしたが、すぐに行き詰まりました。busybox.exe上でのwgetもcurlもお客様先のFireWallを通過できない可能性がでてきたのです。「持ち込み禁止」の可能性ありです。
そこでWindows PowerShellを使っての方法に切り替え、通信は全てWindowsが備える機能で行いました。
Windows PowerShellでの本格的な通信ソフトの開発は初めてなので、まだコードが綺麗ではありません。開発後の機能追加もあり、ちょっとコードが膨らんでいます。
ただ、バグなして動いていたコンパクトなソフトの自然な拡張なので、根本的に書き換えるようなことはしません。
Windows PowerShellはコマンドレットと呼ばれるコマンドを使います。これまでのコマンドと大きく違うのは、「コマンド名が長い」ことです。ただ、コマンド名はとてもよく体系化されているので、慣れてくると必要な機能を実現するコマンドレットの名前が推定できるほどです。またコマンドレットはオブジェクトを返すので、多くの関連情報を知ることができます。
コマンドレットの扱いには、例題を見て少しずつ慣れました。条件判断も同様です。WindowsのOS機能を使うには、C#等コンパイル言語で書き下すより圧倒的に保守性が良くなります。
今はWindows Terminal(Preview)に統合されたWindows PowerShell環境に移行したので、コマンドライン・シェルも使いやすくなりました。