PowerShellで入力予測機能

PowerShellはインタラクティブシェルとしては比較的後発の部類の入る。しかし、MacやLinuxで一般的に使われているインタラクティブシェルと比べると入力補完機能など、弱い面があるのは否めない。

Microsoftは、そうしたPowerShellの弱い面の強化をPowerShell 7で積極的に改善しており、例えば、PowerShell 7.1では入力予測機能が導入されている。インタラクティブシェルでいうと「fish」というシェルが実現しているものに近い機能で、ユーザーの入力の手間を軽減するかなり嬉しい機能だ。

同機能は「PSReadLine」というモジュール経由で提供されているのだが、先日、このモジュールの新しいバージョン「PSReadLine 2.2」が一般公開された。

以降では、このPSReadLine 2.2について見ていこう。

PSReadLine 2.2をインストールする

PowerShell 7.1からは、PowerShell自体にPSReadLineモジュールが同梱されるようになった。「Get-Module」で利用しているモジュールを調べれば、次のようにPSReadLine 2.1が使われていることを確認できる。

  • PSReadLineモジュールはPowerShell 7.1から同梱されている

    PSReadLineモジュールはPowerShell 7.1から同梱されている

PSReadLine 2.2は、次のコマンドレットでインストールすることができる。

Install-Module -Name PSReadLine -Force

ただし、インストールすると次のように古いバージョンが表示される。すでに同梱されているPSReadLineモジュールが機能しているため、インストールした新しいモジュールは動いていない。

  • 同梱されているPSReadLineモジュールが動作している

    同梱されているPSReadLineモジュールが動作している

そこでいったんWindows TerminalおよびPowerShellを終了し、再度起動して利用しているモジュールを確認する。

利用しているPSReadLineモジュールを確認する

Get-Module -Name PSReadLine | Format-List

次のようにインストールしたPSReadLine 2.2モジュールが動作していることを確認できるはずだ。

  • インストールしたPSReadLine 2.2モジュールが動作していることを確認

    インストールしたPSReadLine 2.2モジュールが動作していることを確認

これでPSReadLine 2.2を使う準備は完了だ。

入力予測機能を使う

入力予測機能を利用するには、次のコマンドレットを実行する。デフォルトでこの機能を利用するには、このコマンドレットを$PROFILEに書き込んでおけばよい。

入力予測機能を有効化する方法

Set-PSReadLineOption -PredictionSource History

この機能が有効になっていると、次のようにコマンドやコマンドレットを入力している際、これまでの入力履歴に基づいて入力予測がうっすらと表示されるようになる。

  • 入力予測機能が動作している状態

    入力予測機能が動作している状態

入力予測で表示されている内容をそのまま実行したい場合には、その場で「→」キーを押せばよい。入力予測部分が入力されるので、そのまま「Enter」キーを押して実行する。この機能は入力の邪魔にならず、必要なときには入力の手間や入力するコマンドを思い出したり調べたりする手間を省いてくれる。とても便利な機能だ。

拡張された機能としては、入力予測をfishのように1行で表示するのではなく、複数行で表示する機能がある。次のようにコマンドレットを実行するとこの機能を有効化することができる。

入力予測を一覧表示させる設定

Set-PSReadLineOption -PredictionViewStyle ListView

ここで入力予測が機能すると次のようになる。

  • 入力予測が一覧で表示された状態

    入力予測が一覧で表示された状態

ユーザーや使い方によってはこちらのほうが使いやすいという場合もあると思う。なお、最初に表示した1行だけの予測表示は次の設定を行ったのと同じだ。

入力予測が1行で表示された状態 (デフォルト)

Set-PSReadLineOption -PredictionViewStyle InlineView

1行のままでよい場合には、あえて上のコマンドレットを実行する必要はない。デフォルトがその動作なので、ListViewに変更しない限り1行で表示される。

F1でヘルプ機能を使う

PSReadLine 2.2でもうひとつ注目しておきたいのは「F1」キーだ。Windowsでは多くのアプリケーションが「F1」キーをヘルプやマニュアルの表示を行うショートカットキーにしているが、PSReadLine 2.2から同じような操作ができるようになった。

たとえば、「Get-Module」といったコマンドレットを入力してみよう。

  • Get-Moduleと入力してから「F1」キーを押す

    Get-Moduleと入力してから「F1」キーを押す

この状態で「F1」キーを押すと、次のようにGet-Moduleコマンドレットのヘルプが表示される。

  • Get-Moduleコマンドレットのヘルプが表示される

    Get-Moduleコマンドレットのヘルプが表示される

これはパラメータについても機能する。次のようにパラメータまで入力してから、「F1」キーを押す。

  • Get-Module -CimNamespaceと入力してから「F1」キーを押す

    Get-Module -CimNamespaceと入力してから「F1」キーを押す

今度はヘルプのパラメータ部分が表示されるようになる。

  • Get-Moduleコマンドレットヘルプの-CimNamespaceパラメータ部分が表示される

    Get-Moduleコマンドレットヘルプの-CimNamespaceパラメータ部分が表示される

「F1」キーによるヘルプ表示は、コマンドラインに影響を与えないという特徴がある。わからなくなったときに「F1」キーを押してヘルプを表示させても、ヘルプを終了すれば先程の状態に戻るので、最初から入力し直しといったことがない。かなり便利な動きだ。

PSReadLine 2.2でもっと便利に

日々の操作をインタラクティブシェルで行うようになると、シェルの使い勝手が生産性に大きく関係するようになってくる。PSReadLineモジュールはPowerShellのインタラクティブ性に強く関与するものなので、このモジュールの動向には特に注目しておきたい。

今後どこかの段階で、PowerShellに同梱されているPSReadLineモジュールのバージョンそのものがアップグレードされることになるとは思う。それまでは、今回紹介したようにインストールすればPSReadLine 2.2を使える。インタラクティブシェルとしてのPowerShell操作の効率に大きく関わってくるので、ぜひ試してみていただきたい。