見出し画像

仕事で使うPC環境:WSL2編


はじめに

この記事は、私の研究グループ内で主にPCを使う仕事環境を統一するための記事シリーズの一つです。今回は前回のWindowsアプリに関する記事の後の話です。研究グループ内では機械学習用のUbuntuサーバーがいくつかあり、それらとメインPCとのアクセスのためにWSL2(Windows Subsystem for Linux)を導入していきます。

WSL2のインストール

2. Ubuntu 24.04 LTSを指定してWSLをインストールする

  1. PowerShellを管理者として開きます。

    1. スタートメニューで「PowerShell」を入力

    2. 右クリックし、「管理者として実行」を選択

  2. 以下のコマンドを入力し、実行します。

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を再起動してください。

WSLインストール時のエラー

3. 再起動

  • コマンドが完了すると、再起動を求められる場合があります。求められた場合は必ず再起動してください。

4. バージョン確認とUpdate

  • 現在のWSLのバージョンを確認するには、Powershellで次のコマンドを実行します。

wsl -l -v
  • コンソール上に以下のように表示されたらOKです。最後の2はWSL2の2です。

NAME STATE VERSION
* Ubuntu-24.04 Running 2

WSLのバージョン表示
  • 念のためUpdateもしましょう。管理者権限でPowershellを起動し、以下のコマンドを入力してください。

wsl --update

Ubuntuの設定

Ubuntuの設定

  • 再起動後、Windows Terminal を開きます(スタートメニューで「Windows Terminal」と検索して起動)。

  • タブの横にある「∨」または「+」をクリックし、メニューから 「Ubuntu-24.04」 を選びます。

  • 初回起動時には、Linuxユーザー名とパスワードの設定を求められます。

  • 初回起動時にユーザー名とパスワードを設定します。ユーザー名はWindowsと同じである必要はありませんが、同じにしておくと手間が省けることもあります。ここでもやはり全角文字や環境依存文字やスペースを使ってはいけませんし、記号もないほうが良いです。

VScodeの設定

  1. WindowsでVScodeは前回の記事でインストールできているものとします。

  2. VScodeで以下の拡張機能をインストールします。

    • Japanese Language Pack for Visual Studio Code

    • Remote Development

  3. Windowsを再起動します。

  4. Ubuntuのターミナル上で`code`と入力してVScodeを起動します。ESET Endpoint SecurityのFirewallの設定で進まない場合、以下を許可します。

    • NT Kernel & System

    • Internet Connection Sharing

  5. VScode左下に「WSL:Ubuntu-24.04」と表示されていれば成功です。

  6. リモート接続側の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を表示するためのソフトです。

  1. VcXsrvをダウンロードし、インストールします。

  2. Xlaunchを起動し、Extra Settingsの「Additonal parameters」に「-ac」を入力して設定を保存します。

  3. Winキー+Rで「shell:startup」を開き、先ほど保存した設定ファイルのショートカットを配置します。

  4. 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 shellcheck

zshと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

zinitの追加要素

ちなみに私はメイン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/powerlevel10k

4. `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

.zshrcに追記するもの

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 .venv

2.仮想環境を有効化:

source .venv/bin/activate

3.必要なパッケージをインストール:

pip install <パッケージ>
pip install -r requirements.txt # requirements.txtがあるとき

4.作業が終わったら仮想環境を無効化:

deactivate

仮想環境にインストールしたパッケージは必ず requirements.txt に保存して共有しましょう:

pip freeze > requirements.txt



いいなと思ったら応援しよう!