PowerShellによるWindowsコマンドライン生活事始め

# PowerShell生活を始めよう

他のOSではスタンダードなBashを始め、Zsh・Fishといった便利なシェルを使うことができます。
しかし、Windowsは現在PCやスマホで利用されているOSの中では異質な系統であり、古い・使いにくい・低機能と三拍子揃ったコマンドプロンプト(CMD)か、高機能なもののBashなどとは異質なPowerShellかの2択しかありません。

コマンドプロンプトはレガシーになりつつありますので、本記事では、PowerShellを利用したコマンドライン生活を送るためのTipsをまとめます。

# PowerShell 7のダウンロード

Windowsに最初からインストールされているWindows PowerShell 5はIEや旧Edge同様消えゆく運命です。また、6以降は他のOSでも使えます。最新の潮流に乗りましょう。

Microsoftストアで「PowerShell」と検索してインストールする（推奨）か、GitHubからダウンロードしてください。

https://www.microsoft.com/ja-jp/p/powershell/9mz1snwt0n5d

https://github.com/PowerShell/PowerShell/releases/latest

# Visual Studio Codeのダウンロード

最近はPowerShellスクリプトの公式エディタがこれになりつつあります。

https://code.visualstudio.com/download

からダウンロード・インストールしましょう。Microsoftストア版もあります。

# PowerShellの設定

## スクリプト許可設定

```powershell
Set-ExecutionPolicy RemoteSigned -Scope User
```

## プロファイル内設定

```powershell
Set-PSReadlineOption -EditMode Vi # ←Vimが使えないなら「Emacs」に
Set-PSReadLineKeyHandler -Key Tab -Function MenuComplete
Set-Alias poweroff Stop-Computer
Set-Alias reboot Restart-Computer
```

# パッケージマネージャ等の準備

Windows以外のOSでは、コマンドラインからソフトをインストールするのが主流となっています。Windowsでもその潮流に乗ってしまいましょう。

## Chocolateyのインストール

GUIのソフト向けです。

https://chocolatey.org/install

```powershell
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
```

## Scoopのインストール

こちらは主にコマンドラインからしか使わないソフトをインストールするのに便利です。

https://scoop.sh/

```powershell
iwr -useb get.scoop.sh | iex
```

### sudoのインストール

Chocolateyは管理者権限を要求するので、このスクリプトがあると便利です。

```powershell
scoop install psutils
```

代わりにgsudoをインストールしてもよいでしょう。（その場合、以下の`sudo`はすべて`gsudo`に置き換え）

```powershell
scoop install gsudo 
```

### NeoVimのインストール

Visual Studio Codeを使うまでもなく、コマンドライン上でサクッとファイルを編集したい場合には大いに役に立ちます。WindowsでVimを使いたい場合はこれがイチオシです。

```powershell
scoop install neovim
```

## コンソール用フォントのインストール

- [Firge](https://github.com/yuru7/Firge)（Fira Mono + 源真ゴシック）
- [HackGen](https://github.com/yuru7/HackGen)（Hack + 源柔ゴシック）
- [Cica](https://github.com/miiton/Cica)（Hack + DejaVu Sans Mono + Rounded Mgen+）
- [Myrica / Myrica M](https://myrica.estable.jp/)（Inconsolata + 源真ゴシック/Mgen+）

スラッシュゼロが好みならFirgeかMyrica。

<https://github.com/yuru7/Firge>

<https://github.com/yuru7/HackGen>

<https://github.com/miiton/Cica>

<https://myrica.estable.jp/>

# Windows Terminalのダンロード

MS謹製、新進気鋭のターミナルソフトです。Microsoft Storeから検索してダウンロードしましょう。

https://www.microsoft.com/ja-jp/p/windows-terminal/9n0dx20hk701

設定は`Ctrl`+`,`で簡単にアクセスできます。

## おすすめ設定

- スタートアップ: 規定のターミナル→「PowerShell」（Windowsではない方） / 「既定のターミナルアプリケーション」（Windows 11のみ）→Windows Terminal / 新しいインスタンスの動作→最近使用しウインドウに接続する（ウインドウの数が増えすぎないように）
- プロファイル→既定値: 外観→フォントフェイス→（インストールしたフォント）

## Hyperのインストール

（参考）サードパーティ製の中では最高のターミナルです。Windows Terminalが出る前はほぼこれ一択でした。

```powershell
sudo cinst -y hyper
```

### Hyperの設定

```powershell
code $env:APPDATA\Hyper\.hyper.js
```

```
    fontFamily: 'Cica, (中略)',
````

HyperからPowerShell(5)を起動するには、`shell`・`shellArgs`を以下のように変更します。

```
    shell: 'C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe',
    shellArgs: ["-NoLogo"],
```

PowerShell 7の場合は`shell`の値を次のようにします。（GitHubからダウンロード・インストールした場合）

```
'C:\\Program Files\\PowerShell\\7\\pwsh.exe'
```

`shellArgs`に`-NoLogo`を指定しなくてもよいですが、毎回以下のバナーが表示されます。

```
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

```

## PSGalleryを信頼

https://tomoh1r.github.io/blog/2016/11201_how_to_make_psgallery_trusted_repository.html

```powershell
Set-PSRepository -Name PSGallery -InstallationPolicy Trusted
```

# Oh-My-Posh

PowerShellのプロンプトを見栄え良くするモジュールです。

https://github.com/JanDeDobbeleer/oh-my-posh

```powershell
Install-Module posh-git,oh-my-posh -Scope CurrentUser
```

```powershell
code $PROFILE
```

```powershell
if ((Get-Command Set-Theme -ErrorAction Ignore)) {
  Set-Theme Agnoster
}
```

# cURL・SSH・Git

```powershell
rm alias:curl
# 正式: Remove-Item Alias:\curl ※↑PowerShell 5のみ

cinst -y git
```

PowerShell 7では、すでに`curl`がエイリアスから除外されています。

~~最近のWindows 10はOpenSSHをバンドルしていますが、更新が追いついていないので、最新のものが使いたければ、次のコマンドでインストールします。~~ 不要になりました

```powershell
cinst -y openssh
```

```powershell
(gcm openssh).path
```

~~OpenSSHのパスが変わっていない場合、次の手順でパスの優先度をいじります。~~

~~(`Win` + `I` → システム → バージョン情報 → システム設定(右上)) or `Win` + `Pause` でシステム情報ウインドウを開く
システムの詳細設定(左側)をクリックしてダイアログを開く →　環境変数 → システムの「`Path`」を選択 → 編集 → `%SYSTEMROOT%\System32\OpenSSH\` を `C:\Program Files\OpenSSH-Win64` より下に移動 → OK3回~~