シェルの使い勝手は自分で引き上げよう

インタラクティブシェルはデフォルト設定のまま使い続けることもあるが、エイリアスや関数を用意して変更することもあるだろう。カスタマイズするとしないのとでは作業効率に差が出るし、ストレスのかかり方も変わってくる。

コマンドによっては環境変数を設定する必要があるものもあるし、リモートログインの手間を低減するためにシェル起動時に実行しなければならないコマンドなども存在する。これらを毎回手動で設定するのは面倒だ。シェルスクリプトに入れておいて自分で実行するという手もあるが、それすらも手間である。できれば、そういった処理はPowerShell 7が起動した段階で自動的に行ってほしい。

インタラクティブシェルはこうした用途向けの設定ファイルを用意しており、そのファイルに設定やエイリアス、関数などの定義を書いておけば、シェル起動後にはその内容が反映された状態になる。PowerShellにも似たような目的で利用できるファイルが用意されているので、今回はこのファイルの使用方法を紹介しよう。

$PROFILE

PowerShellは起動時に「$PROFILE」のファイルを読み込む仕組みになっている。例えば、次の環境(Windows 10、Powershell 7.0.2)ではホームディレクトリ以下の「OneDrive\ドキュメント\PowerShell\Microsoft.PowerShell_profile.ps1」というファイルが起動時に処理されることになる。

Windows 10での$PROFILE

$PROFILEに設定されている値は環境ごとに異なり、必ずしも同じではない。次の環境はmacOS Catalina+PowerShell 7.0.0だが、ここでは~/.config/powershell/Microsoft.PowerShell_profile.ps1が$PROFILEに設定されている。

macOSでの$PROFILE

どの環境でもよいので、PowerShellから$PROFILEを指定してエディタを起動し、このファイルに次のコードを追加してみよう。

Write-Output 'check'

ファイルを保存したら、PowerShell 7を再起動する。次のように、先ほど書き込んだメッセージが出力されれば成功だ。

$PROFILEに書き込んだ内容が処理されていることを確認

PowerShellはもともと起動が遅い。$PROFILEにたくさん処理が書き込んであると、さらに起動が遅くなる。そのため、それほど多くの処理をこのファイルに書き込んでおくのはあまりお薦めしないのだが、PowerShellを一度起動したらそのまま使い続けるような使い方がメインなら、このファイルにいろいろ書き込んでもよいだろう。要は使い方次第だ。

$PROFILEの使用例

macOSやLinuxでターミナルエミュレータをよく使う方であれば、2文字に設定されたエイリアスを実行することも多いのではないだろうか。当然、PowerShellにはこうしたコマンドレットやエイリアスは用意されていないので、次のようにエラーになる。

用意されていないエイリアスや関数、コマンド

「head」や「tail」といったmacOSやLinuxで使われることの多いコマンドも、PowerShellには用意されていないし、関連しそうなエイリアスも用意されていない。そのため、Windows 10環境でPowerShell 7を使っている場合、それらのコマンドもエラーになる。

些細なことだが、こういうエラーは結構ストレスになる。macOSやLinuxで作業するときと、Windows 10のPowerShell 7で作業するときとで、自分の頭を切り替える必要があるのだが、つい手癖で打ってしまうことは多い。その度にエラーが表示され、うんざりしてしまう。

$PROFILEにエイリアス実行や関数作成などを取り込んでおくと、こうしたストレスを回避しやすくなる。例えば、次のようなコードを$PROFILEに書いておく。

Set-Alias -Name la -Value Get-ChildItem -Force
Set-Alias -Name ll -Value Get-ChildItem
Set-Alias -Name alias -Value Get-Alias

function grep {
    $input | wsl grep $args
}
function head {#
    $input | wsl head $args
}
function tail {
    $input | wsl tail $args
}

もう一度PowerShell 7を起動して先ほどと同じ操作を行うと、次のように機能することを確認できる。

$PROFILE編集後のPowerShell 7の動作

このファイルは一度作成して終わりではなく、随時、編集していくとよい。無駄な入力を繰り返しているなと感じたら、それらの処理を短縮化する方法を$PROFILEに書き込んでいくイメージだ。単純な対処だが、効果が期待できる。

覚えにくさはエイリアスや関数でカバー

ユーザーがPowerShellをインタラクティブシェルとして使うのを避ける理由に、「コマンドレットが長すぎる」「コマンドレットが覚えられない」「コマンドレットの使い方がわかりにくい」……といったものがある。

これらは、エイリアスや関数を使えばある程度回避できる問題だ。使い方については自力で調べる必要があるものの、それらをエイリアスや関数に整理してしまえば、次からは短い入力で同じ処理を行うことができる。”建設的に手抜きをするための努力”というのは、悪くない投資だ。将来の自分の作業がどんどん楽になっていく。

PowerShellは管理向けのスクリプト言語としての側面に焦点が当たることが多く、インタラクティブシェルとしての使い勝手を向上させていこう、という視点で話がまとめられることが少ない。しかし、使い勝手の向上を実現するための機能は一通り揃っており、macOSやLinuxのインタラクティブシェルと同じようなテクニックを利用できる。今後はPowerShellの設定ファイルも自分専用に育てていきたいところだ。