ちょっと話題の記事

PowerShell 7が正式リリースされました

2020.03.05

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

しばたです。

現在2020年3月5日午前2:30、そろそろ寝ようと思っていたのですが今まさにPowerShell 7が正式リリースされたので眠気を抑えてこのブログを書いています。
PowerShell Teamからのアナウンスは以下となります。

当初の予定では今年の1月に正式リリース予定だったのですが、先行していたリリース候補版で発生した不具合対応やソフトウェアの品質向上のため約二か月延期され本日のリリースとなりました。
本記事ではこのアナウンスを元にPowerShell 7について解説していきます。

PowerShell 7について

PowerShell 7は2018年1月にクロスプラットフォームな新しいPowerShellとしてリリースされたPowerShell Core 6.0のメジャーバージョンアップとなります。

PowerShell Core 6.0はその名前にある様にアプリケーション基盤がこれまでの.NET Frameworkから.NET Coreに刷新され、Windows以外にLinuxやmacOSでも動作する様になりました。
PowerShell Core 6.0の登場から今日にいたるまで多くのバグフィックスや互換性の問題を解消し、これまでのPowerShellを置き換えていく意図をこめCoreの文言が取れたPowerShell 7としてバージョンアップされました。

PowerShell 7リリースまでの歴史的背景については私の以前の登壇資料に詳しく書いてますので参考にしてください。

PowerShell 7新機能

コミュニティの要望などを主な動機としてPowerShell 7では幾つかの新機能が導入されています。
これまでにDevelopsers.IOで紹介したものとしては以下の機能が挙げられます。

ForEach-Object -Parallel

三項演算子

Pipeline chain operators (&& と ||)

NULL合体演算子(??、??=)

エラー表示の簡素化

アップデート通知機能

Windows PowerShellとの互換性強化およびGUI機能の互換性強化

これまでのPowerShell Coreは.NET Core 2.x~3.0を基盤としており、.NET Core 2.x~3.0ではWindows FormsやWPFといったGUIフレームワークとの互換性が提供されておらず、このためPowerShell CoreでもOut-GridViewShow-CommandといったGUIを使う機能はサポートされていませんでした。
PowerShell 7は.NET Core 3.1を基盤とする様になり、.NET Core 3.1はWindows限定ではありますがWindows FormsやWPFといったGUIフレームワークとの互換性がサポートされているためPowerShell 7ではOut-GridViewShow-CommandといったGUIを使う機能が復刻することになりました。

ただ、先述の通りGUI機能の復刻はWindows限定であるため、LinuxやmacOSではOut-GridViewShow-Commandが未だ使えません。
GUI機能をクロスプラットフォーム化する課題についても未だ棚上げされたままですので、この点については今後の課題となる見込みです。

ちなみに以前紹介したクロスプラットフォームなOut-GridView(Avaloina実装)についてはお蔵入りした様です...
(GitHubのコミットを追う限りではTUI化して刷新を図る雰囲気を感じます)

PowerShell 7の入手方法、更新方法

PowerShell 7は現時点ではGitHubリポジトリおよび各種パッケージマネージャからインストール可能です。
詳細な手順はGitHubにある手順をご覧ください。

PowerShell Core 6.0からのアップグレードもそれぞれのインストール方式のしきたりに従った形で可能となっています。

サポートOS

本日時点のサポートOSは以下となっています。

  • Windows 7, 8.1, and 10
  • Windows Server 2008 R2, 2012, 2012 R2, 2016, and 2019
  • macOS 10.13+
  • Red Hat Enterprise Linux (RHEL) / CentOS 7+
  • Fedora 29+
  • Debian 9+
  • Ubuntu 16.04+
  • openSUSE 15+
  • Alpine Linux 3.8+

以下のOSはコミュニティサポートのみの提供

  • Arch
  • Kali Linux

このほかにPowerShell 7は.NET Core 3.1製なため事前要求として.NET Core 3.1が動作する環境が求められます。

Windows OSへの組み込みについて

PowerShell 7の最終目標としてWindows OSに標準で組み込むことが明言されているのですが、残念ながら現時点ではその目途は立っていません。

サポートプログラムについて

PowerShell 7ではソフトウェアのサポート方式が大きく変わりました。
これまでのPowerShell Coreでは新機能を事前検証するためのPreviewバージョンと安定リリース版であるStableバージョンの2系統用意されていましたが、PowerShell 7ではこの他に長期サポート版であるLTSバージョンが提供される様になりました。

LTSバージョンのサポート期限については基盤となる.NET Coreのサポート期限と合わせる形をとっており、PowerShell 7(.NET Core 3.1)は約3年間のサポートとなる見込みです。
StableバージョンおよびPreviewバージョンのサポートはこれまで通りMicrosoft Modern Lifecycle Policyに従う様です。

サポートの詳細については以下のドキュメントを参照してください。

フィードバックについて

Enterprise Agreement(EA)やSoftware Assuarance(SA)といったサポート契約を結んでいる場合はMicrosoftのサポート経由でフィードバックを送ることもできますが、基本的にはGitHubでIssueを起票することでフィードバックを送れますので、気になる事がある場合はガンガンフィードバックを送りましょう。

最後に

待ち望んでいたPowerShell 7がとうとうリリースされました。

私の体感でもこれまでのPowerShell(Windows PowerShell)に対する互換性が大きく向上してると感じましたので、是非インストールして"新しい"PowerShellへの置き換えを進めてみてください。