最近仕事で 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 2015 では、PowerShell プロジェクトってのが作れる(2013 にもあるかもだけど)。デバッグが C# みたいにできるけど、もとからある ISE って環境の方が REPL 的で使い勝手がいい。
— MH (@kondoumh) 2016年6月3日
Visual Studio でプロジェクト作るとファイル単位でのお手軽さが失われるし、デバッガも ISE の方がいい感じです。
PowerShell で xpath 使って [cs|vb]proj ファイル読み書きしたい時 [XML] on @Qiita https://t.co/LvEaYWSG2x
— MH (@kondoumh) 2016年6月4日
Visual Studio のプロジェクトファイルを xpath 駆使して変換するための Tips を Qiita に投稿しました。
PowerShell で xpath 駆使して XML 変換しまくりの1日だった
— MH (@kondoumh) 2016年6月10日
ファイルを列挙し、読み込んで処理するのは超簡単で XML も xpath とプロパティで簡単に操作できるので非常に生産性が高いです。.NET のクラスも使えるので C# で書いてコンパイルしてアセンブリ配置するとか不要。OS に統合されたスクリプト言語の強みですね。
Redmine のチケットにコミットコメント反映されないなあって思ってたら、リポジトリのチェンジセットを手動でフェッチしないといけないのか。
— MH (@kondoumh) 2016年6月15日
Win の bitnami Redmine なので PowerShell ブラグインで定期的にフェッチする Jenkins ジョブ作った。 https://t.co/p1xDmyveLA
— MH (@kondoumh) 2016年6月15日
こういう自動化にぴったりです。
最近若干 PowerShell 厨ぎみ
— MH (@kondoumh) 2016年6月15日
プロダクトコードに疲れた時にシェルを書くのは癒しになります。
PowerShell 経験3日で、90行ぐらいのツールをリリースしました。
— MH (@kondoumh) 2016年6月10日
最終的に 300行ぐらいのツールになりました。
新しい現場でも PowerShell 厨がいました。いい傾向だ。あとは PowerShell 普段使いするため、コマンドヒストリと Emacs / Vim ライクなキーバインド実装してほしい。NYAOS とか Putty が対応してくれてもいいい。
— MH (@kondoumh) 2016年7月6日
新しい現場では、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 などのツールに該当するものですね。実行環境の構築に有効活用していきたいところです。
*1:Windows で Node とか Rails 開発したい人向けのソリューションだと考えてます