データサイエンストの環境構築  2024編  (1) (Windows環境+WSL Ubuntu)

# モダンなデータサイエンスト環境(2024) 

データサイエンストの環境構築として以下を構築します。本環境はWindows OS環境をフロントエンドとして、バックエンドのLinuxを操作するというイメージです。

&nbsp; &nbsp; 1) Dell XPSのWindowsOSに簡単なPythonやR環境を構築し、レポートやブログを書く環境
&nbsp; &nbsp; 2) 自作サーバのUbuntuOSにGPUを構築し、より本格的なプロトタイプを実行する環境
&nbsp; &nbsp; 3) 有料クラウドサービスを利用した環境

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283070/5b1bdb6c-4678-2884-a80f-4e5d8a5e880f.png)



今回は、1)のWindowsOS用の環境を構築します。次回は、2)のUbunutuOSへ接続して、シームレスに連携させる予定です。

## 今回インストールするPC環境
- Windows 11 Pro (23H2)  
- Intel Core i9 32 GB  
- WSL - Ubuntu 24.04.1 LTS 

今回、Ubuntuのシェル環境は、AutoSuggestion等が利用できるZshの利用を前提にしています。但し、今後はFishに変更する予定です。

## Windows側の環境構築

### Windows Terminal
Windows Terminalをインストール

https://apps.microsoft.com/detail/9n0dx20hk701?rtc=1&hl=en-us&gl=US
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283070/1039bc1a-955a-1cd8-44c0-1f265b2df19a.png)

立ち上げは、Win＋RショートカットでRunコマンドから、wtを実行

### PowerShell 7

```powershell
winget install --id Microsoft.Powershell --source winget
winget install --id Microsoft.Powershell.Preview --source winget
``` 
このような美しいPowerShellが可能となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283070/dc39cec4-4e40-b97b-f830-e461442965c8.png)


ConsoleHost_history.txtへの書き込みエラーが出れば、以下を実行してください。
```bash
icacls "C:\Users\<your name>\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt" /grant kiwat:F
``` 

### 仮想環境の有効化とWSLのインストール

Win＋RショートカットでRunコマンドを立ち上げ、実行
```run
optionalfeatures.exe
```
- Linux用Windowsサブシステム（WSL）
- 仮想マシン プラットフォーム

をチェックし、OKをクリックし終了。

Powershell TerminalからVersion 2の確認
```powershell
# Powershell Terminal 
wsl -l -v
```
Windows 11 Pro (23H2)の場合、既存にVersion2に設定されているはずです。Windows10の場合は、Google/ChatGPTしてください。


### Ubuntuのインストール
Linuxのディストリビューション名を表示
```powershell
wsl --list --online
```
```powershell
wsl --install -D ubuntu
```
もし以下のようなエラーがでれば、
```powershell
#Failed to attach disk #'C:\Users\Liu.D.H\AppData\Local\Packages\KaliLinux.54290C8133FEE_ey8k8hqnwqnmg\LocalState\ext4.#vhdx' to WSL2: The system cannot find the file specified.
#Error code: Wsl/Service/CreateInstance/MountVhd/ERROR_FILE_NOT_FOUND
#Press any key to continue...
``` 
--unregister及び、--uninstallを実行し、再度Ubuntuをインストールしてください。

```powershell
# wsl -l 
# wsl --unregister <distribution name>
# (e.g.) wsl --unregister Ubuntu
# wsl --uninstall Ubuntu 
# wsl --install -d Ubuntu
# (Reboot) 
```

インストール時にユーザ名とパスワードが聞かれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283070/6d0999fc-52d4-9669-eed9-dd6d416c2ce7.png)
はい、これでインストールは終わりました。

### WSLコマンドの復習

WSLのコマンドを復習しておきましょう。ExitコマンドをWSL Ubuntu上で叩いて、Powershellに戻り、wslコマンドを叩いてみてください。
```powershell
wsl -t ubuntu   # Terminate ubunutu
wsl -l          # list OS 
wsl -d ubuntu   # Ubuntu OSの立ち上げ
wsl --help      # Help コマンド
```
Windows TerminalでUbuntuを立ち上げると、以下のような画面となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283070/6ddcfcfb-1e10-9bce-94f2-a47553f0ed46.png)

## Ubunutu環境の構築

### 1) パッケージのアップデイト

Windows TerminalからUbuntuを立ち上げ、以下を実行し、すべてYESと答えます。
```bash
sudo apt update && sudo apt upgrade
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283070/0b382437-c050-fafa-2b8c-1ca165479eea.png)

### 2) Zshのインストール
```bash
sudo apt-get install zsh
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
```
Autosuggestionsのプラグインインストールし、.zshに設定追加
https://github.com/zsh-users/zsh-autosuggestions

```zsh
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

# Add the following word into the plugins section in .zsh 
#plugins=( 
#    # other plugins...
#    zsh-autosuggestions
#)
```
新しいターミナルを立ち上げて、以前にタイプしたコマンドを叩くと、以下を表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283070/139db022-66cd-3510-4907-385dc3d95b3b.png)

### GItHub SSH接続の設定
鍵の設定
```bash 
ssh-keygen -t ed25519 -C "your_email@example.com"
```
公開鍵の登録
https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account

ユーザ名とEmailの登録
```bash
git config --global user.name "Your Name"
git config --global user.email "your_email@example.com"
```
[Git Personal access tokensの設定](https://github.com/settings/tokens)
今回はクラッシックで生成
![image.pcdng](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283070/48a591c9-cbff-abbc-3e35-a57a411dde2f.png)

安全な場所に保存しておいてください。
```bash
cd ~/.ssh 
echo 'yourtoken' > .gittoken 
chmod 700 .gittoken 
``` 


### Mambaのインストール
condaより高速なクロスプラットフォームのパッケージ管理

https://mamba.readthedocs.io/en/latest/

既存設定のままインストール完了まで実行
```bash
wget "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh"
bash Miniforge3-$(uname)-$(uname -m).sh
``` 
インストール場所をPATHに入れておいてください。

### mambaでの仮想環境
```bash

# Check the current mamba enviornment 
mamba info -e 

# Check the channel. By default, conda-forge is set to the channel  
conda config --show channels
# Add a new channel if required. 
# conda config --add channels bioconda 

# Create a manba enviornment 
mamba create -n myjlabenv jupyterlab -c conda-forge
  
# Activate the environment
manba init
```
ここで、.bashrcへ記述されたmambaの設定シェルを.zshrcへコピーします。
```bash
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/home/iptracej/miniforge3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/home/iptracej/miniforge3/etc/profile.d/conda.sh" ]; then
        . "/home/iptracej/miniforge3/etc/profile.d/conda.sh"
    else
        export PATH="/home/iptracej/miniforge3/bin:$PATH"
    fi
fi
unset __conda_setup

if [ -f "/home/iptracej/miniforge3/etc/profile.d/mamba.sh" ]; then
    . "/home/iptracej/miniforge3/etc/profile.d/mamba.sh"
fi
# <<< conda initialize <<<
```
そして、mamba activateを実行

```bash
mamba activate myjlabenv             # Activate the environment
(myjlabenv) jupyter lab              # Run a command under the environment  
```

そうすると、Jupyter Labアクセス用のURLが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283070/b94758d9-d758-88ae-5679-5c1f5cfeee7b.png)

### mambaコマンドの復習
```bash
(myjlabenv) python --version          # Check Python version
(myjlabenv)> python test.py           # Run a Python Script
(myjlabenv)> mamba install numpy      # Install a new library 
(myjlab)> manba deactivate            # Deactivate the environment 
mamba remove -all -n myjlabenv        # Remove all files on myjlabenv
mamba create -n py3.11 python=3.11    # Create a specific version environment  
```

### VSCode（又はCursor)のインストール
定番のエディターです。

https://code.visualstudio.com/download

又は、Cursorをお勧めします。まずはVS Codeで開発し、LLM機能がもっと利用したいのであれば、Cursorをどうぞ。

https://www.cursor.com/

CursorはVS CodeのFolkなので、移行している人が多くいます。
https://docs.cursor.com/get-started/migrate-from-vscode

### VSCode Extentionインストール
VS CodeでWSLの拡張機能をインストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283070/a4f130b6-eb73-0514-63be-7126ba88f607.png)

### WSL Connected VS Code
ローカルのVS Codeを立ち上げながら、以下をWindows TerminalのUbuntuから実行してください。

```bash
cd <your project>
. code
```
新しいVS Code が立ち上がり、WSL: Ubuntuへの接続が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283070/b673c06d-e72b-4a4a-2476-d3b3e75b954d.png)

ちなみに、ローカルのWindowsへ戻りたければ、Ctrl + Shift + Pで、Remote-WSL: Reopen Folder in Windowsを選べば、新しいVS Codeが開き、ローカルのアクセスになっているはずです。


これで以上になります。