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 v3 からはその見た目も進化して使いやすくなっています。
読み方は、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) がそうですが、一つのファイルにすべての関数を記述するのは見通しも悪く辛いものがあります。そこで、関数ごとにファイルを分割したりするのです。
ただし、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 からサポート計画はないことが明言されています。
Bring PowerShell support to the editor
In 2005 there was VBScript support, and the general consensus is that PowerShell is the wave of the future for scripting. Why can't it be brought into VS as a supported language with IntelliSense? It seems like the wheel was reinvented when the PowerShell ISE was developed when it can also be don...
というわけで、VS Extension の PowerShell Tools for Visual Studio を使いましょう。
メリット
いくつか考えてみましょう。
- VSの機能を使える(プロジェクトシステム)
- NuGet
- 独自の便利機能
- テスト連携 ー 他言語ハイライト
VSの機能を使える(プロジェクトシステム)
すべてはここに集約します。
単純に PowerShell ISE より VS の方が機能を豊富に持っています。VSの機能全てではないにしても、Extension でその一部が活用できるのは強力にサポートしてくれます。
ISE で挙げたメリットの内、OS標準、RunSpaceの分離、Snippetの拡張、リモート処理のメニュー化以外はできます。
- コード補完とインテリセンス
- コードハイライト
- モジュールによる機能拡張
- RunSpace の分離
- デバッグ機能
当然、REPL もついています。
プロジェクトシステムによって、モジュールを横断的に置換、検索などもできます。
ウィンドウ分割もいいですね。
他にも、VS の Extensionと連動できるのもよろしいかと。Productivity Power Tools も便利です。
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 コンパイルは面白い機能だったのですが、それだけですしいらないですね。