今更ながら PowerShell に覚醒

最近仕事で PowerShell で色々とスクリプト書くことが増えてきました。

MS-DOS 時代からあるバッチファイルで頑張るのは厳しくなってるんですが、PowerShell は Windows 7 から標準装備(XP とか Vista にもあったのかも)。Unix のシェルと同様パイプが使えて、Unix 相当のコマンドは完備されており、しかもパイプにオブジェクトが渡せて Map / Filter を駆使して関数型プログラミングも可能。これまでちゃんと使おうと思わなかったのが不思議な感じです。

Windows 7 でも Update すれば PowerShell 4.0 が使えます。ISE (Windows PowerShell Integrated Scripting Environmentnt) でコード補完(IntelliSense)とフォント設定が効くようになるので可能な場合は Update しましょう。

Visual Studio でプロジェクト作るとファイル単位でのお手軽さが失われるし、デバッガも ISE の方がいい感じです。

Visual Studio のプロジェクトファイルを xpath 駆使して変換するための Tips を Qiita に投稿しました。

ファイルを列挙し、読み込んで処理するのは超簡単で XML も xpath とプロパティで簡単に操作できるので非常に生産性が高いです。.NET のクラスも使えるので C# で書いてコンパイルしてアセンブリ配置するとか不要。OS に統合されたスクリプト言語の強みですね。

こういう自動化にぴったりです。

プロダクトコードに疲れた時にシェルを書くのは癒しになります。

最終的に 300行ぐらいのツールになりました。

新しい現場では、Mattermost っていう Slack クローンを導入していて、Jenkins のビルド結果を通知する Bot とかがあるのですが、Excel ファイルを監視して通知してくれる Bot なども PowerShell で作成したりしています。

Mattermost: Open Source, Self-hosted Slack Alternative

最近の PowerShell はコマンドヒストリをファイルに保存できたりします。キーバインドについてはサードパーティ製のツールに期待することになりそうですが、ps1 ファイルを ISE で実行するのが標準的な使い方なので、コマンドプロンプトを置き換える存在にはならないかもです。

ちなみに Windows 10 Anniversary Update では Ubuntu サブシステムが使えるようになり Bash などが普通に使えるようになりますが、これは、PowerShell を置き換えるものにはならないと思っています*1

PowerShell は Windows のファイルシステムとか .NET ライブラリとの親和性が高く、Windows での開発や自動化に適しています。Jenkins にも PowerShell プラグインが提供されており、ビルドプロセスに組み込みことも簡単です。

[追記]

PowerShell はプラットフォームとの親和性を活かして、IIS とか Azure の設定を自動化する Infrastructure as Code の基盤としての側面もあります。Chef などのツールに該当するものですね。実行環境の構築に有効活用していきたいところです。

www.powershellmagazine.com

*1:Windows で Node とか Rails 開発したい人向けのソリューションだと考えてます