Open33

Windows開発環境構築

worbridgworbridg

Windows バージョン20H2 (OSビルド 19042.1348)

worbridgworbridg

まずはWindows Updateを実施する。そして再起動。

worbridgworbridg
  1. Microsoft ストアを開く
  2. 「アプリインストーラー」で検索
  3. インストールする

インストール後にwinget を使えることを確認する。

worbridgworbridg
PS C:\> winget install Microsoft.PowerToys
  • 常に手前に表示: 有効
  • Awake: 無効
  • Color Picker: 無効
  • FancyZones: 有効
  • File Locksmith: 有効
  • File Explorer add-ons: デフォルト
  • ホストファイルエディター: 有効
  • Image Resizer: 有効
  • Keyboard Manager: 無効
  • マウスユーティリティ: マウスをシェイクする
  • マウス蛍光ペン: 無効
  • PowerRename: 無効
  • PowerToys Run: 無効
  • Quick Accent: 無効
  • スクリーンルーラー: 有効
  • Shortcut Guide: 有効
  • Text Extractor: 有効
worbridgworbridg
PS C:\> winget install gerardog.gsudo
PS C:\> winget install Microsoft.WindowsTerminal
PS C:\> winget install Git.Git
PS C:\Users\USERNAME> cat .\.gitconfig
[user]
    name = USERNAME
    email = USERNAME@gmail.com
[core]
    autocrlf = input
    pager = less -S
    editor = vim
    sshCommand = C:/Windows/System32/OpenSSH/ssh.exe
[alias]
    ls = ls-files
    cat = cat-file
    ci = commit -a
    co = checkout
    br = branch
    st = status
    lg = log --all --graph --branches --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
    cdiff = diff --cached
[color]
    ui = true
[diff]
    tool = vimdiff
    indentHeuristic = true
worbridgworbridg

日本語IME設定>キーとタッチのカスタマイズ>各キーに好みの機能を有効にする>Ctrl+SpaceをIME-オン/オフにする

worbridgworbridg

言語の設定を開いて「日本語」のオプションをクリックする。

ハードウェアキーボードレイアウトを英語キーボードに変更して再起動する。

worbridgworbridg
PS C:\> sudo Add-WindowsCapability -Online -Name OpenSSH.Client
PS C:\> sudo Set-Service -Name ssh-agent -StartupType Automatic
PS C:\> Start-Service -Name ssh-agent
worbridgworbridg
PS C:\> winget install PuTTY.PuTTY

自分が普段使っている秘密鍵が BEGIN OPENSSH PRIVATE KEY で始まる形式だったので下記サイトの通りにPuTTYgenを使ってpem形式に変換する

https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-ppk-pem-conversion/

  1. PuTTYgenの起動
  2. Loadで鍵を読み込む
  3. Conversions > Export OpenSSH key
PS C:\Users\USERNAME> ssh-add.exe .\.ssh\id_rsa
Enter passphrase for .\.ssh\id_rsa:
Identity added: .\.ssh\id_rsa (.\.ssh\id_rsa)
PS C:\Users\USERNAME> ssh-add.exe -l
4096 SHA256:tFmA8LCYq778GmoNmuZIdI4UI9fKZGTVq3ZoSORDLuc .\.ssh\id_rsa (RSA)

.ssh/config を作成するのでvimを入れる。(notepad.exeで十分だがvim派なので入れる)

PS C:\> winget install vim.vim
PS C:\> sudo Set-ExecutionPolicy RemoteSigned

C:\Program Files\Vim\vim90 をシステム環境変数の Path に追加する。

PS C:\Users\USERNAME> cat .\.vimrc
filetype off

" Encoding
set encoding=utf-8
scriptencoding utf-8
set fileencoding=utf-8                        " 保存時の文字コード
set fileencodings=ucs-boms,utf-8,euc-jp,cp932 " 読み込み時の文字コード
set fileformats=unix,dos,mac                  " 改行コードの自動識別
set ambiwidth=double                          " ■や○文字が崩れるの防ぐ

" Tab/Indent
set expandtab     " タブ入力を複数の空白入力に置き換える
set tabstop=4     " 画面上のタブ文字を占める幅
set softtabstop=4 " 連続した空白に対してタブキーやバックスペースでカーソルが動く幅
set autoindent    " 改行時に前の行のインデントを継続する
set smartindent   " 改行時に前の行の構文をチェックし次の行のインデントを増減する
set shiftwidth=4  " smartindentで増減する幅

" Search
set incsearch     " インクリメンタルサーチ. 1文字入力毎に検索を行う
set ignorecase    " 検索パターンに大文字小文字を区別しない
set smartcase     " 検索パターンに大文字を含んでいたら大文字小文字を区別する
set hlsearch      " 検索結果をハイライト

" Color
set hlsearch      " ハイライト検索を有効にする
colorscheme delek " カラースキーマの設定

" ESCキー2度押しでハイライトの切り替え
nnoremap <silent><Esc><Esc> :<C-u>set nohlsearch!<CR>

" Cursor
set number
set cursorline

syntax on
syntax enable```
worbridgworbridg

とりあえず今の環境で必要な設定のみ設定

User USERNAME
ForwardAgent yes
ServerAliveInterval 60
ServerAliveCountMax 5
StrictHostKeyChecking no
TCPKeepAlive yes
worbridgworbridg

Visual Studio Codeをインストールする。

PS C:\> winget install Microsoft.VisualStudioCode

Go 1.20をインストールする。

PS C:\> winget install GoLang.Go.1.20
PS C:\> go version
go version go1.20 windows/amd64

NVM for Windowsをインストールする。業務で必要なv18.12.1をインストールする。

PS C:\> winget install CoreyButler.NVMforWindows
PS C:\> nvm install 18.12.1
PS C:\> nvm use 18.12.1
PS C:\> node -v
v18.12.1

Goの拡張機能を追加

Remote Developmentの拡張機能を追加

Makefile Toolsの拡張機能を追加

terminal.integrated.commandsToSkipShell の設定を追加してターミナルのキーバインドを使えるようにする。
https://kokufu.blogspot.com/2020/03/vs-code-ctrl-p.html

keybindings.json

[
    {
        "key": "ctrl+alt+j",
        "command": "workbench.action.toggleMaximizedPanel"
    },
    {
        "key": "ctrl+f",
        "command": "cursorRight",
        "when": "terminalFocus"
    }
]

settings.json(ユーザ)

{
    "workbench.colorTheme": "Default Dark+",
    "window.zoomLevel": 1,
    "redhat.telemetry.enabled": true,
    "terminal.integrated.commandsToSkipShell": [
        "-workbench.action.quickOpen"
    ],
    "terminal.integrated.automationProfile.linux": {},
    "terminal.integrated.tabs.enabled": false,
    "files.eol": "\n",
    "security.workspace.trust.untrustedFiles": "open",
    "editor.fontFamily": "HackGen Console NFJ"
}

ターミナルでctrl+vを使えるようにする。
https://localhost8888.net/visual-studio-code/543/

worbridgworbridg

Visual Studio 2019のインストールをやる。

  • ASP.NET と Web 開発
  • Node.js 開発
  • .NET デスクトップ開発
  • C++ によるデスクトップ開発
  • ユニバーサル Windows プラットフォーム開発
worbridgworbridg
PS C:\> winget install GnuWin32.Make

C:\Program Files (x86)\GnuWin32\binをシステム環境変数に追加

worbridgworbridg
PS C:\> sudo dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
PS C:\> sudo wsl.exe --install -d Ubuntu-20.04
PS C:\> Restart-Computer

諸事情でWSL1を使うので2から1にバージョンを落とす

PS C:\> wsl.exe --set-version Ubuntu-20.04 1

WSL側の作業

$ apt update
$ apt upgrade
$ apt autoremove
$ apt install rpm make net-tools docker.io jq
$ curl https://pyenv.run | bash
$ apt install build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev curl \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
worbridgworbridg

3.12もあるが業務で使うのは3.9なのでこちらのコマンドでインストールする。

PS> winget install Python.Python.3.9
worbridgworbridg

完全に趣味だがZigもインストールした。chocolately には対応しているが winget には対応していない模様。今回はインストーラーをダウンロードすることした。
https://ziglang.org/learn/getting-started/

$PATHC:\zig にした。

[Environment]::SetEnvironmentVariable(
   "Path",
   [Environment]::GetEnvironmentVariable("Path", "Machine") + ";C:\zig",
   "Machine"
)
worbridgworbridg
PS> cat $PROFILE

Invoke-Expression (&starship init powershell)

Set-PSReadLineKeyHandler -Key "Ctrl+d" -Function DeleteChar
Set-PSReadLineKeyHandler -Key "Ctrl+w" -Function BackwardKillWord
Set-PSReadLineKeyHandler -Key "Ctrl+u" -Function BackwardDeleteLine
Set-PSReadLineKeyHandler -Key "Ctrl+k" -Function ForwardDeleteLine
Set-PSReadLineKeyHandler -Key "Ctrl+a" -Function BeginningOfLine
Set-PSReadLineKeyHandler -Key "Ctrl+e" -Function EndOfLine
Set-PSReadLineKeyHandler -Key "Ctrl+f" -Function ForwardChar
Set-PSReadLineKeyHandler -Key "Ctrl+b" -Function BackwardChar
Set-PSReadLineKeyHandler -Key "Alt+f" -Function NextWord
Set-PSReadLineKeyHandler -Key "Alt+b" -Function BackwardWord
Set-PSReadLineKeyHandler -Key "Ctrl+p" -Function PreviousHistory
Set-PSReadLineKeyHandler -Key "Ctrl+n" -Function NextHistory

Set-Alias -Name vi -Value vim.exe
Set-Alias -Name jq -Value jq-win64.exe
Set-Alias -Name k -Value kubectl.exe
Set-Alias -Name mysql -Value 'C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe'
Set-Alias -Name less -Value 'C:\Program Files\Git\usr\bin\less.exe'
Set-Alias -Name openssl -Value 'C:\Program Files\Git\usr\bin\openssl.exe'
Set-Alias -Name du -Value 'C:\Program Files\Git\usr\bin\du.exe'

function ConvertTo-Base64 {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory=$true, ValueFromPipeline=$true)]
        [string]$Text
    )
    process {
        [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($Text))
    }
}

function ConvertFrom-Base64 {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory=$true, ValueFromPipeline=$true)]
        [string]$EncodedText
    )
    process {
        [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($EncodedText))
    }
}

function g {
    cd (Join-Path (ghq root) (ghq list | peco))
}

function Load-EnvFile {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [string]$Path
     )

    if(Test-Path $Path) {
        try {
            Get-Content .env |
                ForEach-Object {
                    $Key, $Value = $_.split('=', 2)
                    [Environment]::SetEnvironmentVariable($Key, $Value.Trim("'").Trim('"'))
                }
            Write-Host "Loaded $Path"
        }
        catch {
            Write-Error "Failed to load $Path\: $_"
        }
    }
    else {
        Write-Error "File not found: $Path"
    }
}
worbridgworbridg

jqコマンドをインストールする。

PS> winget install stedolan.jq

コマンド名が jq-win64.exe なので jq にエイリアスする。

Set-Alias -Name jq -Value jq-win64.exe
worbridgworbridg
PS> go install github.com/x-motemen/ghq@latest
PS> go install github.com/peco/peco@latest
worbridgworbridg
$ wget -q -O - https://packages.cloudfoundry.org/debian/cli.cloudfoundry.org.key | sudo apt-key add -
$ echo "deb https://packages.cloudfoundry.org/debian stable main" | sudo tee 
$ apt install cf-cli