PowerShellとその変遷
MicrosoftがLinuxに本気で取り組んでいることを示す別方向の証拠としては、「PowerShell」を挙げることができる。特に注目したいのは、PowerShellを「PowerShell Core」としてオープンソース化し、Linuxでも利用できるようにしたことと、PowerShell Coreを正式版としてWindowsへの逆輸入を進めていることだ。2020年5月、または6月に公開が予定されているWindows 10のフィーチャーアップデートはこの辺りが正式な機能として取り込まれる注目のバージョンになる見通しだ。
PowerShellに関する変遷は、日頃から関わっていないとややわかりにくい。名称の変更もあって、煩雑さは深まるばかりだ。PowerShellが”新しい存在”になる前に、この辺りの状況を説明しておこうと思う。
Windows PowerShell
現在、Windows 10に搭載されている公式なPowerShellは「PowerShell 5.1」だ。PowerShellは最初のバージョンとなるPowerShell 1.0が2006年に公開され、以降順次機能を増やしながら新しいバージョンがリリースされてきた。これまでのところ以下のバージョンが公開されており、「PowerShell 5.1」が最後の公式版ということになる。
- PowerShell 1.0
- PowerShell 2.0
- PowerShell 3.0
- PowerShell 4.0
- PowerShell 5.0
- PowerShell 5.1
現在、WindowsにデフォルトでインストールされているこれらのPowerShellは、「Windows PowerShell」と呼ばれている。Windows PowerShellの次にリリースされたPowerShell Coreと区別するためだ。この名称変遷が、PowerShellの状況をわかりづらくしてしまっている。本稿では、その辺りを整理したいと思う。
MicrosoftはすでにWindows PowerShellの開発を終了している。バグ修正などには取り組むとしているが、Windows PowerShellに新しい機能が追加されることはないし、今後新しいバージョンが公開されることもないと言われている。ただし、Microsoftは互換性を確保する目的でこのバージョンを長期に渡って提供するとしている。
PowerShell Core
MicrosoftはWindows PowerShellの中核技術をオープンソースソフトウエアとして公開している。オープンソース版のPowerShellは「PowerShell Core」と呼ばれ、2016年に発表が行われた。PowerShell Coreの最初のバージョンは2018年に発表された「PowerShell Core 6.0」で、本稿執筆時点で以下の3つのバージョンが公開されている。
- PowerShell Core 6.0
- PowerShell Core 6.1
- PowerShell Core 6.2
PowerShell CoreはWindows PowerShellをオープンソース化しただけではなく、macOSとLinuxというプラットフォームにも対応したクロスプラットフォームプロダクトになっているという点が注目される。Microsoftはこのところコア技術のいくつかをオープンソースソフトウエアとして公開する取り組みを続けており、PowerShell Coreもそうした流れを組む1つということになる。
「Windows PowerShell 5.1」と「PowerShell Core 6.0」といったようにバージョン番号がつながっているように見えるが、Windows PowerShell 5.1とPowerShell Core 6.0には完全な互換性というものは存在していない。かなり似ているものの、PowerShell CoreではWindows PowerShellで提供されていた機能のいくつかが消えており、PowerShell CoreとWindows PowerShellで置き換えることはできないとされている。
またPowerShell Coreの提供方法も開発者向けであって、一般的とは言えないところがある。PowerShell CoreはGitHubで提供されており、例えば次のURLからパッケージをダウンロードしてきて自分でインストールする必要がある。
PowerShell CoreはmacOSやLinuxでも利用できる。管理用のシェルとして利用することもできるため、Windowsに慣れた管理者はmacOSやLinuxでもPowerShell Coreが利用できると何かと便利だ。実際、PowerShell CoreはLinuxでの利用が増えており、さまざまな改善もLinuxの利用者から提案されたものが多いように見える。
このままWindows PowerShellとPowerShell Coreという2つの態勢のままいくのかと思われたが、Microsoft以外の開発者も巻き込んだPowerShell Coreのエコシステムがうまく回ったことで方針を転換したのか、MicrosoftはPowerShell Coreを「PowerShell 7」という名称に変更して開発を行っていくと発表した。これは2020年第1四半期には機能がフィックスされ、2020年第2四半期には最初のバージョンが公開される予定になっている。
PowerShell 7
「PowerShell 7」はPowerShell Core 6.2をベースにしつつ、さらにWindows PowerShell 5.1との互換性を確保し、さらにいくつもの新機能を追加していったバージョン、ということになる。Microsoftは「Windows PowerShell 5.1」の正式な後継を「PowerShell 7」にすると発表しており、2020年第2四半期以降は「Windows PowerShell」や「PowerShell Core」といった区別がなくなり、最新版はすべて「PowerShell 7」ということになる。
Microsoftは2020年第2四半期には正式なバージョンが公開できるように着実にリリースエンジニアリングを進めており、このまま行けば確実に「PowerShell 7」が公開されるように見える。
最終的に「PowerShell 7」に収束していくとは言え、しばらくの間は「Windows PowerShell」「PowerShell Core」「PowerShell 7」の3つが混在することになる。それぞれインストールとアップデートの提供は次のようになるものとみられる。
- Windows PowerShell: デフォルトインストール。Windows Update経由でバグ修正版の提供など
- PowerShell Core: GitHubから自分でダウンロードしてインストール
- PowerShell 7: Microsoft Store経由でインストール
PowerShell 7の正式な提供方法は発表されていないが、これまでの取り組みを整理するとMicrosoft Store経由で提供される可能性が高いとみられる。Windows TerminalもMicrosoft Store経由で提供されるし、MicrosoftはWindows 10の機能のいくつかもMicrosoft Store経由での提供へ切り替えようとしている。「オプション機能はMicrosoft Store経由で提供する」というのが、これからのMicrosoftのやり方ということになるのだろう。
PowerShell 7はWindows PowerShell 5.1との互換性確保という目的があるものの、新しく導入された新機能についても注目しておきたい。PowerShellは強力である反面、パフォーマンスは発揮できないという面がある。PowerShell 7ではこの点が大きく改善されており、特にマルチコアシステムでパフォーマンスを発揮する機能などが導入されている点が注目される。Windows以外のプラットフォームでこの機能が有効になるにはまだしばらく開発を進める必要があるとみられるが、いずれほかのプラットフォームでも効果的に利用できるようになるものとみられる。
WindowsにおけるLinuxの利用が便利になれば、当然Windows側もシェルで操作したいと考えるのは当然の流れだ。そういった点においてPowerShell 7はその要望を十分に満たすものになろうとしている。MicrosoftにおけるLinuxの取り組みの一環……と言うと言い過ぎのような感もあるが、そうした流れの1つと捉えておいても、そう間違ったことではないだろう。