# 学習環境を0から用意する

このページは、まだLinux環境がない人が[8段階ハンズオン](./lab-guide.md)のStep 0（8段階のいちばん最初の実習）を始められる状態にするための案内です。ここでの目的は、壊しても仕事や家族のPCに影響しない、練習専用のLinux環境を自分のPCの中に用意することです。会社・学校・家族共有のPCでは、管理者の許可なく仮想化機能（1台のPCの中にもう1台のPCを動かす機能）やネットワーク設定を変更しません。共有PCの設定を勝手に変えると、他の人の作業や通信を止めてしまうおそれがあるためです。

## 先に選ぶ

**どの練習をするかで、必要な環境が変わります。** 最初のファイル操作に、Dockerや新しいVMは不要です。

| 次に行う練習 | 用意する環境 | 進む場所 |
|---|---|---|
| ファイルを作り、コピーして確かめる | 自分専用のWSL2 Ubuntu、またはUbuntu VM。Ubuntuの端末で実行する | [CUIの最初の30分](./first-30-minutes.md) |
| 主作品の小さい構成を動かす | 主作品の入門手順に書かれたUbuntu・Docker・Composeの条件を確認する。WSL2の場合もDockerが使える状態が別途必要 | [主作品 server の入門手順](https://github.com/ns7jp/server/blob/main/docs/beginner-learning-guide.md) |
| 8段階でOS構築から復元まで進める | Step 0・1はWSL2でも準備できる。Step 2以降は、再起動・直接画面での復旧・スナップショットを使える専用のUbuntu VM | [8段階ハンズオン](./lab-guide.md) |

ファイル操作の完了、小さい構成の動作確認、8段階全体の修了は、それぞれ別の到達点です。実際に試した環境と範囲を記録します。

> **かんたんに言うと** 練習用のLinux環境をどの方法で作るかを、最初に1つだけ選びます。WSL2はWindowsの中でLinuxのコマンド操作を手軽に試す方法、VM（仮想マシン。PCの中にもう1台のPCを作るソフト）はサーバー1台をまるごと再現する方法です。迷ったらWSL2から始めます。

| コース | 向いている人 | 目安 | この教材での制限 |
|---|---|---:|---|
| Windows + WSL2（最初のファイル操作に推奨） | まずCUIとLinux操作を試したい | 30〜60分 / 8GB以上 | サーバー1台の起動・再起動・別ホストへの復元を通して確かめる8段階本編は、Step 2からUbuntu VMで行う |
| Ubuntu VM | サーバーの起動、SSH、snapshot、復元まで練習したい | 60〜120分 / 25GB以上 | PCの仮想化対応と十分なメモリが必要 |
| Mac — VM（UTM / Parallels / VirtualBox等） | Macでサーバー構築を練習したい | 60〜120分 / 25GB以上 | 手順はコースBを土台に、ソフトごとの画面差を自分で読み替える |
| 既存Linux | すでに自分専用の、壊して捨ててよい環境がある | 15分 | 実際に使われている環境（本番）や共有環境は不可。Step 0で条件を確認する |

Macの場合、コースA（WSL2）はそのまま使えません。コースBの手順を、UTM（無料）、Parallels Desktop、VirtualBoxなどの仮想化ソフトに読み替えて進めます。画面や導入手順は製品ごとに異なりますが、流れは共通です。ISO（OSをインストールするための1つのファイル）を取得し、VMを作り、一般ユーザーを作り、最後にsnapshot（その時点の状態をまるごと保存したもの）を取る、という4段階です。Apple Silicon（M1以降）のMacはCPUの種類が違うため、ARM64版のUbuntu ISOを選びます。

Windowsで判断に迷う場合は、まずWSL2で[CUIの最初の30分](./first-30-minutes.md)まで進みます。CUIとは、マウスではなく文字のコマンドでPCを操作する方式のことです。8段階本編を選ぶ場合は、Step 2へ進む前にコースBのUbuntu VMを用意します。WSLで作ったメモは、そのまま保存しておきます。

## コースA — Windows + WSL2

### 前提

- Windows 11またはWSL2を利用できるWindows 10
- 自分専用のPCで、Windowsの管理者権限があり、設定を変更してよいもの
- 8GB以上の空き容量とインターネット接続

### 操作

1. PowerShellを管理者として開き、`wsl --status > wsl-status-before.txt` のようにファイルへリダイレクト（画面に出る内容をファイルへ書き出すこと）して現状を記録する。作業前の状態を残しておくと、あとで「自分が何を変えたのか」を説明できます。`cat wsl-status-before.txt`（PowerShellでは `type wsl-status-before.txt`）で内容を見返せます。
2. 手順1で記録した内容を見て、まだWSLが入っていない場合だけ `wsl --install -d Ubuntu-24.04` を実行し、表示に従って再起動する。すでに入っている場合は、この手順を飛ばす。
3. Ubuntuを開き、Linux用の一般ユーザー名と長いパスワードを作る。ここで作るのは、Windowsのアカウントとは別のLinux側のアカウントです。入力中のパスワードが画面に表示されないのは正常です。文字は入力されているので、そのまま最後までタイプしてEnterを押します。
4. **Ubuntuの端末に切り替えてから**、次を1行ずつ実行する。

```bash
cat /etc/os-release
whoami
pwd
df -h /
```

**期待結果:** Ubuntuのバージョン、自分のユーザー名、`/home/<ユーザー名>`、空き容量が表示される。この4つが表示されれば、「Linuxが起動し、自分のユーザーで、どの場所にどれだけの空き容量があるかまで確認できた」と説明できます。

出力例（架空値。実測ではなく、実際の表示は環境ごとに異なります）:

```text
$ cat /etc/os-release
PRETTY_NAME="Ubuntu 24.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"

$ whoami
example-user

$ pwd
/home/example-user

$ df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        250G   12G  226G   6% /
```

### WSL2で主作品の小さい構成を試す場合だけ

Docker（アプリを箱に詰めて動かす仕組み）は、ファイル操作の練習には使いません。主作品の入門手順がDockerを必要とする段階で準備します。すでにDockerが使える場合は、追加で別のDockerを入れず、次の確認から始めます。

Windowsでの方法の1つは、Docker Desktop（画面操作つきのDocker一式）のWSL2連携です。[Docker公式のWSL2手順](https://docs.docker.com/desktop/features/wsl/)で利用条件を確認し、導入した場合は「Settings > Resources > WSL Integration」で使用するUbuntuを有効にします。

Ubuntuの端末で、次を確認します。

```bash
docker version
docker compose version
```

**進める目安:** `docker version` にClient（命令を送る側）とServer（コンテナを動かす側）のバージョンが出て、`docker compose version` にComposeのバージョンが表示されること。接続エラーなら起動や連携設定を調べ、主作品の起動へ進みません。ここで確認できるのはDockerの準備までです。

8段階本編のStep 3を行う場合は、コースBで作ったUbuntu VM内の手順に従います。Windows上のDocker Desktopが動いていても、そのVM内でDockerが動くことの確認にはなりません。

### 終了・削除方法

- 一時停止: PowerShellで `wsl --shutdown` を実行すると、Ubuntuが停止します。中のファイルは消えません。
- 一覧確認: `wsl --list --verbose` を実行すると、今あるWSL環境の名前と状態が一覧で表示されます。
- 完全削除: 必要なファイルを別の場所へ退避したあとにだけ、`wsl --unregister <表示された名前>` を実行します。`<表示された名前>` には、一覧確認で表示された名前をそのまま入れます。

`--unregister` はその環境内のファイルを消します。名前を推測せず、一覧で対象を確認してから実行します。

## コースB — Ubuntu VM

利用する仮想化ソフトは、自分のPCで利用可能なHyper-V、VirtualBoxなどから1つ選び、この練習ではそのソフトでVMを管理します。OSイメージ（ISOファイル）は、公式配布元から取得します。

VirtualBoxとHyper-Vの併用可否は、バージョンやWindowsの設定によって変わります。[Oracle VirtualBox 7.2公式ガイド「Using Hyper-V with Oracle VirtualBox」](https://docs.oracle.com/en/virtualization/virtualbox/7.2/user/EN-VBOX-7-2-USER.pdf)には、Hyper-VとWindows Hypervisor Platformが動く環境での利用方法と、性能が低下する場合があることが説明されています。「同時には使えない」と決めつけず、自分のバージョンの公式手順を確認します。

起動できないときは、Windowsの版、仮想化ソフトの版、エラー全文を先に記録します。**この教材の対処として、Hyper-VやWindowsのセキュリティ機能を一律に無効化することは勧めません。** 既存のWSL2などにも影響するため、原因と影響を確認してから対処を選びます。

1. Ubuntu 24.04 LTSのISOを公式配布元から取得する。
2. 目安として2 CPU、4GB RAM（メモリ）、25GBの可変ディスク（使った分だけ実際のファイルが大きくなる仮想ディスク）、NATネットワークでVMを作る。NATの意味は、この手順のあとで説明します。
3. 一般ユーザーを作り、更新前の状態でsnapshot `clean-install` を取得する。設定に失敗しても、この作りたての状態まで何度でも戻せるようにするためです。
4. VM内で次を実行し、結果を保存する。この5つで、OSの種類、仮想マシンの上で動いていること、IPアドレス、通信の経路、空き容量をまとめて記録できます。あとで設定を変えたとき、作りたてのときと何が違うかを比べられます。

```bash
cat /etc/os-release
systemd-detect-virt
ip -brief address
ip route
df -h /
```

5. VMを再起動し、同じ一般ユーザーでログインできることを確認する。再起動してもログインできれば、「電源を入れ直しても使い続けられる環境を作れた」と説明できます。
6. snapshotへ戻す手順とVMの削除メニューを、実行前にメモする。

**NAT**（Network Address Translation／VMの通信をPCの回線に変換して外へ出す方式）は、最初に選ぶ設定として向いています。VMから外のインターネットへは通信できる一方で、家庭内LAN（家の中のネットワーク）にいる他の機器からVMへは直接つながりにくいためです。**ブリッジ**はVMを家庭内LANへ直接参加させる方式です。家の中の他の機器から直接見える状態になるため、この教材では必要になるまで選びません。`localhost` は「今操作している環境自身」を指し、Windows側とVM側では別の対象になり得ます。

## コースC — 既存Linuxの確認

> **かんたんに言うと** すでに手元にLinuxがある人向けの節です。ただし、仕事や他の人が使っているLinuxで練習してはいけません。壊しても誰も困らない環境かどうかを、次の5つで確認します。

次のすべてが「はい」の場合だけ使用します。

- 自分が所有し、停止・削除してよい
- 業務、学校、公開サービス、家族のデータがない
- console（機器へ直接つないで操作する画面）または画面から復旧できる
- snapshot（状態の保存）または同等の戻し方がある
- 20GB程度の空き容量があり、学習中にその環境を停止しても困らない

1つでも不明なら使用せず、WSL2または新しいVMを作ります。

## よくある開始時の問題

| 現象 | 最初の確認 | 次の行動 |
|---|---|---|
| 仮想化を開始できない | タスクマネージャーのCPU欄にある「仮想化」 | 無効ならPCメーカーの手順を確認。共有PCでは変更しない |
| WSLの導入が拒否される | Windowsの版、更新、管理者権限 | 表示されたエラー全文を保存してから公式手順を確認 |
| VMが非常に遅い | PC全体のメモリとVM割当 | ホスト用メモリを残し、同時起動アプリを減らす |
| ネットへ出られない | `ip address` → `ip route` → DNS | 一度に設定を変えず、どこまで成功するか記録 |
| 戻し方が分からない | snapshotの一覧と、consoleでつなぐ手段 | ファイアウォールやSSHの設定変更には進まない |

環境が用意できたら、[最初の30分](./first-30-minutes.md)でファイルを作り、結果の記録を保存します。次は冒頭の表で選んだ練習へ進みます。8段階本編なら[Step 0](./lab-guide.md#step-0--安全境界と環境採録)から始めます。

## 翌日以降にもう一度開くには

一度作った環境は、PCを再起動しても消えません。次回は新規作成せず、次の方法で前回の続きから再開します。

- **WSL2（コースA）:** スタートメニューで「Ubuntu」と検索し、表示されたアプリを起動するだけで、前回終了した状態（作成したファイルなど）に戻れます。ターミナルを閉じても中のファイルは消えません。
- **Ubuntu VM（コースB / Mac）:** 使用している仮想化ソフトの管理画面（Hyper-VマネージャーやVirtualBoxのマネージャーなど）を開き、対象のVMを選んで「起動」します。前回シャットダウンしていれば通常起動、一時停止（サスペンド）していればその状態から再開します。
