PowerShellスクリプトを書く時のエディタには、いくつか人気のものがあります。
- PowerShell ISE
- Visual Studio
- PoweGUI
PowerShell Plusやいくつか他にも利用者がいるものはあるのですが、いずれも完成度が上記より低い印象が強いため、3つに絞っています。*1
いずれもインテリセンスやコードハイライト、REPL環境が当然ついています。
エディタを選択する時、多くの方にとっては
- 問: PowerShell Script/Moduleを書くときのエディタは?
- 答: PowerShell ISE
かもしれません。しかし私の場合はVisual Studio
となります。
ではなぜPowerShell Script/ModuleをVisual Studioで書くのか、ISEとの違いを見てみましょう。
PowerGUIは、あ、察し。
PowerShell ISE
Windows 7以降標準で搭載されているISE - 統合スクリプト環境 *2 です。
PowerShell 3.0からはその見た目も進化して使いやすくなっています。
読み方は、ISE => アイスです。
メリット
いくつか考えてみましょう。
- OS標準
- コード補完とインテリセンス
- コードハイライト
- モジュールによる機能拡張
- RunSpaceの分離
- Snippetの拡張
- リモート処理のメニュー化
- デバッグ機能
つまり、 OS標準で使えてモジュールやプロファイルでの拡張、標準の拡張機能が優れている。これが最大のメリットです。当然ですが、新しいバージョンのPowerShellにも対応しており、例えばDSCキーワードやインテリセンスも最も対応できています。
完成度も高く、Windows 7/2008 R2以降ならどこでも使えるので、PowerShellを初めて使う人にとっても、慣れた人にとってもお世話になるでしょう。
コード補完とインテリセンス
なしにはコーディングできませんね。メモ帳とかムリポ。
関数や変数、型などで、Tab
を押すと既知のものは自動的にコード補完されます。
インテリセンスは、 Verb-Nounの-
タイミングかCtrl + Spaceで表示されます。
Powershell.exeにはコード補完はあっても、インテリセンスでのヒントはないのでつらいです。
PowerShellは入力文字が長い? コード補完もインテリセンスも使ってないことがバレバレなので出直しましょう。インテリセンスを前提としているのです。
コードハイライト
Cmdlet/Functionと変数、型、文字列など、それぞれをASTから解析して色で表示してくれます。今時ないとかありませんね。
モジュールによる機能拡張
特にモジュールによる機能拡張は素晴らしいです。Script BrowserやISE Steroidsを使うと見違えるほど化けます。過去記事があるので参照してみてください。
他にも、Tabの拡張を行うTabExpansionPlusPlusを入れるとWMIも使いやすくなるのでもう素晴らしいですね。これはコンソールでも使えるのでオススメです。
Profileの編集もメニューからできるので便利でしょう。
RunSpace の分離
Ctrl + tで、PowerShellの実行空間 (RunSpace) を新たに生成できるので、新しいモジュールのロードやテストも捗ります。
PowerShellのモジュールやDllは、プロセス内部のRunSpace毎にインポートされています。RunSpaceを新たに生成するということはISEを再起動することなくクリーンな環境で再開できることを意味するのです。これはモジュール開発時に、テストが終わってから、初期状態に読み込んで実行を繰り返す時には便利です。
Snippet の拡張
Ctrl + jで、スニペットが使えます。ISEでは、容易にスニペットも拡張できるのでコーディングが楽になるでしょう。Advanced FunctionやDSCもスニペットで簡単に書くことができます。
スニペットは簡単に拡張できるように関数が用意されていますし、ラッパー作ればもっと簡単に利用もできます。
リモート処理のメニュー化
なんのことはない、Enter-PSRemotingがメニューから選べます。私は使ったことありませんが!
デバッグ機能
ふつうです。デバッグできます。
デメリット
正直、機能足りません。
- 複数ファイルの処理
- テスト連動
- デバッグ機能の貧弱ぶり
一定の大きさになってくるとよくわかります。
複数ファイルの処理
スクリプトモジュール (.psm1) がそうですが、1つのファイルにすべての関数を記述するのは見通しも悪く辛いものがあります。そこで、関数ごとにファイルを分割したりするのです。
ただし、ISEはファイルごとにタブを作るのみで、モジュールとして一まとめのプロジェクト管理などはできません。横断的にファイルをみたり編集できないのです。
これはかなりの苦痛です。
あ、現在のファイルに存在する関数は、ISESteroidsを使えば見れるのでオススメです。
正直ISESteroidsがないと、つらすぎますね。
テスト連動
しょうがない部分もあるのですが、現在主流となっているPowerShellにおけるUnit Test、 PesterやPsateと連動できません。
別途テストを走らせるのはめんどくさいです。
デバッグ機能の貧弱ぶり
変数見せてよ。お願い。ISESteroidsを入れれば一応見れます。
総括
さくっと使うにはいいです。ISESteroidsを入れてやっとまともになる印象です。
なので、接続先のWindows Server 2012 R2でさくっと書いたり編集するには、オススメです。OS標準は強力です。
Visual Studio
標準ではVisual StudioはPowerShellをサポートしていません。
Visual Studio User VoiceでもVisual Studio Editor Teamからサポート計画はないことが明言されています。
というわけで、VS ExtensionのPowerShell Tools for Visual Studioを使いましょう。
https://visualstudiogallery.msdn.microsoft.com/c9eb3ba8-0c59-4944-9a62-6eee37294597
メリット
いくつか考えてみましょう。
- VSの機能を使える(プロジェクトシステム)
- NuGet
- 独自の便利機能
- テスト連携 ー 他言語ハイライト
VSの機能を使える(プロジェクトシステム)
すべてはここに集約します。
単純にPowerShell ISEよりVSの方が機能を豊富に持っています。VSの機能全てではないにしても、Extensionでその一部が活用できるのは強力にサポートしてくれます。
ISEで挙げたメリットの内、OS標準、RunSpaceの分離、Snippetの拡張、リモート処理のメニュー化以外はできます。
- コード補完とインテリセンス
- コードハイライト
- モジュールによる機能拡張
- RunSpaceの分離
- デバッグ機能
当然、REPLもついています。
プロジェクトシステムによって、モジュールを横断的に置換、検索などもできます。
ウィンドウ分割もいいですね。
他にも、VSのExtensionと連動できるのもよろしいかと。Productivity Power Toolsも便利です。
https://visualstudiogallery.msdn.microsoft.com/dbcb8670-889e-4a54-a226-a48a15e4cace
NuGet
もちろんNuGetも使えるので依存パッケージも処理できます。これは強いです。
独自の便利機能
Extensionには、いくつか便利な機能があります。特にReformat Scriptが便利です。
これを使えば、Aliasの関数や型が完全名に修正されます。
例えばこれが、
こう
スクリプト内部でのAlias利用は基本よろしくないですが、どうしても使うものは使うので「さくっと完全名に修正される」のはとても大事です。
Reformat Scriptにあったバグ修正のPRを投げていたのですが、すんなりマージされたv1.0.3がリリースされているので、最新版を使ってください。
ブレークポイントとLocalsとCallStack
サポートしています。
ISEは標準では、変数に格納されている一覧を見れないので死にます。*3
テスト連携
PesterとPsate Test Adaptersに対応しています。
他言語連携
当然ですがVSでエクステンションなどを含めて対応できる言語は全てコードハイライトなどの恩恵を受けれます。
PowerShell Scriptを書いていても、VSで書いていれば恩恵を受けれるのは大きいです。というのも、Add-Type
ではC# コードをそのまま入力できるので、書く機会はあるわけです。
あるいは、Cmdletを書いていて、一部だけPowerShell Scriptという使い方。C# を書いていて、一部だけPowerShell Scriptという使い方もありますね。
ISEでやって居る限りエディタの分割は避けられず、辛い思いをします。
デメリット
デメリットもあります。
- OS標準ではない
- RunSpace分離ができない
- x86 PowerShell
まぁ、そのままです。はい。
特にx86動作なのはVSに引きずられているのですが、DSCなどはx64限定なのでDSCのコードハイライトなどが聞きません。つら。
総括
モジュールを書くならISEからVSへ。
むしろVSを使った方が幸せになれます。
まとめ
単体のスクリプトなら、ISE + ISESteroidsまたはVS + PowerShell Tools for Visual Studio
モジュールなら、VS + PowerShell Tools for Visual Studio
DSCは、ISE + ISESteroids
v5で、 Powershell.exe限定だった機能のいくつかがISEや他のエディタで使えるようになるので、普段使いのコンソールはISEでしょう。
PowerGUI はオワコン
初めはPowerGUIも触れようと思いましたが、Dellに買収されててw
もうオワコンでした。
exeコンパイルは面白い機能だったのですが、それだけですしいらないですね。