WindowsでLinuxを動かすために！！

# 概要
 クラウド開発等を行っていると、Windowsで苦手な作業をLinuxに任せたい場面が多々あります．私の場合、ドキュメント作成は Windows、クラウド開発は Linuxと使い分けして開発しています．WindowsとLinuxを共存できれば、管理するマシンも減り、作業性もUPすると考えてWindows上に 立ち上げられるWSL2を活用しています．
 WSL2のセットアップは、マシン購入時のみ実施するため、「PCがクラッシュしたとき」、「PCを更新したとき」にブログをみながら対応する経験はないでしょうか．備忘録を残しておけば、「自分の記憶に残る」、「自社開発チームにも貢献できる」ことから本記事を作成することにしました．

# WSL2とは
  マイクロソフトの公式サイトによると、以下のような説明となっています．
  >開発者は、Windows マシン上で Windows と Linux の両方の機能に同時にアクセスできます。 Linux 用 Windows サブシステム (WSL) を使用すると、開発者は、従来の仮想マシンやデュアルブート セットアップのオーバーヘッドなしで Linux ディストリビューション (Ubuntu、OpenSUSE、Kali、Debian、Arch Linux など) をインストールし、Linux アプリケーション、ユーティリティ、Bash コマンド ライン ツールを変更せずに Windows で直接使用できます。
  
  Windows と Linux の両方の機能を同時にアクセスできるうれしさがあります．

# 必須条件
Windows 11 

# 作業環境
Windowsホスト環境
　プロセッサ：13th Gen Intel(R) Core(TM) i7-1355U   1.70 GHz
　メモリ：32.0 GB
　エディション：Windows 11 professional
　バージョン：22H2

Linux仮想環境
　ディストリビューション：Ubuntu 22.04 LTS

# セットアップの手順
　セットアップ方法は、いくつかあるようですが、Windows PowerShellを使ってきます．

  - Windows PowerShellを 「管理者として実行する」 で選択、起動します．

  - Ubuntu22.04 LTS をインストールします．
      ```　bash
      # Ubuntu22.04LTS install @ PowerShell
      wsl --install -d Ubuntu-22.04
      ```
      Ubuntu22.04LTS のインストールイメージ
      ![Ubuntu22.04LTS のインストールイメージ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3474702/b3c0c192-1773-60fa-a46f-13e9e00eb275.png)
- Windowsホストを再起動します．

- Ubuntuが自動的に立ち上がります．

- Ubuntu用の 「username」, 「password」 を設定します．
  ![ユーザ名、パスワード設定完了](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3474702/51819ed0-015b-ab97-bede-b3ea995e8472.png)
  ユーザ名とパスワードは、何度もつかうので、忘れないようにします．

- 後処理を実施します．
  ```　bash
  # ディストリビューション確認
  cat /etc/issue
  # アップデート
  sudo apt update
  sudo apt upgrade -y
  ```
<br>

# 簡単な使い方
  - 立ち上げ手順
   「Windowsメニュー」→「すべてのアプリ」→「Ubuntu 22.04.2LTS」を選択します．

  - 終了手順
    コマンドプロンプトの「×」を選択します．
    または、
    下記コマンドを実行します.
    ``` bash
    exit
    ```

# メモリ設定する手順（オプション）
WSL2にて高負荷な処理をする場合、メモリサイズやプロセッサ数、スワップサイズをカスタマイズ設定すると処理が安定します．用途に応じてカスタマイズ設定してください．

- 新規でファイル作成する場合
  Windows PowerShellにて下記コマンド実行します．
  ``` bash
  # %UserProfile%\.wslconfig
  # example C:\Users\【Windowsログインユーザ名】
  cd ~
  echo "[wsl2]
  memory=8GB        # examle 8GB (must be an integer)
  swap=0            # swap off:0, swap MB is manual, examole 500MB
  #localhostForwarding=true # ポートフォワードする場合は、コメントアウト
  # エンコーディングを指定して保存（UTF-8にしないと動作しない）
  " | %{ $_+"`n" } | ForEach-Object{ [Text.Encoding]::UTF8.GetBytes($_) } | Set-Content -Encoding Byte -Path .wslconfig
  ```
- 2度目以降、WSL2の設定を変更する場合
  Windowsホスト側にて該当ファイルをメモ帳で直接編集し、WSL2を再起動します．

- 確認方法
  下記コマンドを実行します．
  ``` bash
  free
  # Mem:totalが設定した数値に近ければOK 
  ```
![確認方法](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3474702/7808868f-d646-0646-39d8-209e71717ac1.png)

# まとめ
Windows11に、WSL2を使い Ubuntu 22.04 LTS を「セットアップする手順」と「メモリ設定する手順（オプション）」を記載しました．
開発環境構築のお役に立てると幸いです．

# 
最後まで読んでいただき、ありがとうございました！  
今後も機械学習の活用を始め、開発環境やシミュレーションなど幅広く技術情報発信をしていく予定です！  

最後になりますが、本記事の内容に誤りなどあれば、コメントにてご教授お願いいたします．

# Reference
- [WSL を使用して Windows に Linux をインストールする方法](https://learn.microsoft.com/ja-jp/windows/wsl/install)
- [WSL での詳細設定の構成](https://learn.microsoft.com/ja-jp/windows/wsl/wsl-config)
- [Powershellによるファイル操作のまとめ](https://qiita.com/mima_ita/items/ae31f3a19389e69b307f)
- [WindowsPowerShellでUTF8-BOMLessでLFなファイルを出力する](https://qiita.com/SAITO_Keita/items/120e1286727fb680a699#)