仕事で使うPC環境:WSL2編
はじめに
この記事は、私の研究グループ内で主にPCを使う仕事環境を統一するための記事シリーズの一つです。今回は前回のWindowsアプリに関する記事の後の話です。研究グループ内では機械学習用のUbuntuサーバーがいくつかあり、それらとメインPCとのアクセスのためにWSL2(Windows Subsystem for Linux)を導入していきます。
WSL2のインストール
2. Ubuntu 24.04 LTSを指定してWSLをインストールする
PowerShellを管理者として開きます。
スタートメニューで「PowerShell」を入力
右クリックし、「管理者として実行」を選択
以下のコマンドを入力し、実行します。
wsl --install -d Ubuntu-24.04これにより、WSL2と指定したUbuntu 24.04 LTSが自動でインストールされます。
もし
> ダウンロード中: Linux 用 Windows サブシステム 2.4.13
> インストール中: Linux 用 Windows サブシステム 2.4.13
> 致命的なエラーです。
のようになったら、以下を試してWSLのインストールに必須機能を有効化してください。
`dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart`
`dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart`
これらの操作が、両方とも「正常に完了しました。」と出ればOKです。この後一度PCを再起動してください。
3. 再起動
コマンドが完了すると、再起動を求められる場合があります。求められた場合は必ず再起動してください。
4. バージョン確認とUpdate
現在のWSLのバージョンを確認するには、Powershellで次のコマンドを実行します。
wsl -l -vコンソール上に以下のように表示されたらOKです。最後の2はWSL2の2です。
NAME STATE VERSION
* Ubuntu-24.04 Running 2
念のためUpdateもしましょう。管理者権限でPowershellを起動し、以下のコマンドを入力してください。
wsl --updateUbuntuの設定
Ubuntuの設定
再起動後、Windows Terminal を開きます(スタートメニューで「Windows Terminal」と検索して起動)。
タブの横にある「∨」または「+」をクリックし、メニューから 「Ubuntu-24.04」 を選びます。
初回起動時には、Linuxユーザー名とパスワードの設定を求められます。
初回起動時にユーザー名とパスワードを設定します。ユーザー名はWindowsと同じである必要はありませんが、同じにしておくと手間が省けることもあります。ここでもやはり全角文字や環境依存文字やスペースを使ってはいけませんし、記号もないほうが良いです。
VScodeの設定
WindowsでVScodeは前回の記事でインストールできているものとします。
VScodeで以下の拡張機能をインストールします。
Japanese Language Pack for Visual Studio Code
Remote Development
Windowsを再起動します。
Ubuntuのターミナル上で`code`と入力してVScodeを起動します。ESET Endpoint SecurityのFirewallの設定で進まない場合、以下を許可します。
NT Kernel & System
Internet Connection Sharing
VScode左下に「WSL:Ubuntu-24.04」と表示されていれば成功です。
リモート接続側のVScodeで以下の拡張機能も追加でインストールします。
Python
zsh Debug
GitLens
DeepL for Visual Studio Code
Live Share
Markdown All in One
Markdown PDF
Jupyter
Docker
vscode-icons
Rainbow CSV
Xサーバ(VcXsrv)の設定と自動起動化
XサーバーはUbuntuのGUIを表示するためのソフトです。
VcXsrvをダウンロードし、インストールします。
Xlaunchを起動し、Extra Settingsの「Additonal parameters」に「-ac」を入力して設定を保存します。
Winキー+Rで「shell:startup」を開き、先ほど保存した設定ファイルのショートカットを配置します。
WindowsのFirewallが表示されたら「許可」します。
WSLの初期設定
Ubuntuを起動したときに最初に入るディレクトリ(Windowsでいうフォルダ)のことをホームディレクトリと言います。WSL2ではこれをWindows側に変えることもできるが、現時点ではお勧めできません。
WindowsとUbuntuでファイルパーミッションの扱い方が違うせいで、pyenvではPythonのインストールファイルをダウンロードできずインストールできなかった、というような不都合が起こります。ファイルのやり取り以外は、基本的には別だと考えてください。
WindowsからWSL2のファイルを探すのは少し手間です。WSL2からはWindowsのファイルを探すのはそこまで手間ではありませんが、以下のようにWindowsとWSL2でのファイルのやり取りは、受け渡し用のフォルダ(wslwin)を作っておくと楽です。
まずWindows側で、C:\Users\ユーザー名\Documents\wslwinというフォルダを作成する
以下のコマンドでUbuntu側ホームにシンボリックリンクを貼る
cd ; ln -s /mnt/c/Users/ユーザー名/Documents/wslwin wslwinこうすると`cp filename ~/wslwin`のようにすることでひとまずWindows側にファイルを送れます。Windows側からWSL2側に送りたいときはwslwinに入れておいて、`mv ~/wslwin/filename ./`のようにすることで移動できます。
必要パッケージのインストール
Ubuntuの設定をしていきます。
sudo sed -i.bak -e "s/http:\/\/archive\.ubuntu\.com/http:\/\/jp\.archive\.ubuntu\.com/g" /etc/apt/sources.list
sudo apt -y update && sudo apt -y upgrade
sudo apt install -y git cmake expect zsh x11-apps libssl-dev libreadline-dev zlib1g-dev x11-utils dbus-x11 libsqlite3-dev nodejs fonts-ipafont libxml2-dev libxslt1-dev libicu-dev pkg-config libmysqlclient-dev libkrb5-dev logrotate postfix liblzma-dev curl unzip peco shellcheckzshとzinitの設定
シェルとは、OSとユーザー間の橋渡しをするプログラムで、コマンド入力を受け取り、それをOSに伝える役割を果たします。
zsh(Z Shell)は高機能で使いやすいシェルの一種で、補完機能が強力でカスタマイズ性が高く、プラグインが豊富なため、作業効率が大きく向上するというメリットがあります。
まず一度、`zsh`というコマンドを打ってみましょう。
すると何か色々聞かれると思いますが、設定はあとで行うので、今は0を押してEnterを押してください。
すると先ほどとは見た目の違う(おそらくシンプルな)ターミナルになります。これが何も設定していないzshです。
一旦Bashに戻るために、Ctrl+dを押してください。
zshをデフォルトシェルに設定
chsh -s $(which zsh)zinitをインストール
/usr/bin/bash -c "$(curl -fsSL https://git.io/zinit-install)"`code ~/.zshrc`で以下を追記したらセーブして、`source ~/.zshrc`する。
テーマは好みで変えてください。今はpureになっています。一覧はここにあります。色だけでなく、表示される情報も好みのものを選んでください。例えば今いるディレクトリをフルパスで表示するか、gitのブランチ名をid付きで表示するか、性格に合わせるといいと思います。
また、自分のローカルとリモートのテーマを変えておくと、どっちで作業しているか間違えにくくなります。
zinit ice pick"async.zsh" src"pure.zsh"
zinit light sindresorhus/pure
zinit light zsh-users/zsh-syntax-highlighting
zinit light zsh-users/zsh-autosuggestions
zinit light zsh-users/zsh-completions
zinit light zdharma/history-search-multi-word
zinit light mollifier/anyframe
ちなみに私はメインPCのWSL2では、zshのテーマにpowerlevel10kを使っています。設定に一手間かかりますが、とても見やすくて便利です。リモート側はpureです。
(好みで)powerlevel10kのインストール
1. フォントのインストール(Windows側で行う)
以下のURLから4つのフォントファイルをダウンロードし、それぞれクリックしてインストールします。
2. Windows Terminalの設定を変更する
フォントインストール後、Windows Terminalを再起動します。
「設定」→左メニューの「Ubuntu-24.04」→「外観」と進み、フォントを「MesloLGS NF」に設定します。
3. powerlevel10kのインストール(WSL側で行う)
.zshrcファイルを開いて、以下の内容を追加します。
(pureテーマをすでに設定している場合は、その記述を念のため削除してください。)
zinit ice depth"1"
zinit light romkatv/powerlevel10k4. `source ~/.zshrc`して設定を反映します。 設定ウィザードが始まるので、指示に従いながらお好みのスタイルを選んでください。後からでも設定変更が可能です。
`code ~/.zshrc`で以下を追記したらセーブして、`source ~/.zshrc`する。
hosts=( localhost `hostname`)
cdpath=( ~ )
umask 022
#### history
HISTFILE="$HOME/.zhistory"
HISTSIZE=1000000; SAVEHIST=1000000
alias ls="ls -F --color=auto --show-control-char"
alias cp="cp -i -r"
alias mv="mv -i"
alias rm="rm -f"
alias ...="cd ../../"
alias ....="cd ../../../"
alias df="df -h"
alias les="less"
export OMP_NUM_THREADS=1
export PATH="$HOME/.local/bin:$PATH"
export PYENV_ROOT="$HOME/.pyenv"
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | head -n 1 |awk '{print $2}'):0.0
Python環境の構築
PythonスクリプトとJupyter Notebookの使い分けに関する指針
グループ内で共有するコードは、原則として .py ファイルなどの実行ファイル形式で作成することとします。
Jupyter Notebook は視覚的に分かりやすく非常に便利ですが、「一部だけ実行できてしまう」という特性があるため、思わぬミスにつながる危険性があります。
そのリスクを理解した上で、Notebookを資料的にまとめる用途として活用するのは良い方法です。
データ処理を行う際は、必ず元データを読み込む部分からコードに含めるようにしてください。
整形後のデータを使う場合でも、どのように整形したかが分かるように注釈や説明を明記しておくことが重要です。
pyenvを導入
sudo apt install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
source ~/.zshrc
pyenv install 3.12.0; pyenv global 3.12.0必要なPythonパッケージ
sudo apt install python3-pip
pip install --upgrade pip
pip install numpy scipy pandas scikit-learn matplotlib seaborn jupyterその他の便利ツール
sudo apt install -y eog rs pv tree zip graphviz parallel imagemagickこれでWindows 11上で最低限のWSL2環境が整いました。
Python仮想環境の構築
Pythonのプロジェクトでは、仮想環境の構築を必須とします。これにより、他のプロジェクトと依存関係が衝突することを防ぎ、再現性のある実行環境を保つことができます。AIエージェントを使ったコーディングでは気にしなくてもやってくれるように設定できますが、意識しておくとよいです。
仮想環境構築にはvenv を使い、パッケージ管理にはpipを使うものとします。Pythonでコーディングするときは、まずプロジェクトごとにディレクトリを作り、そこに移動してから、まず仮想環境の構築を始めてください。
1.プロジェクトディレクトリに移動し、仮想環境を作成:
python -m venv .venv2.仮想環境を有効化:
source .venv/bin/activate3.必要なパッケージをインストール:
pip install <パッケージ>
pip install -r requirements.txt # requirements.txtがあるとき4.作業が終わったら仮想環境を無効化:
deactivate仮想環境にインストールしたパッケージは必ず requirements.txt に保存して共有しましょう:
pip freeze > requirements.txt