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は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はWindows Terminalの動的プロファイルに対応しているので、インストールすると自動で新しいプロファイルの設定が追加される。
Ubuntu 18.04へのPowerShell 7のインストール
続いて、WLS上のUbuntu 18.04にPowerShell 7をインストールしてみよう。なお本稿執筆時点のPowerShell 7は、まだUbuntu 20.04をサポートしていないので注意が必要だ。
Ubuntuにはパッケージマネージャの「apt」を用いてインストールすることができる。まずはaptのパッケージリストを最新にしておこう。
続いて、MicrosoftのリポジトリのPGPキーをセットしたいが、PGPキーを取得する際にはwgetコマンドが便利なので、まだwgetをインストールしていない場合には次のコマンドでインストールしておく。
wgetコマンドをインストールできたら、「https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb」から、次のコマンドでMicrosoftのリポジトリのPGPキーを取得する。もしUbuntuのバージョンが18.04でない場合は、PGPキーも異なるので注意しよう。
PGPキーが取得できたら、次のコマンドでこれを登録する。
これでMicrosoftのリポジトリが追加できたので、再度aptのパッケージリストをアップデートしよう。
次のように、Microsoftのリポジトリがリストに含まれていることを確認できる。
続いて、次のコマンドでuniverseリポジトリを有効にしておく。
以上で準備は完了だ。PowerShellのパッケージ名は「powershell」なので、これを「apt-get instal」でインストールしよう。
PowerShellは「pwsh」コマンドで起動できる。次のようにPowerShellが起動して、Windowsと同様にPowerShellのコマンドが利用できるようになる。インストールされているPowerShellのバージョン情報は「$PSVersionTable」と入力すれば確認できる。
Windows Terminalを使うユーザーは、UNIXコマンドと並んでPowerShellにも慣れ親しんでいる人が少なくないと思う。WindowsをLinux環境に近づけるだけでなく、LinuxのほうもWindows環境に近づけることで、より作業しやすいターミナルを構築することができるだろう。