Windows 11 のカスタマイズ

no extension

いやぁ Windows をゼロからカスタマイズするのって久しぶりでさ。 色々忘れちゃってるわけさ。

というわけでこの記事は,前回セットアップしたミニPCのカスタマイズで試行錯誤した作業記録である。

Firefox 導入

とりあえず既定ブラウザは Firefox で。

アドオンは uBlock OriginKagi Search for Firefox を入れる。 Kagi Search については以下を参照のこと。

最新の PowerShell を入れる

まずは Scoop を入れたいところだが Windows Terminal を開くと

PowerShell on Windows Terminal (1)

とか言われる。 折角なので最新の PowerShell を入れておこう。

インストールは Microsoft Store からできる。 インストールすると Windows Terminal にも設定が反映されて

PowerShell on Windows Terminal (2)

てな感じにできる。

Scoop でトラブる

では,いよいよ Scoop をインストールする。 Windows Terminal で PowerShell を開いて

PS > Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
PS > Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression

とすればOK。 これで環境変数 PATH への登録も完了している。

動作確認も兼ねて git をインストールしてみる。

PS C:> scoop install git
Installing '7zip' (24.09) [64bit] from 'main' bucket
7z2409-x64.msi (1.9 MB) [========================================] 100%
Checking hash of 7z2409-x64.msi ... ok.
Extracting 7z2409-x64.msi ... ERROR Exit code was 1603!

Git をインストールするために解凍ツールの 7-Zip をインストールするのだが 7-Zip の解凍に失敗してるやん orz

ググってみたら Issue で上がっていたのだが,その通りにやっても解決せず。 しょうがないので Scoop の PowerShell スクリプトを眺めてみると,どうやら

PS > scoop config use_external_7zip true

と唱える1 ことで Scoop 外の手動インストールした 7-Zip を使ってくれるらしい。 それじゃあ 7-Zip を手動でインストールして use_external_7zip を有効にしてみよう。

PS C:\Users\username> scoop config use_external_7zip true
'use_external_7zip' has been set to 'true'
PS C:\Users\username> scoop install git
Installing 'git' (2.47.1) [64bit] from 'main' bucket
PortableGit-2.47.1-64-bit.7z.exe (60.0 MB) [===================================] 100%
Checking hash of PortableGit-2.47.1-64-bit.7z.exe ... ok.
Extracting PortableGit-2.47.1-64-bit.7z.exe ... done.
Linking ~\scoop\apps\git\current => ~\scoop\apps\git\2.47.1
Creating shim for 'sh'.
Creating shim for 'bash'.
Creating shim for 'git'.
Creating shim for 'gitk'.
Making C:\Users\username\scoop\shims\gitk.exe a GUI binary.
Creating shim for 'git-gui'.
Making C:\Users\username\scoop\shims\git-gui.exe a GUI binary.
Creating shim for 'scalar'.
Creating shim for 'tig'.
Creating shim for 'git-bash'.
Making C:\Users\username\scoop\shims\git-bash.exe a GUI binary.
Creating shortcut for Git Bash (git-bash.exe)
Creating shortcut for Git GUI (git-gui.exe)
Running post_install script...done.
'git' (2.47.1) was installed successfully!
Notes
-----
Set Git Credential Manager Core by running: "git config --global credential.helper manager"

To add context menu entries, run 'C:\Users\username\scoop\apps\git\current\install-context.reg'

To create file-associations for .git* and .sh files, run
'C:\Users\username\scoop\apps\git\current\install-file-associations.reg'

今度は上手くいった。 Git の設定はのちほど(commit/push とかしない限り,とりあえず無問題)。

これで 7-Zip をコントロールできるってことは zstd をサポートしていない問題もどうにかなるんじゃないだろうか。 機会があれば試してみようか。

ちなみに Scoop 自体をアンインストールしたい場合は

PS > scoop uninstall scoop

でいけるようだ。 これで環境変数 PATH への記述も綺麗に消してくれる。 これで上手く行かない場合は,最悪 scoop フォルダを力技で削除する(笑)

PS C:\Users\username> del .\scoop -Force

この状態で再度インストールした直後に scoop uninstall scoop すれば綺麗にアンインストールできる。 でも scoop config で設定した内容は削除できないんだよなぁ。 レジストリにもないっぽいし,どこに保存されてるんだろう。

NYAGOS を導入して WIndows Terminal の shell として構成する

(詳しくは NYAGOS 作者による「scoop / nyagos で始めるコマンドライン生活」を参照のこと)

ようやく NYAGOS をインストールできる。

PS > scoop install nyagos
Installing 'nyagos' (4.4.16_0) [64bit] from 'main' bucket
nyagos-4.4.16_0-windows-amd64.zip (2.4 MB) [=================================] 100%
Checking hash of nyagos-4.4.16_0-windows-amd64.zip ... ok.
Extracting nyagos-4.4.16_0-windows-amd64.zip ... done.
Linking ~\scoop\apps\nyagos\current => ~\scoop\apps\nyagos\4.4.16_0
Creating shim for 'nyagos'.

おー。 ちゃんと最新バージョンだな。 ありがたや 🙇

次に NYAGOS を プロファイルに追加する。 こんな感じ。

Settings Windows Terminal (1)

JSON だとこんな感じ。

{
    "commandline": "%USERPROFILE%\\scoop\\shims\\nyagos.exe",
    "guid": "{ce45bb84-5d8b-49a4-be7d-47d0449207c5}",
    "hidden": false,
    "icon": "none",
    "name": "nyagos",
    "startingDirectory": "%USERPROFILE%"
}

guid は勝手に割り振られる値なのでご注意を。

ついでに既定の shell を NYAGOS にする。

Settings Windows Terminal (2)

では改めて Windows Terminal を起動してみよう。

NYAGOS on Windows Terminal

よーし,うむうむ,よーし。 やっとこれで馴染みのあるコンソールになったよ。 ところで NYAGOS って2024年で10周年だったんだな。 おめでとうございます。

自作ツールを導入する

詳しくは「オレオレ Scoop Bucket を作ってみた」を参照のこと。

ここでは作業記録のみ残しておく。

$ scoop bucket add goark https://github.com/goark/scoop-bucket
Checking repo... OK
The goark bucket was added successfully.

$ scoop search gpgpdump
Results from local buckets...

Name     Version Source Binaries
----     ------- ------ --------
gpgpdump 0.15.7  goark

$ scoop install gpgpdump
Installing 'gpgpdump' (0.15.7) [64bit] from 'goark' bucket
gpgpdump_0.15.7_Windows_64bit.zip (3.6 MB) [=================================] 100%
Checking hash of gpgpdump_0.15.7_Windows_64bit.zip ... ok.
Extracting gpgpdump_0.15.7_Windows_64bit.zip ... done.
Linking ~\scoop\apps\gpgpdump\current => ~\scoop\apps\gpgpdump\0.15.7
Creating shim for 'gpgpdump'.
'gpgpdump' (0.15.7) was installed successfully!

$ gpgpdump.exe version
gpgpdump v0.15.7
repository: https://github.com/goark/gpgpdump

問題なさそうだな。

GnuPG を導入する

ScoopGnuPG のバージョンを確認する。

$ scoop search gnupg
Results from local buckets...

Name   Version Source Binaries
----   ------- ------ --------
gnupg  2.4.7   main
gnupg1 1.4.23  main

よしよし。 ちゃんと安定版 2.4 系の最新バージョンになってるな。 それではインストールしよう。

$ scoop install gnupg
Installing 'gnupg' (2.4.7) [64bit] from 'main' bucket
Loading gnupg-w32-2.4.7_20241125.exe from cache
Checking hash of gnupg-w32-2.4.7_20241125.exe ... ok.
Extracting gnupg-w32-2.4.7_20241125.exe ... done.
Running installer script...done.
Linking ~\scoop\apps\gnupg\current => ~\scoop\apps\gnupg\2.4.7
Adding ~\scoop\apps\gnupg\current\bin to your path.
Persisting home
'gnupg' (2.4.7) was installed successfully!

$ gpg --version
gpg (GnuPG) 2.4.7
libgcrypt 1.11.0
Copyright (C) 2024 g10 Code GmbH
License GNU GPL-3.0-or-later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: C:\Users\username\scoop\apps\gnupg\current\home
Supported algorithms:
Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2

$ gpg-connect-agent /bye
gpg-connect-agent: gpg-agentが動いていません - 開始します'C:\\Users\\username\\scoop\\apps\\gnupg\\current\\bin\\gpg-agent.exe'
gpg-connect-agent: agent の起動のため、8秒待ちます...
gpg-connect-agent: agentへの接続が確立しました

おっ。 ちゃんと gpg-agent が動く。 以前 Scoop 版の gpg-agent動かない現象があったが,今は問題なさそうだな。

ここで ssh 接続にも使える鍵を生成しておこう。 鍵の作成方法は以下を参照のこと。

作成した鍵の ssh 公開鍵を GitHub に上げておく。

PuTTY の導入

winget を使って PuTTY を導入しようと思ったのだが

PS > winget search putty
ソースを更新できませんでした: winget
ソースの検索中にエラーが発生しました;結果は含まれません: winget
名前                                             ID             バージョン ソース
-----------------------------------------------------------------------------------
PuTTY                                            XPFNZKSKLBP7RJ Unknown    msstore
SSH Client: Terminal, SFTP, Mosh, Telnet & Putty 9PKGBV7S35T0   Unknown    msstore

あれ? winget ってまともに動いてないのか? しょうがない。 手動で入れよう。 と思ってダウンロードページから msi ファイルをダウンロードしてインストーラを起動しようとしたら失敗した。 これ Scoop7-Zip をインストールして失敗した症状と同じか? そもそも msi でのインストールができなくなってる? うーん,分からん。

それじゃあ PuTTY-ranvis 版にするか。 7z 圧縮されたファイルをダウンロードして展開して手動で PATH を通した。

前節で鍵を作って GitHub に ssh 公開鍵を登録してあることが前提。 GnuPG のホームディレクトリに gpg-agent.conf ファイルを作成して以下の記述を行う。

enable-putty-support

gpg-agent を再起動して gpg-agent.conf ファイルの設定を読み込ませる。

$ gpg-connect-agent killagent /bye
OK closing connection

$ gpg-connect-agent killagent /bye
gpg-connect-agent: no running gpg-agent - starting 'C:\\Users\\username\\scoop\\apps\\gnupg\\current\\bin\\gpg-agent.exe'
gpg-connect-agent: waiting for the agent to come up ... (8s)
gpg-connect-agent: connection to the agent established
OK closing connection

これで PuTTYpageant の代わりに gpg-agent が秘密鍵の管理を行う(厳密には gpg-agent は秘密鍵を保持せずパスフレーズのみ短期間保持する)。 試しに GitHub に接続してみよう。

$ plink git@github.com
Using username "git".
Access granted. Press Return to begin session.

大丈夫そうかな。

git から PuTTY を使って ssh 接続できるように環境変数 GIT_SSHplink.exe のフルパスをセットすること。

パッケージマネージャは管理者権限下で使う

どうも msi ファイルを起動してインストールを行う際は管理者権限が必要らしい。 Windows Terminal を管理者権限で起動して

$ msiexec /i installer.msi

などとやったら問題なくインストールできた。 エクスプローラから msi ファイルを起動する場合は管理者権限にならないので注意。 またアンインストールの際には

$ msiexec /x installer.msi

でアンインストールする。 設定の [アプリ][インストールされているアプリ] のアプリ一覧からアンインストールしようとしても失敗するので,こちらも注意。

Scoop も管理者権限下であれば 7-Zip をインストールできた。 winget も管理者権限下ならまともに動く。

$ winget search putty
名前                                             ID                          バージョン  一致       ソース
-----------------------------------------------------------------------------------------------------------
PuTTY                                            XPFNZKSKLBP7RJ              Unknown                msstore
SSH Client: Terminal, SFTP, Mosh, Telnet & Putty 9PKGBV7S35T0                Unknown                msstore
PuTTY                                            PuTTY.PuTTY                 0.82.0.0               winget
NETworkManager                                   BornToBeRoot.NETworkManager 2024.6.15.0 Tag: putty winget
PortX                                            NetSarangComputer.PortX     2.2.12      Tag: putty winget
PuTTY CAC                                        NoMoreFood.PuTTY-CAC        0.82.0.1    Tag: putty winget
MTPuTTY                                          TTYPlus.MTPutty             1.8         Tag: putty winget
SuperPuTTY                                       JimRadford.SuperPuTTY       1.5.0                  winget

$ winget install PuTTY.PuTTY
見つかりました PuTTY [PuTTY.PuTTY] バージョン 0.82.0.0
このアプリケーションは所有者からライセンス供与されます。
Microsoft はサードパーティのパッケージに対して責任を負わず、ライセンスも付与しません。
ダウンロード中 https://the.earth.li/~sgtatham/putty/0.82/w64/putty-64bit-0.82-installer.msi
  ██████████████████████████████  3.62 MB / 3.62 MB
インストーラーハッシュが正常に検証されました
パッケージのインストールを開始しています...
インストールが完了しました

パッケージマネージャを使う場合は管理者権限にしろってことか。 と考えるなら納得できなくもないが,こんな面倒臭かったっけ? とりあえず msi ファイルを直に扱うのはやめたほうがいいということは分かった。

カスタマイズ作業はまだまだ続く

けど,セットアップが面倒そうなのは終わったかな。 一休みして続きをしよう。

インストールメモ

ブックマーク

作業中の BGV


  1. scoop config <name> <value> で設定した値を削除するには scoop config rm <name> を唱える。詳しくは scoop help config を参照のこと。 ↩︎