Windows 開発環境

はじめに

Windows で Linux や Mac と同じようにコマンドラインツールを使う場合、 WSL (Windows Subsystem for Linux) を使うのが便利。

一方、WSL は Windows 上で Linux ディストリビューションを利用できて便利な反面、 VSCode でリモート開発を使おうとすると不便があったり、 ディスクスペースを食いつぶす問題があったりする。

それを避けて Linux 系の作業はリモートマシンでやる、とした際に、 手元の Windows でもある程度コマンドラインの環境を整えたい、というときの Tips。 (私も試行錯誤中なので変わるかもしれない。)

デスクトップを OneDrive 下に置く設定は無効にしておいた方が CUI 操作のうえでは安全。

PowerShell

基本的には Microsoft 製の CUI である PowerShell での作業となる。 UNIX でいう sudo にあたる操作は、PowerShell を「管理者として開く」ことで実行する。

コマンドレット

PowerShellで実行できるネイティブコマンドはコマンドレットと呼ばれており、 “動詞-名詞”の名前で登録されている。

Get-Command  # すべてのコマンドレットを取得

エイリアス

例えばディレクトリを移るコマンドは Set-Location だが、要は cd と同じ。 実際、Set-Location には sl, cd, chdir の3つのエイリアスが用意されている。

man Set-Location

他にもエイリアスを調べるには Get-Alias

Linux コマンド

WSL を有効化していれば、wsl に続ける形で Linux コマンドを実行可能:

which wget
>>> NG

wsl which wget
>>> 実行可能

PROFILE

PowerShell でも Linux でいう .profile とか .bashrc を設定したい。 設定用のファイルは $PROFILE で決まっており、スコープに応じて以下がある:

> echo $PROFILE.AllUsersAllHosts
C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1

> echo $PROFILE.AllUsersCurrentHost
C:\Windows\System32\WindowsPowerShell\v1.0\Microsoft.PowerShell_profile.ps1

> echo $PROFILE.CurrentUserAllHosts
C:\Users\_username_\OneDrive\ドキュメント\WindowsPowerShell\profile.ps1

> echo $PROFILE.CurrentUserCurrentHost
C:\Users\_username_\OneDrive\ドキュメント\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

CurrentUserCurrentHost が一番安全だけど、 C:\Users\_username_\OneDrive\ドキュメント\ とかいう諸悪の根源ディレクトリにおきたくない。

ひとまず $PROFILE.AllUsersAllHosts に読み込みのみの PROFILE を置いて、 $HOME のスクリプトを読む、という設定にしてみる:

$PROFILE.AllUsersAllHosts
$USER_PROFILE="$HOME\profile.ps1"
if (Test-Path $USER_PROFILE) {. $USER_PROFILE}

この PROFILE でファイルを実行する (Linux でいう source) には 実行権限の付与が必要:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

ひとまず touchwhich を定義:

$HOME\profile.ps1
Set-Alias touch New-Item
function which() {(Get-Command $args).Path}
  • 引数をともなう Alias の設定は function を使う。
  • 既存のコマンドの上書きはできない?

Windows 標準のターミナル

コマンドプロンプト
古の Microsoft 製 CUI
PowerShell
コマンドプロンプトの後継 (Windows7 以降)。
コマンドプロンプトで使えたコマンドも基本的に使える。
Windows Terminal
コマンドプロンプト、PowerShell、bash (WSL 経由) など複数のコマンドラインシェルのホストアプリケーション。
WinXI/A(管理者として実行)
Ctrl,で設定画面。 デフォルトのプロファイルや外観をいじれる。

パッケージ管理

Windows におけるパッケージ管理の主な選択肢として、 Microsoft 公式の Winget、 古株で対応するパッケージも多い Chocolatey、 ユーザー権限で使いやすい Scoop の3つがある。

Winget

新しめの Windows ならデフォルトで使えるはず。

Basic usage

winget install/uninstall
パッケージのインストール/アンインストール
winget search
パッケージの検索
例: winget search rstat
winget list
インストール済みパッケージの表示

Chocolatey

Chocolatey のインストール

PowerShell を管理者として開く。その後下記のインストールコマンドを実行:

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

Basic usage

choco install/uninstall
パッケージのインストール/アンインストール (管理者権限が必要)
choco search
パッケージの検索
choco list
インストール済みパッケージの表示

Scoop

インストール

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

Git

プロジェクトのバージョン管理のためにも必須。 インストールは Git for Windows を参照。

R

VSCode で使うには PATH を教えてあげる必要がある:

settings.json
{
  "r.rpath.windows": "C:\\Program Files\\R\\R-4.4.0\\bin\\x64\\R.exe",
  "r.rterm.windows": "C:\\Program Files\\R\\R-4.4.0\\bin\\x64\\Rterm.exe",
}

Python

Python 環境構築 — Windows を参照

統合開発環境

好きなやつを入れる:

Quarto

https://quarto.org/docs/get-started/

Windows 用のやつを入れてあげる。 (R に付属しているやつを使うことはできなさそう?)

PDF のレンダリング用に tex を入れてやる (c.f. ~/AppData/Roaming/TinyTeX/):

quarto install tinytex

PDF で日本語フォントを使うには?

Quarto PDF で日本語フォントを使う場合、 デフォルトでは原ノ味フォントが使われるらしい。 Ubuntu とかは最初のインストールでプリセットされていたはずだが、 Windows の Quarto では原ノ味含め、日本語フォントがプリセットされていないっぽい。

そこで、tlmgr を使ってフォントをインストールしてやることで使えるようになる:

> .\AppData\Roaming\TinyTeX\bin\windows\tlmgr.bat install haranoaji
Locale 'Japanese_Japan.932' is unsupported, and may crash the interpreter.
tlmgr.pl: package repository https://ftp.kddilabs.jp/CTAN/systems/texlive/tlnet/ (verified)
[1/1, ??:??/??:??] install: haranoaji [25570k]
Locale 'Japanese_Japan.932' is unsupported, and may crash the interpreter.
running mktexlsr ...
done running mktexlsr.
tlmgr.pl: package log updated: C:/Users/kokep/AppData/Roaming/TinyTeX/texmf-var/web2c/tlmgr.log
tlmgr.pl: command log updated: C:/Users/kokep/AppData/Roaming/TinyTeX/texmf-var/web2c/tlmgr-commands.log