Windows Terminalを使って作業する場合、皆さんはどのシェル環境を利用しているだろうか。おそらくWindows環境での操作はPowerShellを、WSL(Windows Subsystem for Linux)上のLinux環境での操作はBashやZshを使っているというユーザーが多いと思う。しかしこの使い分けだと、例えばPowerShell向けに作ったスクリプトと同じ処理をWSL環境上でも行いたいといった場合には、スクリプトを一から書き直す必要があり、少々不便を感じる。

本稿執筆時点でのPowerShellの最新版はバージョン7だが、実はバージョン6以降のPowerShellにはLinux版やmacOS版も用意されており、Ubuntuをはじめとする主要なLinuxディストリビューションでも利用することができる。バージョン6以降のPowerShellは、単にバージョンが上がったというだけでなく、ベースとなる実装がWindows以外のプラットフォームにも対応できるように変更されているのである。

今回は、バージョン5から7に至るまでのPowerShellの歩みを整理した上で、WSL上のUbuntu環境にPowerShellを導入する方法を紹介したい。

PowerShell 5.1から7に至るまでの変遷

まず注意しなければならないのは、現在のWindows 10にデフォルトで用意されているPowerShellのバージョンは5.1であり、最新版のバージョン7ではないという点だ。バージョン5系のPowerShellは、正式には「Windows PowerShell」と呼ばれているもので、すでに保守モードとなっており、新機能などの開発は行われていない。このWindows PowerShell 5.1を起動すると、「新しいクロスプラットフォームのPowerShellをお試しください」というメッセージが表示される。

Windows PowerShell 5.1 / Windows 10

Windows PowerShellはWindowsのみで動作するのに対して、後継版であるPowerShell 6系統はクロスプラットフォーム対応となり、Linux版も提供されるようになった。バージョン6系列になったPowerShellは、正式には「PowerShell Core」という名前が付けられている。これはWindows PowerShellからは大きく実装が変更され、オープンソースの「.NET Core」をベースに開発が行われたことに由来する。

.NET CoreはMicrosoftが商用に提供している.NET Frameworkからコア機能を抽出してオープンソース化したものである。.NET FrameworkがWindowsやWebをターゲットとして展開されてきたのに対して、.NET Coreはクロスプラットフォーム対応となり、WindowsのほかにLinuxやmacOSなどもサポートされている。

これによって、PowerShell Core 6はWindows版に加えてLinux版とmacOS版も提供されるようになった。ただし、Windows PowerShellとPowerShell Coreの互換性は100%ではない。そのため、Windowsでは今もWindows PowerShellがデフォルトのシェルとして使用され続けている。

その後、MicrosoftはPowerShell Core 6.2の次のバージョンを「PowerShell 7」にすると発表した。「Core」という単語が外れ、元の「PowerShell」の名称に戻ったかたちだ。さらに、このPowerShell 7を将来的にWindows PowerShell 5.1の後継にする方針も発表した。PowerShell 7では、Windows PowerShell 5.1との互換性を確保しつつ、シェルプログラミングなどの新たな機能も導入されている。

現在のPowerShellの最新版は「PowerShell 7.0.3」となっている。前述のように、現時点ではWindowsのデフォルトのPowerShellは依然としてWindows PowerShell 5.1だが、将来的にはPowerShell 7系列に置き換わる予定なので、今のうちにPowerShell 7を導入しておくことには大きな意味があるだろう。

WindowsへのPowerShell 7のインストール

Windows PowerShellはWindowsでしか動作しないので、WSL上のLinuxには必然的にPowerShell 7を導入することになる。そうであれば、Windows側にもPowerShell 7をインストールしておいたほうがいいだろう。

WindowsへのPowerShell 7のインストール方法は、本連載の第30回で紹介しているので、そちらを参照していただきたい。

PowerShell 7.0.3 / Windows 10

PowerShell 7はWindows Terminalの動的プロファイルに対応しているので、インストールすると自動で新しいプロファイルの設定が追加される。

Ubuntu 18.04へのPowerShell 7のインストール

続いて、WLS上のUbuntu 18.04にPowerShell 7をインストールしてみよう。なお本稿執筆時点のPowerShell 7は、まだUbuntu 20.04をサポートしていないので注意が必要だ。

Ubuntuにはパッケージマネージャの「apt」を用いてインストールすることができる。まずはaptのパッケージリストを最新にしておこう。

aptのパッケージリストの更新

続いて、MicrosoftのリポジトリのPGPキーをセットしたいが、PGPキーを取得する際にはwgetコマンドが便利なので、まだwgetをインストールしていない場合には次のコマンドでインストールしておく。

wgetのインストール

wgetコマンドをインストールできたら、「https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb」から、次のコマンドでMicrosoftのリポジトリのPGPキーを取得する。もしUbuntuのバージョンが18.04でない場合は、PGPキーも異なるので注意しよう。

MicrosoftのリポジトリのPGPキーの取得

PGPキーが取得できたら、次のコマンドでこれを登録する。

PGPキーの登録

これでMicrosoftのリポジトリが追加できたので、再度aptのパッケージリストをアップデートしよう。

再度aptのパッケージリストを更新

次のように、Microsoftのリポジトリがリストに含まれていることを確認できる。

Microsoftのリポジトリが追加された

続いて、次のコマンドでuniverseリポジトリを有効にしておく。

universeリポジトリを有効にする

以上で準備は完了だ。PowerShellのパッケージ名は「powershell」なので、これを「apt-get instal」でインストールしよう。

PowerShellのインストール

PowerShellは「pwsh」コマンドで起動できる。次のようにPowerShellが起動して、Windowsと同様にPowerShellのコマンドが利用できるようになる。インストールされているPowerShellのバージョン情報は「$PSVersionTable」と入力すれば確認できる。

PowerShell 7.0.3 / Ubuntu 18.04 LTS

Windows Terminalを使うユーザーは、UNIXコマンドと並んでPowerShellにも慣れ親しんでいる人が少なくないと思う。WindowsをLinux環境に近づけるだけでなく、LinuxのほうもWindows環境に近づけることで、より作業しやすいターミナルを構築することができるだろう。

参考資料