PowerShell Advent Calendar 2017、11日目です。
PowerShell 6.0のGAリリースも間近となりビルド・デバッグ手順も固まってきたと思えたので本エントリを書きます。
はじめに
PowerShellがオープンソース化した時点でPowerShellのビルドはVisual Studio 2015で行われており、ソリューションの構成で、
- .NET Frameworkで動作するWindows PowerShell
- NET Coreで動作するPowerShell Core
をそれぞれ個別にビルドできる様になっていました。
その後PowerShell 6.0がPowerShell Coreのみをリリースする方針となってからは、Windows PowerShell専用の処理を削除しつつ、Visual Studio 2017とVisual Studio Codeでビルド・デバッグができる様に変更されています。
(ただ、Visual Studio 2017でのビルドについては現在も目下修正中の様で手元の環境ではうまくいきませんでした。追記しました)
細かい話はGitHub上の、
PowerShell/docs/building at master · PowerShell/PowerShell · GitHub
や
PowerShell/docs/debugging at master · PowerShell/PowerShell · GitHub
のドキュメントに記載されていますので興味があればご覧ください。
PowerShellをデバッグ実行する
本エントリではWindows環境、64bit Windows 10(1709)でVisual Studio Codeを使用した場合の手順を紹介します。
他のOSについては先述のGihHubのドキュメントに手順がありますのでそちらをご覧ください。
1. Gitのインストール
ソースコードをCloneするのにGitクライアントが必要です。
適当にインストールしてgit
コマンドが使える様にしておいてください。
2. Visual Studio Codeのインストール
Visual Studio Codeを適当にインストールしてください。
今回は64bit版のVer.1.18.1をインストールします。
また、以下の拡張が必要になるのでインストールしておいてください。
- C#拡張 (現時点のバージョンは1.13.1)
- PowerShell拡張 (現時点のバージョンは1.5.1)
3. ソースコードのClone
PowerShellのリポジトリよりソースコードをCloneします。
ソースコードを修正したい、Pull Requestを送りたいといった場合であればForkしてからのCloneとなるでしょうが、今回はとりあえずデバッグ実行できれば良いのでリポジトリを直接Cloneします。
任意のディレクトリで以下の様に--recursive
オプションを付けてgit clone
してください。
git clone --recursive https://github.com/PowerShell/PowerShell.git
実行後PowerShell
ディレクトリが作成されソースコードがCloneされているはずです。
4. その他必要ツールのインストール
PowerShellをビルド・デバッグ実行するには上記の他に
- .NET Core SDK
- PowerShell 6.0の実行バイナリ(pwsh)
- RCEdit
が必要となります。
これらのツールを個別にインストールしても構わないのですが、PowerShellのソースコードにはビルトのための専用モジュールがあり、このモジュールの機能を利用することで必要なツールをまとめてインストールすることができます。
ソースコードのルートディレクトリにbuild.psm1
というモジュールがあるので、これをインポートしStart-PSBootstrap
関数を実行すると必要なツールをまとめてインストールしてくれます。
# cd [PowerShellのルートディレクトリ] cd .\PowerShell\ Import-Module .\build.psm1 Start-PSBootstrap
このStart-PSBootstrap
では$env:LOCALAPPDATA\Microsoft\
配下のフォルダに必要なツールをインストールします。
現時点では、
- .NET Core SDK : Ver.2.0.2
- PowerShell 6.0 : Ver.6.0.0-rc
- RCEdit : Ver.0.2.0
がインストールされます。
(今後インストールされるバージョンは上がっていくでしょう)
ここで、仕様なのかバグなのか不明なのですが、.NET Core SDKをインストールした後にdonet
コマンドのパス($env:LOCALAPPDATA\Microsoft\dotnet
)がPATH環境変数に永続して登録されませんでした。
このため、手動でPATHに登録するかビルド・デバッグ実行の都度PATHに追加しておく必要があります。
5. ビルドとデバッグ実行
最後にVisual Studio Codeを起動し、PowerShellをデバッグ実行してみます。
# dotnetコマンドのPATHを通してからVisual Studio Codeを実行 $env:PATH += ";$env:LOCALAPPDATA\Microsoft\dotnet" code
PowerShellにはC++のソースも一部含まれているため、初回起動時に以下の様なダイアログが出ますが放置して大丈夫です。
ここでデバッグの構成をみると、下図の様に、
- .NET Core Launch
- .NET Core Attach
が登録されており、.NET Core Launch
を実行すればPowerShellのビルトとデバッグ実行が可能です。
F5キー実行でも構いません。
最初のビルドにはしばらく時間がかかりますので焦らず待ちます。
ビルドエラーが出る様であれば適宜対処してください。
最終的には下図の様にPowerShellをデバッグ実行することができます。
【補足】PowerShellをビルドする
PowerShellをビルドするだけであればVisual Studio Codeが無くても先述のbuild.psm1
モジュールを使い、Start-PSBuild
コマンドで可能です。
# Start-PSBuildのパラメーターはこの例の他にもいろいろあります Import-Module .\build.psm1 Start-PSBuild -Configuration Release
最後に
とりあえずこんな感じです。
PowerShellをデバッグ実行することでソースの修正はもちろんですが、怪しいと思った挙動の詳細を細かく追うことも可能になります。
みなさんも是非トライしてみてください。
【2018/04/12追記】
Visual Studio 2017を使った手順を書きました。