PowerShell Core 6.2がリリースされました

PowerShell Core

しばたです。
本日PowerShell Core 6.2がGAとなりPowerShell Teamからのアナウンスが発表されました。

本記事ではその内容をかつまんでお伝えします。

PowerShell Core 6.2のインストール

PowerShell Coreのインストールおよびアップデートは公式のドキュメントを参照してください。

基本的にはWindowsであればMSIインストーラー、macOSであればDMPファイルかHomebrew Cask、Linuxであれば各ディストリビューションで使われているパッケージマネージャーからインストールおよび、アップデートが可能です。

ちなみにWidows、macOSでのアップデートであればPSCoreUpdateというツールを自作していますのでよろしければこちらも使ってみてください(宣伝)。

PowerShell Core 6.2の新機能

PowerShell Core 6.2は"パフォーマンス改善"、"バグ修正"、"言語機能やコマンドレットの軽微な改善"を主として行ったため目立った新機能はあまりありません。
それでもPowerShell TeamによるとPowerShell Core 6.1から560を超える変更を加えてきたそうです。
変更の一覧はGitHubのリリースノートに記載されています。

Experimental Features

大きな新機能としては試験的な機能(Experimental Feature)が導入されました。
試験的な機能がどういったものかについては以前にDevelopers.IOで触れているので詳細はこちらをご覧ください。

PowerShell CoreのExperimental Featureを試してみた

以前に紹介した際に利用可能な機能はBatch implicit remoting proxy commands to improve performance一つだけでしたが、PowerShell Core 6.2 GA時点では他に3つの機能が増え、

  1. Batch implicit remoting proxy commands to improve performance
  2. Command Not Found Suggestions
  3. Temp Drive
  4. Abbreviation Expansion

の4機能存在します。

以下各機能を簡単に説明します。

Batch implicit remoting proxy commands to improve performance

こちらはPowerShell CoreのExperimental Featureを試してみたでも説明した通り、Implict Remotingにおけるコマンド実行で都度ローカル⇔リモート間の通信が発生してしまうのを改善し、リモート側で複数のコマンドが連続で実行される場合はまとめて実行することでパフォーマンスを改善するものです。

公式アナウンスによるとImplicit Remotingで単純にGet-Process | Sort-Objectを実行し10~15秒かかってしまっていたケースが20~30ミリ秒に改善されたと記されています。
(私見ですが、Implicit Remotingのボトルネックは都度発生するネットワーク通信とオブジェクトのシリアライズ・デシリアライズなのでこれくらいの改善は十分にありえると思われます。)

Command Not Found Suggestions

こちらはちょっと地味な改善ですが、入力間違いなどでコマンドが見つからなかった際に類似のコマンドをサジェストしてくれる機能になります。
公式アナウンスの例を引用すると、Get-Commandを打とうとしてGet-Commndとしてしまった場合だと下図の様なサジェストが表示されます。

# Get-Commandのタイプミス
Get-Commnd

Suggestion [4,General]: The most similar commands are: Get-Command, Get-Content, Get-Job, Get-Module, Get-Item, Set-Content, Get-Event, Get-Host.

Temp Drive

こちらも地味な改善なのですが、[System.IO.Path]::GetTempPath()メソッドで取得できるパス(C:\Users\[User名]\AppData\Local\Temp\/tmp/など)に対してドライブが割り当てられ、Temp:\でアクセスできる様になります。

Abbreviation Expansion

こちらはコンソール上のタブ補完を強化する機能になります。
従来のPowerShellコンソールのタブ補完は前方一致で後方入力文字の補完のみでしたが、この機能を有効にするとコマンドレットの動詞の省略形も補完対象となり、

g-c[Tab入力]

の様な入力をした場合に

Get-Command

と補完してくれる様になります。

コード改善

こちらはアナウンスされなかったのですが、PowerShell Coreの開発にCodeFactorが導入され、コードスタイルの修正や内部処理のリファクタリングがPowerShell Core 6.2ではかなり行われています。 (私が日々GitHubの変更を追っての体感となりますが...)

これらの修正は機能に直結しないものの、コード基盤がより安定したものとなり、迅速に機能の変更に対応するために必要なものです。
これからのPowerShellでより迅速に新しい機能が提供されていることに期待したいです。

その他

PowerShell Core 6.2本体としてはこんな感じなのですが、アナウンスの中でしれっと以下のコメントを出しています。

Throughout the development of 6.2, the PowerShell Core team has also been focused on supporting PowerShell Core 6 in Azure Functions (more on this soon!), automating our release process (blog coming!), the v1.18.0 release of PSScriptAnalyzer, the 2.0.0-Preview release of the PowerShell Visual Studio Code extension, and, of course, the PowerShell Core 6.2 release.

ここで

Throughout the development of 6.2, the PowerShell Core team has also been focused on supporting PowerShell Core 6 in Azure Functions (more on this soon!)

とある様に現在Azure FunctionsでPowerShell Coreのサポートを追加しようと計画中であることが明らかにされました。
現在Azure FunctionsのPowerShellサポートはV1ランタイムでExperimentalリリースのみ、V2ランタイムはそもそもサポートされていません。
PowerShell Coreは.NET Core製ですのでV2ライタイムで提供されることはまず間違いないでしょう。

ちなみにAzure FunctionsでのPowerShell Coreサポート計画が明言されたのはこれが初となります。

また、

automating our release process (blog coming!)

についても詳細は不明ですが気になるところです。

最後に

ざっとこんな感じです。
大きな変更や新機能はないものの、パフォーマンスや細かい使い勝手が改善されており、実際体感としても使いやすくなっていると感じます。

皆さんもぜひPowerShell Core 6.2を試してみてください。