PowerShell の環境を今風にお手軽改造する
実は、そこまでお手軽でもない。しかしながら他で頑張るよりはお手軽だと思う。
PowerShell って使ってる?
私は使ってる。PowerShell といっても若干の違いがあり、PS 5系(powershell
で走る奴)と PS 6/7/PS Core系(pwsh
で走る奴)があって、今回話すのは pwsh のほう。bash
とか fish
みたいな要領で小気味よく起動できるので気に入っている。
さて、PowerShell はデフォルトではあんまり楽しくない見た目になっているし、pwsh
を直で動かすのもなんだか……ねえ? ということで、以下のような作業をして環境をマシにする。
- Windows Terminal を使う
- パッケージマネージャを導入する(今回は
scoop
) -
.bashrc
めいたものを PowerShell でもやる
ここではどうにかして PowerShell 7 系を導入したこととする。
最終的には以下のようになる(カラーテーマとかにもよるけど)。
Windows Terminal を使う
Windows Terminal は MS 謹製の今風ターミナルである。タブ機能がありカラーテーマ機能がありキーバインドも組み替えられるなど中々便利な代物なので、これを使っちゃおう。実は Microsoft Store からそのまま導入できるので理由がなければそれでいいと思う。実は PowerShell 7 系も同左。
Windows Terminal をマウスでかちかちするのはあまり楽しくない。Win + R して wt
でそのままターミナルが起動する。ターミナルの設定にもよるがデフォルトでは(入っていれば) PowerShell 7 が読み込まれる。WSL などを使っているなら Ubuntu などが新規タブのところに見えるかもしれない。
パッケージマネージャを使う
Scoop はいわゆるパッケージマネージャの一種であり、Windows/PowerShell 環境で動作する。導入が簡単で操作も容易い。導入は PowerShell(PS 5でもいい) を起動して次のコマンドラインで終了する。
iwr -useb get.scoop.sh | iex
標準では %USERPROFILE/scoop
にインストールされるらしいが、予め SCOOP
/ SCOOP_GLOBAL
環境変数をいじってやればインストール先を変えられる。
この Scoop はとても楽しいので、直感的に動かせば直感的な挙動をする。
scoop bucket add extras # パッケージのリポジトリ的な
scoop install aria2 # パッケージのダウンロードを高速化する
scoop install gimp vlc # GUI アプリケーションもあるしちゃんと動く
scoop uninstall vlc # ばいばい VLC
scoop list # インストールしたパッケージ一覧を出す
sudo
パッケージなんかを入れて、sudo pwsh
みたいに実行すると管理者権限な pwsh が走るので何かと便利だったりとか、そんな感じ。uutils
入れてエイリアスを頑張ると coreutils
が Windows でも動くよ!!! ワオ!!!
自由ソフトウェアなアプリケーションなら大体導入できる(Gpg4Win など入れるとすっごい面倒くさい例外もある)ので積極的に使っていきたいところ。nodejs
も deno
も python
もある。GUIソフトウェアの興味深いところでは obs-studio
や musescore
もある。
.bashrc
的な奴を使う
Microsoft.PowerShell_profile.ps1
というのが長ったらしいものの .bashrc
めいたものである。以下プロファイル。これの置き場所は Get-Item $PROFILE
か echo $PROFILE
を PowerShell で実行すれば出てくるはずなのでそれを参考にする。
Bash でいう PROMPT
は PS では function prompt
で定義する。考え方としては、prompt
でターミナルに出力された文字列がそのままプロンプト文字列になるイメージ。
以下サンプルコード。
function prompt {
$date = Get-Date -Format "HH:mm:ss" # 日付
$path = Split-Path -Path $pwd -Leaf # カレントディレクトリ
Write-Host $date -NoNewline
Write-Host " " -NoNewline
Write-Host $path -NoNewline
Write-Host " $" -NoNewline
return " " # これがないと出力がバグる、なんで???
# 検証してないからわからないけど、多分
# output: "11:22:33 Documents $ "
}
Write-Host
は文字列を端末に書き込む奴で、-NoNewline
をくっつけると改行しないで次の文字列を書き込める。これを利用すればプロンプトっぽい奴が得られる。Write-Host "..." -ForegroundColor blue
みたいにすると色もつけられる。
参考までに、以下は現在のユーザ名と bash でいう #
と $
を算出するコードである。
# 現在のユーザ名
$user = [Security.Principal.WindowsIdentity]::GetCurrent().Name.split("\")[1]
# Administrator なら #、一般ユーザーなら $
$elevation = $(
$IsAdmin = (
New-Object Security.Principal.WindowsPrincipal (
[Security.Principal.WindowsIdentity]::GetCurrent()
)
).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
if ($IsAdmin) {
"#"
}
else {
"$"
}
)
Welcome to New Extreme
私の言いたいことが伝わってくれていれば、おそらく新しい極限に達しているものと思う。ところでリンク先の曲はこれを書いているときに聞いていた曲なので、よかったらどうぞ。
Windows Terminal は Hyper とか Termius とか似たようなものがあるし、Scoop も Chocolatey とか winget とかこれもまた似たようなものがある。何を取るかは人の好みの問題で、気にするべきは現代的なツールチェインを使って楽をしようってことだ。もっとも、ツールチェインの工作は苦労するのが常なのだが。
omake: winfetch
冒頭のスクリーンショットに出てきた出力は winfetch
によるもので、いわゆる neofetch
の Windows 版みたいなものである。なんと、Scoop のパッケージ導入数とかも出てきて面白い。今回のやり方の限りでは、scoop install winfetch
ですぐ動かせる。scoop bucket add extras
が予め必要なのでご注意。
Discussion
すべてがめんどくさくなり嫌になったので、Starship に移行したことを書いておきます。
いずれ Starship + PS の構成の話を書こうと思います。いつか。