🧰

1からWindowsの開発環境を構築する

2022/12/11に公開

私がWindowsの開発環境を1から構築する際の手順を公開したいと思います。

設定はなるべくコマンドで行うように心がけています。
コマンドで設定することにより、GUIの変更があっても同じ手順で実行でき、設定の自動化が行いやすくなるからです。

Windowsのバージョンは10・11ともに「Version 22H2」を想定しています。

ちなみに、Windowsのバージョンのリリース日は以下になっています。
https://learn.microsoft.com/ja-jp/lifecycle/products/windows-10-home-and-pro
https://learn.microsoft.com/ja-jp/lifecycle/products/windows-11-home-and-pro

構築する内容は以下になります。

  • winget
  • Windows Terminal
  • Windows Subsystem for Linux 2 (WSL2)
  • Visual Studio Code (VS Code)
  • Docker Desktop

構築

winget / Windows Terminal

Windows 10では winget および Windows Terminal がインストールされていないのでインストールします。

※ winget / Windows Terminal については以下。
https://learn.microsoft.com/ja-jp/windows/package-manager/winget/
https://learn.microsoft.com/ja-jp/windows/terminal/

winget インストール

Microsoft Store から「アプリ インストーラー」をインストール。

https://apps.microsoft.com/store/detail/9NBLGGH4NNS1

Windows Terminal インストール

コマンドプロンプトから winget を使いインストール。

CMD> winget install Microsoft.WindowsTerminal

gsudo インストール

管理者権限でターミナルを起動するのが、煩わしくなることがあるので、gsudo をインストールします。

Windows Terminalを起動しPowerShellからインストールします。

PS> winget install gerardog.gsudo
PS> $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")

sudo コマンドがすぐ使えるように環境変数を設定しています。

Windows 設定

# "登録されている拡張子は表示しない" チェックOFF
PS> Set-ItemProperty HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -name "HideFileExt" -Value 0

# "隠しファイル、隠しフォルダ、および隠しドライブを表示する" チェックON
PS> Set-ItemProperty HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -name "Hidden" -Value 1

# "自動的に現在のフォルダーまで展開する" チェックON
PS> Set-ItemProperty HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -name "NavPaneExpandToCurrentFolder" -Value 1

# ダークモード
PS> Set-ItemProperty HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize -Name AppsUseLightTheme -Value 0

# "高速スタートアップを有効にする" チェックOFF
PS> sudo Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Power" -Name HiberbootEnabled -Value 0

WSL2 インストール

PS> sudo wsl --install

オプションを設定しない場合は、Ubuntu がインストールされます。

ディストリビューションを指定する場合は以下になります。

PS> sudo wsl --install --distribution Debian

再起動します。

PS> Restart-Computer

再起動後、WSLが立ち上がります。
数分後、ユーザ名・パスワードの設定が促されるので設定します。

Windows アプリインストール

Windows Terminal を立ち上げ、PowerShellからインストールします。

# Git
PS> winget install Git.Git
# Visual Studio Code
PS> winget install Microsoft.VisualStudioCode
# Docker Desktop
PS> winget install Docker.DockerDesktop
# nano
PS> sudo winget install GNU.Nano

nano を導入し、PowerShellからエディタを使えるようにしています。
※Vimのインストールがうまくいかなかったため nano にしています。

その他

その他、自分が使うアプリをインストールします。
winget にないアプリでもPowerShellからインストールしています。

# DBeaver
PS> winget install dbeaver.dbeaver
# WinSCP
PS> winget install WinSCP.WinSCP
# Rlogin
PS> Invoke-WebRequest -Uri https://github.com/kmiya-culti/RLogin/files/9193732/rlogin_x64.zip -OutFile rlogin_x64.zip -UseBasicParsing
PS> Expand-Archive -Path rlogin_x64.zip -DestinationPath ./RLogin
PS> rm rlogin_x64.zip

再起動します。

PS> Restart-Computer

フォントインストール

プログラミング向けフォント「白源」をインストールします。(HackGen Console NFJ)

PS> Invoke-WebRequest -Uri https://github.com/yuru7/HackGen/releases/download/v2.7.1/HackGen_NF_v2.7.1.zip -OutFile HackGen_NF.zip -UseBasicParsing
PS> Expand-Archive -Path HackGen_NF.zip -DestinationPath .
PS> $fonts = (New-Object -ComObject Shell.Application).Namespace(0x14)
PS> dir HackGen_NF_v2.7.1/*.ttf | %{ $fonts.CopyHere($_.fullname) }
PS> rm HackGen_NF* -Recurse

Windows Terminal 設定

以下で設定しています。

  • 既定のプロファイル: WSL
  • プロファイル - 規定値 - 外観
    配色: One Half Dark
    フォントフェイス: HackGen Console NFJ
    フォントサイズ: 11

settings.json での設定です。 ※ defaultProfile はDebian(WSL)

settings.json
...
    "defaultProfile": "{58ad8b0c-3ef8-5f4d-bc6f-13e4c00f2530}",
    "profiles": 
    {
        "defaults": 
        {
            "colorScheme": "One Half Dark",
            "font": 
            {
                "face": "HackGen Console NFJ",
                "size": 11
            }
        },
...

WSL2 設定

Windows Terminal のWSLから設定を行います。

.wslconfig

WSLのグローバルの設定ファイルを作成します。

vi .wslconfig
.wslconfig
[wsl2]
memory=4GB
processors=8
swap=0

設定ファイルをWSL側からWindows側のホームディレクトリに移動します。

mv .wslconfig /mnt/c/Users/$(/mnt/c/Windows/System32/cmd.exe /c "<nul set /p=%UserName%" 2>/dev/null)/
wsl.conf

WSLのディストリビューションの設定ファイルを作成します。

sudo vi /etc/wsl.conf
/etc/wsl.conf
[automount]
options = "metadata,umask=22,fmask=11"

WSLを再起動させます。
PowerShellからWSLを終了します。

PS> wsl --shutdown

再びWindows TerminalからWSLを起動します。

sudo
sudo visudo
%sudo   ALL=(ALL:ALL) NOPASSWD:ALL
日本語設定
sudo sed -i -E 's/# (ja_JP.UTF-8)/\1/' /etc/locale.gen
sudo locale-gen
sudo update-locale LANG=ja_JP.UTF-8
export LANG=ja_JP.UTF-8
パッケージアップグレード
sudo apt update
sudo apt upgrade -y
基本パッケージ
sudo apt install -y bash-completion curl dnsutils fonts-ipafont git imagemagick jq locales nfs-client patch rsync tree wget vim whois zip
GUI
sudo apt install -y libgtk2.0-0 libgtk-3-0 libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 libxtst6 xauth xvfb libgbm-dev fonts-ipafont
Node.js
curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash
source ~/.profile
nvm install --lts

yarn

npm install -g yarn
Vim設定
vi ~/.vimrc
~/.vimrc
syntax on
set encoding=utf-8
set number
set tabstop=4
set softtabstop=4
set expandtab
set shiftwidth=4
set backspace=indent,eol,start
set paste

Git

Windows側のホームディレクトリに設定を作成し、リンクを張ります。

touch /mnt/c/Users/$(/mnt/c/Windows/System32/cmd.exe /c "<nul set /p=%UserName%" 2>/dev/null)/.gitconfig
ln -s /mnt/c/Users/$(/mnt/c/Windows/System32/cmd.exe /c "<nul set /p=%UserName%" 2>/dev/null)/.gitconfig ~/.gitconfig

touch /mnt/c/Users/$(/mnt/c/Windows/System32/cmd.exe /c "<nul set /p=%UserName%" 2>/dev/null)/.git-credentials
ln -s /mnt/c/Users/$(/mnt/c/Windows/System32/cmd.exe /c "<nul set /p=%UserName%" 2>/dev/null)/.git-credentials ~/.git-credentials
# Git設定例
git config --global user.name "name"
git config --global user.email name@email
git config --global credential.helper store
git config --global core.filemode false
git config --global core.autocrlf input
git config --global init.defaultBranch main

SSH

Windows側のホームディレクトリにディレクトリを作成し、リンクを張ります。

mkdir /mnt/c/Users/$(/mnt/c/Windows/System32/cmd.exe /c "<nul set /p=%UserName%" 2>/dev/null)/.ssh
ln -s /mnt/c/Users/$(/mnt/c/Windows/System32/cmd.exe /c "<nul set /p=%UserName%" 2>/dev/null)/.ssh ~/.ssh
鍵作成
ssh-keygen -t rsa -b 4096 -C ""
SSH Config
mkdir ~/.ssh/conf.d
vi ~/.ssh/config
~/.ssh/config
# VS CODE Wildcards don't supported
Include ~/.ssh/conf.d/**/config

Host *
    IdentitiesOnly yes
    TCPKeepAlive yes
    ServerAliveInterval 60
    ServerAliveCountMax 10
    ForwardAgent yes
chmod 600 ~/.ssh/config
SSH 接続時背景色変更
vi ~/ssh-change-color.sh
#!/bin/bash

CMD_SSH=/usr/bin/ssh

COLOR_WORD_DEFAULT="#ffffff"
COLOR_BG_DEFAULT="#282c34"

COLOR_BG_1="#005563"

function color_change() {
  word=$1
  back=$2
  echo -ne "\e]10;${word}\a\e]11;${back}\a"
}


trap "color_change \"${COLOR_WORD_DEFAULT}\" \"${COLOR_BG_DEFAULT}\"" 2

color_change "${COLOR_WORD_DEFAULT}" "${COLOR_BG_1}"

$CMD_SSH "$@"

color_change "${COLOR_WORD_DEFAULT}" "${COLOR_BG_DEFAULT}"
chmod +x ~/ssh-change-color.sh
vi ~/.bashrc
~/.bashrc
alias ssh='~/ssh-change-color.sh'

反映

source ~/.bashrc

ssh-agent

wget https://github.com/rupor-github/wsl-ssh-agent/releases/download/v1.6.2/wsl-ssh-agent.zip
unzip wsl-ssh-agent.zip -d wsl-ssh-agent
mv wsl-ssh-agent /mnt/c/
rm wsl-ssh-agent.zip

ssh-agent 起動

# PowerShell
PS> sudo Set-Service ssh-agent -StartupType Automatic
PS> sudo Start-Service ssh-agent

起動ファイル作成
Windows のスタートアップにバッチ登録。

echo "start C:\wsl-ssh-agent\wsl-ssh-agent-gui.exe -socket C:\wsl-ssh-agent\ssh-agent.sock" > wsl-ssh-agent.bat
mv wsl-ssh-agent.bat "/mnt/c/Users/$(/mnt/c/Windows/System32/cmd.exe /c "<nul set /p=%UserName%" 2>/dev/null)/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/"
sudo apt install socat
vi ~/.bashrc
export SSH_AUTH_SOCK=$HOME/.ssh/agent.sock
ss -a | grep -q $SSH_AUTH_SOCK
if [ $? -ne 0 ]; then
    rm -f $SSH_AUTH_SOCK
    ( setsid socat UNIX-LISTEN:$SSH_AUTH_SOCK,fork EXEC:"/mnt/c/wsl-ssh-agent/npiperelay.exe -ei -s //./pipe/openssh-ssh-agent",nofork & ) >/dev/null 2>&1
fi
chmod 755 /mnt/c/wsl-ssh-agent/npiperelay.exe

反映

source ~/.bashrc

VS Code 設定

普段VS Codeをお使いの方は 「設定の同期(Settings Sync)」を使うとよいです。
https://code.visualstudio.com/docs/editor/settings-sync


動作確認のため、最低限の設定をする場合は以下を設定してます。

Windows TerminalからPowerShellを起動します。
VS Codeの設定ファイルを書き換えます。

# PowerShell
PS> nano $env:APPDATA\Code\User\settings.json
settings.json
{
    "editor.fontFamily": "HackGen Console NFJ",
}

拡張機能をインストールします。

# 日本語化
PS> code --install-extension MS-CEINTL.vscode-language-pack-ja

# リモート開発
PS> code --install-extension ms-vscode-remote.vscode-remote-extensionpack

# Docker
PS> code --install-extension ms-azuretools.vscode-docker

VS Code を1回起動し、また起動しなおすと日本語化の拡張機能が正常に反映されます。

バックアップ

実際に開発を行う場合は、WSL内にファイルを置くことになるので、WSLを定期的にバックアップしています。

Windows側のホームディレクトリにbackup フォルダを作成し、Windowsのタスクスケジューラーで定期的に保存します。

PS> mkdir backup
PS> nano backup.ps1
backup.ps1
# WSLバックアップ
$CurrentDir = Split-Path $MyInvocation.MyCommand.Path
wsl --export ubuntu $CurrentDir"/backup/ubuntu.tar"
PS> $Trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Thursday -At 21:00
PS> $Action = New-ScheduledTaskAction -Execute "%Systemroot%\System32\WindowsPowerShell\v1.0\powershell.exe" -Argument "%UserProfile%\backup.ps1"
PS> Register-ScheduledTask -TaskName "バックアップWSL" -Action $Action -Trigger $Trigger

※毎週木曜日21時実行

# PowerShellの実行ポリシー変更
Set-ExecutionPolicy RemoteSigned -Scope Process -Force

backup フォルダ自体はWindowsのバックアップ機能を使い、NASやOneDriveなどにバックアップします。

その他

これでWSL2上での開発やVS Codeを使ったWSL・Docker内での開発が行えます。
「Version 22H2」であればWindsow 10でもLinux GUI アプリの実行が可能です。(WSLg)

こちら構築の参考になればと思います。

GitHubで編集を提案

Discussion