Windows 用演習環境の構築 (WSL の場合)

本資料の想定環境は「はじめに」の「想定している環境について」で述べた通りですが、 Windows 10 または 11 上の WSL に導入した Ubuntu を POSIX 環境として用います。

WSL 導入の事前準備 (Windows Update)

以降の WSL 導入手順は Windows 10 2004 以降と Windows 11 で有効です。

ただし Windows 10 は 2004 以降のバージョンであっても 21H1 以前のバージョンは 2022-12-13 時点でサポート提供期間が終了しています。 また、一つ前のバージョンである Windows 10 21H2 は今回の演習開始直後の 2023-06-13 でサポートが終了します 1。 Windows 10 を利用している場合は、最新版の Windows 10 22H2 に更新した上で作業に当たってください。

Windows 11 は初期バージョンの 21H2 であっても 2023-10-10 まで余裕がありますが 2、手元に 21H2 の環境がないため細かい動作の違い等まで確認出来ません。最新版の 22H2 に更新した上で作業に当たってもらったほうが良いでしょう。

1

Windows 10 の各バージョンにおけるサポート期間の詳細は以下のページを参照してください。

2

Windows 11 の各バージョンにおけるサポート期間の詳細は以下のページを参照してください。

使用中の Windows のバージョンを確認するには、 キーボードから [田 (Windows Logo Key)]+[R] キーを叩いて 「ファイルを指定して実行」ダイアログを開き、 「名前」の欄に「winver」と入力して (リスト 2図 5) [ENTER] キーを叩いてください。 winver のダイアログが開き、使用中の Windows のバージョンを確認出来ます(図 6)。

リスト 2 winver コマンド
winver
_images/fig_run_winver.png

図 5 ファイル名を指定して実行 (winver)

_images/fig_winver_Windows10Pro_22H2.png

図 6 winver (Windows10 Pro バージョン 22H2)

もし、Windows 10 21H2 以前のバージョンを用いている場合は、 まず 22H2 への更新(アップデート)を行って下さい。

Windows Update を用いると自動更新が可能なはずです。 Windows 10 の場合は [設定]→[更新とセキュリティ]→[Windows Update] から、 Windows 11 の場合は [設定]→[Windows Update] から開けます。

もし、Windows Update による自動更新が上手く行かない場合は、 Microsoft から入手可能な Windows の最新版 ISO イメージを用いると 手動で更新可能なはずです。 最新版 Windows の更新ファイル及び ISO イメージは以下から入手可能です。

上手く更新できない場合は相談してください。

WSL 導入の事前準備 (CLI の調整)

PowerShell の文字化け対策

PowerShell で後述の winget コマンドを実行すると 図 7 のように文字化けする場合があります。 これを防ぐ設定をしておきましょう。

_images/fig_winget_char_corruption.png

図 7 PowerShell 上で winget を実行した際に生じた文字化け

PowerShell の起動方法」で紹介した方法で PowerShell を開いて、 リスト 3 を PowerShell にコピペ 3 して実行してください。 この設定は、一般ユーザー権限でも可能です。 PowerShell を一旦閉じたら設定は終了です。

3

この資料では リスト 3 のようにコマンドの下に「Copy」ボタンがある場合、 これをクリックすると、コマンドがクリップボードにコピーされます。 PowerShell に貼り付けて実行するには、PowerShell のウインドウでマウスの右ボタンをクリックするか、 [SHIFT]+[INTERT] キーを叩いてください。

リスト 3 PowerShell の文字化け防止コマンド
cd "$Env:USERPROFILE\Downloads"
powershell.exe -C "&{reg.exe EXPORT HKCU\Console HKCU%2FConsole.$(Get-Date -Format yyyyMMdd_HHmmss).reg}"
reg.exe ADD    HKCU\Console                                                             /f /v FaceName /d __DefaultTTFont__
reg.exe ADD    HKCU\Console\%SystemRoot%_System32_WindowsPowerShell_v1.0_powershell.exe /f /v FaceName /d __DefaultTTFont__
reg.exe ADD    HKCU\Console\%SystemRoot%_SysWOW64_WindowsPowerShell_v1.0_powershell.exe /f /v FaceName /d __DefaultTTFont__

なお、「スタート」メニューから「PowerShell」を探して開く方法は、 文字化け対策の方法が上記の方法とは異なります。

「スタート」メニューから「PowerShell」を探して開く方法では、 Windows 11 は標準で文字化けしない設定になっているはずですが、 Windows 10 は文字化けするはずです。 文字化けする場合は次の手順で設定を行って下さい。

  1. PowerShell のウインドウ左上のアイコンをクリックしてポップアップメニューを開く

  2. 「プロパティ」選んで、設定ダイアログを開く。

  3. 「フォント」タブを開き、「MS ゴシック」等の日本語フォントを設定する

  4. 「OK」をクリックして設定ダイアログを閉じる。

これでダメな場合は、別のフォントに設定変更した後「MS ゴシック」に戻してみてください。

winget の初期設定

winget は Windows 10 で導入された CLI 形式のパッケージマージャ―です。 初回の実行時に Microsoft Store における販売条件への同意を求められます。

PowerShell の起動方法」で紹介した方法で PowerShell を開いて、 リスト 4 を PowerShell にコピペして実行してみてください。

リスト 4 winget でインストール済みの Terminal を検索するコマンド
winget list -q Terminal

winget を始めて実行した場合、リスト 5図 8 のような確認を求められます。 ここで、 https://aka.ms/microsoft-store-terms-of-transaction にある Microsoft Store の販売条件について同意を行うと winget が利用可能になります。 同意するには [Y] キーを叩いた後、[ENTER] キーを叩いてください。

リスト 5 winget 初回実行時の確認事項
PS C:\Users\kou> winget list -q Terminal
'msstore' ソースを使用するには、使用する前に次の契約を表示する必要があります。
Terms of Transaction: https://aka.ms/microsoft-store-terms-of-transaction
ソースが正常に機能するには、現在のマシンの 2 文字の地理的リージョンをバックエンド サービスに送信する必要があります (例: "US")。

すべてのソース契約条件に同意しますか?
[Y] はい  [N] いいえ:
_images/fig_winget_firsttime_exec.png

図 8 winget 初回実行時の確認事項

ちなみに

この表示は一度同意すると、次回以降は行われません。 もし同意を取り消して再表示したい場合は、管理者権限で実行した PowerShell に リスト 6 をコピペして実行すると、リスト 7 のように同意のリセットが行われます。(今はリセットする必要がないので実行する必要はありません。)

リスト 6 winget のソース契約条件への同意を解除するコマンド
winget source reset --force
リスト 7 winget のソース契約条件への同意を解除するコマンドの実行結果
PS C:\WINDOWS\system32> winget source reset --force
すべてのソースをリセットしています...完了

Windows Terminal の導入

Windows の新しい terminal emulator である Windows Terminal の導入状況を確認しましょう。 Windows 11 の人は既に導入済みのはずですが、Windows 10 の人はまだ入ってないはずです。

winget の初回実行時の確認事項(リスト 5図 8)に同意したら、 前出の winget でインストール済み Terminal の検索するコマンド をもう一度 PowerShell にコピペして実行してみましょう。 Windows Terminal が導入済の場合は リスト 8、 Windows Terminal が未導入の場合は リスト 9 のような結果となるはずです。

リスト 8 Windows Terminal が導入済の場合
PS C:\WINDOWS\system32> winget list -q Terminal
名前               ID                        バージョン   ソース
-----------------------------------------------------------------
Windows ターミナル Microsoft.WindowsTerminal 1.16.10261.0 winget
リスト 9 Windows Terminal が未導入の場合
PS C:\WINDOWS\system32> winget list -q Terminal
入力条件に一致するインストール済みのパッケージが見つかりませんでした。

Windows Terminal が未導入の場合は、リスト 10 を PowerShell にコピペして実行すると Windows Terminal が導入されます(リスト 11)。

リスト 10 winget による Windows Terminal の導入コマンド
winget install Microsoft.WindowsTerminal
リスト 11 winget による Windows Terminal の導入コマンド実行結果
PS C:\WINDOWS\system32> winget install Microsoft.WindowsTerminal
見つかりました Windows Terminal [Microsoft.WindowsTerminal] バージョン 1.16.10261.0
このアプリケーションは所有者からライセンス供与されます。
Microsoft はサードパーティのパッケージに対して責任を負わず、ライセンスも付与しません。
ダウンロード中 https://github.com/microsoft/terminal/releases/download/v1.16.10261.0/Microsoft.WindowsTerminal_Win10_1.16.10261.0_8wekyb3d8bbwe.msixbundle
  ██████████████████████████████  37.9 MB / 37.9 MB
インストーラーハッシュが正常に検証されました
パッケージのインストールを開始しています...
  ██████████████████████████████  100%
インストールが完了しました

注意

なお、稀に最新バージョンがインストールできない場合があるようで、 2022年度の講義資料作成中、 リスト 10 ではインストールできない状況を確認しています。 おそらくタイミングが悪かっただと思うのですが、 その際は、リスト 12 のようにすることで、最新バージョンを新しい順に 5 つ選んでインストールを試行することにより、一つ前のバージョンをインストールすることが出来ました(リスト 13)。

リスト 12 winget による Windows Terminal の導入コマンド(最新バージョンを新しい順に5つ試す)
powershell.exe -C '&{$pkg=$Args[0];$n=$Args[1];winget show $pkg --versions|select -Skip 4|sort -Descending {[Version]$_}|select -First $n|% {echo $_;winget install $pkg --version $_;if($?){break}}}' Microsoft.WindowsTerminal 5
リスト 13 winget による Windows Terminal の導入コマンド(最新バージョンを新しい順に5つ試す)実行結果
PS C:\WINDOWS\system32> powershell.exe -C '&{$pkg=$Args[0];$n=$Args[1];winget show $pkg --versions|select -Skip 4|sort -Descending {[Version]$_}|select -First $n|% {echo $_;winget install $pkg --version $_;if($?){break}}}' Microsoft.WindowsTerminal 5
1.12.10983.0
該当するインストーラーが見つかりません。詳細については、ログを参照してください。
1.12.10982.0
見つかりました Windows Terminal [Microsoft.WindowsTerminal] バージョン 1.12.10982.0
このアプリケーションは所有者からライセンス供与されます。
Microsoft はサードパーティのパッケージに対して責任を負わず、ライセンスも付与しません。
インストーラーハッシュが正常に検証されました
パッケージのインストールを開始しています...
  ██████████████████████████████  100%
インストールが完了しました

WSL の導入 (Windows 10 及び Windows 11 で 22H2 以降の場合)

警告

前述の通り、2023-05-25 現在、21H1 以前の Windows 10 は既にサポート提供期間が終了しており、 一つ前のバージョンである 21H2 も間もなく(2023-06-13 に)サポート提供期間が終了します。 Windows 10 を利用している場合はバージョン 22H2 に更新した上で以下の手順を行って下さい。

また、22H2 未満では Microsoft Store 版が使用可能かどうかが不明です。 従来板である inbox 版 (Windows コンポーネント版) よりも Microsoft Store 版の方が機能が充実しているため、 Windows 11 も最新版の 22H2 にした上で作業を行ってもらったほうが良いでしょう。

注釈

Windows 10 2004 よりも前のバージョンについては wsl --install による WSL 導入が出来ません。 これらの環境については、利用を推奨しませんが、2004 以降でも以前のバージョンと同じように 手動で導入するケースも考えられるため WSL に関する補足 に以前の導入方法をまとめています。

また、2022年11月以前は inbox 版 (Windows コンポーネント版) のみが利用可能でしたが、 2022年11月以降は Microsoft Store 版の提供が開始され、現在は Microsoft Store 版が標準となっています。 インストールの際 --inbox オプションを追加することで従来の inbox 版を選択することも可能ですが、 あえて inbox 版を選択するメリットはないでしょう。

ここからの作業は、管理者権限で起動した PowerShell をで行う必要があります。 まず、「PowerShell の起動方法」で紹介した方法で、 管理者権限で Windows PowerShell のウインドウを開いてください。

管理者権限の PowerShell が開いたら、wsl --install -d Ubuntu (リスト 14)と入力して [ENTER] キーを叩けば WSL のインストールが開始されます(リスト 15)。

リスト 14 WSL と Ubuntu のインストールコマンド
wsl --install -d Ubuntu
リスト 15 WSL のインストール(途中経過)
PS C:\WINDOWS\system32> wsl --install -d Ubuntu
インストール中: 仮想マシン プラットフォーム
[=================         30.0%                           ]

無事インストールが終了すると、リスト 16 のように再起動を促されますので、Windows を再起動してください。

リスト 16 WSL のインストール(正常終了、再起動待ち)
PS C:\WINDOWS\system32> wsl --install -d Ubuntu
インストール中: 仮想マシン プラットフォーム
仮想マシン プラットフォーム はインストールされました。
インストール中: Linux 用 Windows サブシステム
Linux 用 Windows サブシステム  はインストールされました。
インストール中: Linux 用 Windows サブシステム
Linux 用 Windows サブシステム  はインストールされました。
インストール中: Ubuntu
Ubuntu はインストールされました。
要求された操作は正常に終了しました。変更を有効にするには、システムを再起動する必要があります。
PS C:\WINDOWS\system32>

再起動後、WSL が自動的に起動してユーザー名 (リスト 17) と パスワード登録を確認のため 2 度 (リスト 18リスト 19) 要求されます。 ユーザー名は半角の英数字、パスワードは半角の英数字及び記号を組み合わせて登録しましょう。 パスワードを失念すると WSL の環境を一旦消して再構築する必要が生じるので注意してください。 親環境である Windows のユーザー名とパスワードに揃えられる場合は揃えておくとよいでしょう。

リスト 17 初回起動時の WSL とユーザー名の登録
Ubuntu は既にインストールされています。
Ubuntu を起動しています...
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username:
リスト 18 初回起動時の WSL とパスワードの登録(1回目)
Ubuntu は既にインストールされています。
Ubuntu を起動しています...
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: USERNAME
New password:
リスト 19 初回起動時の WSL とパスワードの登録(2回目)
Ubuntu は既にインストールされています。
Ubuntu を起動しています...
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: USERNAME
New password:
Retype new password:
リスト 20 初回起動時の WSL と登録完了
Ubuntu は既にインストールされています。
Ubuntu を起動しています...
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: USERNAME
New password:
Retype new password:
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.90.1-microsoft-standard-WSL2 x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage


This message is shown once a day. To disable it please create the
/home/kou/.hushlogin file.
USERNAME@HOSTNAME:~$

以上で WSL の導入は完了です。

WSL の起動方法

WSL で Ubuntu を開くには以下の手順を推奨します。

  1. キーボードから [田 (Windows Logo Key)]+[R] キーを叩き「ファイルを指定して実行」ダイアログを開く。

  2. 「名前」の欄に ubuntu と入力し(リスト 21図 1) [ENTER] キーを叩く。

リスト 21 ubuntu コマンド
ubuntu
_images/fig_run_ubuntu.png

図 9 「ファイル名を指定して実行」ダイアログから Ubuntu を起動する。

以上で、conhost 上で動く WSL の Ubuntu のウインドウが開きます(図 10)。

_images/fig_WSL_conhost.png

図 10 conhost 上で動く WSL の Ubuntu

POSIX 環境では、様々な作業を行う際に、current directory (現在のディレクトリ) もしくは working directory (作業ディレクトリ)という概念があります。 コマンドラインの端に表示されている USERNAME@HOSTNAME:~$ の末尾の $ の直前にある ~ の部分がそれを意味しています。 ~ は HOME directory を意味しており、実体は /home/USERNAME です。

explorer.exe でこの場所を開くには、リスト 22 のコマンドを実行します。 explorer.exe は WSL 上から様々なファイルを開く事が出来るコマンドで、引数として与えた . が current directory を意味しています。

リスト 22 WSL の作業ディレクトリを開くコマンド
explorer.exe .

Ubuntu に wslu と呼ばれるパッケージをインストールしておくと リスト 23 のコマンドでも同様の事が出来ます。 wslview は WSL 上から様々なファイルを開く事が出来るコマンドです。 2022年5月の時点だと wslu パッケージは WSL 上の Ubuntu (20.04) に自動的にインストールされていたと記憶していますが、2023年5月26日の時点だと WSL 上の Ubuntu (22.04) には自動でインストールされていませんでした。

リスト 23 WSL の作業ディレクトリを開くコマンド(wslview)
wslview .

explorer.exe で作業ディレクトリを開いた結果が 図 11 です。 アドレス欄には「📂 > ネットワーク > wsl.localhost > Ubuntu > home > USERNAME」のように表示されていますが、 アドレス欄をクリックすると \\wsl.localhost\Ubuntu\home\USERNAME のように ネットワーク上の共有フォルダを表すときと同じ UNC (Universal Naming Convention) で表された PATH 名を確認することができます。 Windows から見ると WSL の管理しているファイルやフォルダはネットワーク上の共有フォルダと同じように見える仕組みになっているので、UNC 表記の PATH を用いると Windows 側から WSL 上のファイルにアクセス出来ます。

_images/fig_explorer_wsl.png

図 11 作業ディレクトリを開いた結果

_images/fig_explorer_wsl_unc.png

図 12 作業ディレクトリを開いた結果(アドレス欄)

逆に WSL 側から Windows 側のファイルを参照したい場合は /mnt/c 以下に Windows の C: ドライブがマウントされているので、ここからアクセス出来ます。 C: ドライブ以外は手動でマウントを行う必要がありますが、先述の wslu パッケージに含まれる wslact コマンドを用いると、Windows に接続されているドライブを半自動でマウントする事も出来ます。

Linux シェルをここに開く

POSIX 環境では、様々な作業を行う際に 作業対象の保存されているディレクトリに current directory を移動してから作業をする必要があります。

GUI からシームレスに CLI に移行するための仕組みとして from here とよばれる機能みがあります。 ウインドウで開いているディレクトリを current cirectory にして CLI を開く機能です。

これは、ファルダのアイコンや、フォルダを開いたウインドウの余白部分を [SHIFT] キーを押しながら右クリックすると 「Linux シェルをここに開く」というメニュが表示されます(図 13)。

_images/fig_LinuxShellHere.png

図 13 Linux シェルをここに開くのコンテクストメニュー

Windows 11 では、表示されるコンテクストメニューが大きく変更されていますが、 一番下に表示される「その他のオプションを表示 Sift+F10」(図 14)から従来のコンテクストメニューを呼び出すことが出来ます。

_images/fig_Win11ContextMenu.png

図 14 Windows 11 のコンテクストメニュー

コンテキストメニューへ WSL Ubuntu Here の登録

OS のファイルマネージャー (Windows だと explorer.exe) で閲覧中のフォルダから、 作業ディレクトリを移動した状態で Windows Terminal から WSL の Ubuntu を開く機能を設定しましょう。

WSL への Ubuntu の導入と、Windows Terminal のインストールを済ませたら、 管理者権限で実行した PowerShell に リスト 24 内容をコピペして実行ください。

リスト 24 WSL Ubuntu here の登録コマンド
$icon=Get-AppxPackage|? Name -m Ubuntu|% {"$($_.InstallLocation)\$(($_|Get-AppPackageManifest).Package.Applications.Application.Executable)"} ;
New-Item         -Force -Path Registry::HKCU\SOFTWARE\Classes\Drive\Shell\WSLUbuntuHere
New-Item         -Force -Path Registry::HKCU\SOFTWARE\Classes\Drive\Shell\WSLUbuntuHere\command
New-ItemProperty -Force -Path Registry::HKCU\SOFTWARE\Classes\Drive\Shell\WSLUbuntuHere                        -Name "(Default)" -PropertyType ExpandString -Value "WSL Ubuntu here"
New-ItemProperty -Force -Path Registry::HKCU\SOFTWARE\Classes\Drive\Shell\WSLUbuntuHere                        -Name Icon        -PropertyType ExpandString -Value "`"$icon`""
New-ItemProperty -Force -Path Registry::HKCU\SOFTWARE\Classes\Drive\Shell\WSLUbuntuHere\command                -Name "(Default)" -PropertyType ExpandString -Value "`"%LOCALAPPDATA%\Microsoft\WindowsApps\wt.exe`" -d `"%L`" -p Ubuntu"
New-Item         -Force -Path Registry::HKCU\SOFTWARE\Classes\Directory\Shell\WSLUbuntuHere
New-Item         -Force -Path Registry::HKCU\SOFTWARE\Classes\Directory\Shell\WSLUbuntuHere\command
New-ItemProperty -Force -Path Registry::HKCU\SOFTWARE\Classes\Directory\Shell\WSLUbuntuHere                    -Name "(Default)" -PropertyType ExpandString -Value "WSL Ubuntu here"
New-ItemProperty -Force -Path Registry::HKCU\SOFTWARE\Classes\Directory\Shell\WSLUbuntuHere                    -Name Icon        -PropertyType ExpandString -Value "`"$icon`""
New-ItemProperty -Force -Path Registry::HKCU\SOFTWARE\Classes\Directory\Shell\WSLUbuntuHere\command            -Name "(Default)" -PropertyType ExpandString -Value "`"%LOCALAPPDATA%\Microsoft\WindowsApps\wt.exe`" -d `"%L`" -p Ubuntu"
New-Item         -Force -Path Registry::HKCU\SOFTWARE\Classes\Directory\Background\Shell\WSLUbuntuHere
New-Item         -Force -Path Registry::HKCU\SOFTWARE\Classes\Directory\Background\Shell\WSLUbuntuHere\command
New-ItemProperty -Force -Path Registry::HKCU\SOFTWARE\Classes\Directory\Background\Shell\WSLUbuntuHere         -Name "(Default)" -PropertyType ExpandString -Value "WSL Ubuntu here"
New-ItemProperty -Force -Path Registry::HKCU\SOFTWARE\Classes\Directory\Background\Shell\WSLUbuntuHere         -Name Icon        -PropertyType ExpandString -Value "`"$icon`""
New-ItemProperty -Force -Path Registry::HKCU\SOFTWARE\Classes\Directory\Background\Shell\WSLUbuntuHere\command -Name "(Default)" -PropertyType ExpandString -Value "`"%LOCALAPPDATA%\Microsoft\WindowsApps\wt.exe`" -d .      -p Ubuntu"

この設定を解除したくなった場合は、同様に管理者権限で実行した PowerShell から リスト 25 を実行時手下さい。

リスト 25 WSL Ubuntu here の登録解除コマンド
REG DELETE HKCU\SOFTWARE\Classes\Folder\Shell\WSLUbuntuHere /f
REG DELETE HKCU\SOFTWARE\Classes\Drive\Shell\WSLUbuntuHere /f
REG DELETE HKCU\SOFTWARE\Classes\Directory\Shell\WSLUbuntuHere /f
REG DELETE HKCU\SOFTWARE\Classes\Directory\Background\Shell\WSLUbuntuHere /f

この設定を登録しておくと、ファルダのアイコンや、フォルダを開いたウインドウの余白部分を右クリックすると「WSL Ubuntu here」のメニュが表示されます(図 15)。

_images/fig_WSLUbuntuHere.png

図 15 WSL Ubuntu here のコンテクストメニュー