🚀 DockerとWSL2で開発環境を爆速構築！初心者のための完全ガイド

 🚀 DockerとWSL2で開発環境を爆速構築！初心者のための完全ガイド

「開発環境の構築、いつもつまずくんだよな…」

そんな風に思っていませんか？私もそうでした！でも、**Docker**と**WSL2**を組み合わせれば、もうその悩みとはおさらばです！

この記事では、Windowsで最強の開発環境を構築するための、DockerとWSL2の導入手順を、**初心者の方にも絶対に理解できる**ように、一つ一つ丁寧に解説していきます。長丁場になりますが、これを読めばあなたもきっと、快適な開発ライフを手に入れられますよ！

## なぜDockerとWSL2なの？その魅力に迫る！

環境構築って、プログラミング学習の最初の壁だったりしますよね。OSやライブラリのバージョンが合わなくて動かない…なんてこともしばしば。そこで登場するのが、この二つの救世主です！

### Dockerって何がすごいの？

Dockerは、アプリケーションとその実行に必要なものをすべて**コンテナ**という小さな箱にまとめてくれる技術です。

* **環境構築の悩みを解決！**：「僕の環境では動くのに、なんで君の環境では動かないんだ！？」こんな不毛なやり取りはもう終わり。Dockerを使えば、どんな環境でも同じように動くコンテナを作れます。
* **クリーンな環境を保てる！**：PCが色々な開発環境でごちゃごちゃになるのを防ぎます。使わなくなったら、コンテナを削除するだけでOK。
* **開発効率が爆上がり！**：必要な環境をすぐに用意できるので、開発の準備時間を大幅に短縮できます。

### WSL2って何？WindowsでLinuxを動かす魔法！

WSL2 (Windows Subsystem for Linux 2) は、Windows上で本格的なLinux環境を動かすための機能です。

* **WindowsでLinuxコマンドが使える！**：Web開発などでよく使うLinuxコマンドを、Windowsで直接利用できます。
* **高速な動作**：WSL2は仮想マシン技術を使っているので、以前のWSLよりもはるかに高速にLinuxアプリケーションが動作します。
* **Dockerとの相性抜群！**：Docker DesktopがWSL2をバックエンドとして利用することで、Windows上でも快適にDockerを動かせます。

つまり、WSL2の上にDockerを構築することで、WindowsユーザーでもLinux開発者のように、スムーズで強力な開発環境を手に入れることができるんです！

さあ、前置きが長くなりましたが、早速環境構築を始めましょう！

---

## 💻 WSL2のインストール：WindowsにLinuxの力を！

まずは、Dockerを動かすための土台となるWSL2をインストールします。

**PowerShell**または**コマンドプロンプト**を**管理者として実行**してください。検索窓に「powershell」と入力して右クリックし、「管理者として実行」を選択すればOKです。

### 1. WSLと仮想マシンプラットフォーム機能を有効にする

以下のコマンドをPowerShellまたはコマンドプロンプトに入力して実行します。

```powershell
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
```

このコマンドは、Windowsの機能としてWSLと仮想マシンプラットフォームを有効にします。これで、Linuxを動かすための準備が整います。

### 2. WSLの最新バージョンをチェックし、Ubuntuをインストールする

次に、WSLの最新バージョンに更新し、Linuxディストリビューションの中でも特に人気のある**Ubuntu**をインストールします。

```powershell
wsl --update
wsl --install -d Ubuntu
```

`wsl --update` は、WSLのカーネルを最新の状態に保ちます。`wsl --install -d Ubuntu` は、Ubuntuをインストールするコマンドです。

インストールが完了すると、Ubuntuのユーザー名とパスワードの設定を求められます。好きなユーザー名とパスワードを設定してください（パスワードは入力しても表示されませんが、入力されています）。

これでWSL2のインストールは完了です！お疲れ様でした。

---

## 🐳 Dockerのインストール：開発環境をコンテナ化！

いよいよ本丸、Dockerのインストールです。ここからは主にWSL2のUbuntu環境での作業になります。

### 0. WSLを起動する

スタートメニューから「Ubuntu」と検索して起動するか、PowerShellやコマンドプロンプトで `wsl` と入力してEnterキーを押してください。

黒い画面が表示され、Ubuntuのターミナルが起動します。ここからが本番です！

### 1. bashrcを編集してプロキシを設定する（プロキシ環境下の場合）

もし、あなたのPCが会社のネットワークなど、**プロキシサーバー経由でインターネットに接続している場合**は、この手順が必要です。そうでない場合は、この手順はスキップして「3. コマンドラインからHTTPリクエストを送り…」に進んでください。

Ubuntuのターミナルで、以下のコマンドを実行します。

```bash
nano ~/.bashrc
```

これは、`nano` というテキストエディタで、ユーザーの設定ファイルである `.bashrc` を開くコマンドです。このファイルは、ターミナルが起動するたびに読み込まれるので、環境変数を設定するのに最適です。

ファイルの末尾に以下の行を追加してください。`proxy.example.com` と `8080` は、あなたの環境のプロキシサーバーのアドレスとポート番号に置き換えてください。

```bash
export http_proxy="http://proxy.example.com:8080/"
export https_proxy="http://proxy.example.com:8080/"
export no_proxy="localhost,127.0.0.1"
```

入力したら、`Ctrl + S` で保存し、`Ctrl + X` でnanoを終了します。

### 2. bashrcの設定を反映させる

`.bashrc` を編集したら、その変更を現在のセッションに反映させる必要があります。以下のコマンドを実行してください。

```bash
source ~/.bashrc
```

これで、先ほど設定したプロキシの環境変数が適用されました。

### 3. プロキシ認証が通るか確認する（Googleにアクセスする）

プロキシ設定が正しく行われたかを確認するために、`curl` コマンドでGoogleにアクセスしてみましょう。

```bash
curl -I https://www.google.com
```

もし、HTTP/1.1 200 OK のような応答が返ってくれば、プロキシ経由でインターネットに接続できています。もしエラーが出る場合は、プロキシの設定を見直してください。

### 4. sudoers.d/proxyファイルを作成する（プロキシ環境下の場合）

プロキシ環境下で `sudo` コマンドを使う際に、プロキシ設定を継承させるための設定を行います。これもプロキシ環境下でのみ必要な手順です。

```bash
sudo nano /etc/sudoers.d/proxy
```

このコマンドで `/etc/sudoers.d/proxy` というファイルを `sudo` (管理者権限) で作成・編集します。このファイルは、`sudo` コマンドを実行する際の挙動を制御するものです。

ファイルの中に以下の行を追加してください。`your_username` の部分は、先ほどWSL2のUbuntuをインストールした際に設定したあなたのユーザー名に置き換えてください。

```bash
Defaults env_keep += "http_proxy https_proxy no_proxy"
```

入力したら、`Ctrl + S` で保存し、`Ctrl + X` でnanoを終了します。

### 5. Cntlmをインストールする（プロキシ環境下でNTLM認証が必要な場合）

もし、あなたのプロキシサーバーが**NTLM認証**を必要とする場合（会社によくある認証方式です）、`Cntlm` というプロキシ認証プロキシをインストールする必要があります。そうでない場合は、この手順はスキップしてください。

```bash
sudo apt update
sudo apt install cntlm
```

`sudo apt update` は、パッケージリストを最新の状態に更新するコマンドです。`sudo apt install cntlm` でCntlmをインストールします。環境によっては数分かかる場合があります。

### 6. nanoで /etc/cntlm.conf を編集する（Cntlmを使用する場合）

Cntlmの設定ファイルを編集します。

```bash
sudo nano /etc/cntlm.conf
```

以下の設定を、あなたの環境に合わせて編集してください。

* `Username`: あなたのプロキシユーザー名
* `Domain`: あなたのプロキシのドメイン（必要であれば）
* `Password`: あなたのプロキシパスワード
* `Proxy`: 親プロキシサーバーのアドレスとポート

例:

```
Username        your_proxy_username
Domain          your_proxy_domain
Password        your_proxy_password
Proxy           proxy.example.com:8080
```

入力したら、`Ctrl + S` で保存し、`Ctrl + X` でnanoを終了します。

### 7. ユーザー認証情報を基にNTLM認証用のハッシュを生成する（Cntlmを使用する場合）

CntlmでNTLM認証を行うには、ハッシュ化されたパスワードが必要です。以下のコマンドを実行してハッシュを生成します。

```bash
cntlm -u your_proxy_username -d your_proxy_domain -H
```

`your_proxy_username` と `your_proxy_domain` はあなたの情報に置き換えてください。コマンド実行後、パスワードの入力を求められますので、入力してください。

表示されたハッシュ値（`PassNTLMv2` など）をメモしておきましょう。

### 8. 再度 nano で /etc/cntlm.conf を編集する（Cntlmを使用する場合）

先ほど生成したハッシュ値を `cntlm.conf` に追記します。

```bash
sudo nano /etc/cntlm.conf
```

ファイルを開き、メモしたハッシュ値を追記します。`Password` の行はコメントアウト（行頭に `#` をつける）するか、削除してください。

例:

```
# Password        your_proxy_password
PassNTLMv2      xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
```

入力したら、`Ctrl + S` で保存し、`Ctrl + X` でnanoを終了します。

### 9. Cntlmを再起動する（Cntlmを使用する場合）

設定を反映させるためにCntlmサービスを再起動します。

```bash
sudo systemctl restart cntlm
```

### 10. bashrcのプロキシ設定をCntlmに変更する（Cntlmを使用する場合）

プロキシ設定を、Cntlm経由に変更します。

```bash
nano ~/.bashrc
```

以前設定したプロキシ設定の行を以下のように変更します。ポートは通常 `3128` です。

```bash
export http_proxy="http://localhost:3128/"
export https_proxy="http://localhost:3128/"
export no_proxy="localhost,127.0.0.1"
```

入力したら、`Ctrl + S` で保存し、`Ctrl + X` でnanoを終了します。

### 11. ~/.bashrc ファイルの読み込みを実行する

変更を反映させます。

```bash
source ~/.bashrc
```

### 12. DockerのAptリポジトリ情報を署名キーと共にシステムのソースリストに追加する

ここからはいよいよDocker本体のインストールです！まずは、Dockerの公式リポジトリを追加します。

```bash
sudo apt update
sudo apt install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```

この長いコマンド群は、以下のことを行っています。

* `sudo apt update`: パッケージリストを最新に。
* `sudo apt install ca-certificates curl gnupg`: 必要なツールをインストール。
* `sudo install -m 0755 -d /etc/apt/keyrings`: Dockerの署名キーを保存するディレクトリを作成。
* `curl ... | sudo gpg ...`: Dockerの公式GPGキーをダウンロードし、システムに登録。
* `echo ... | sudo tee ...`: DockerのAPTリポジトリをシステムのソースリストに追加。
* `sudo apt update`: 新しく追加したリポジトリ情報でパッケージリストを更新。
* `sudo apt install docker-ce ...`: Docker Engine、Docker CLI、Containerd、Docker Buildxプラグイン、Docker Composeプラグインをインストール。

これでDocker本体のインストールは完了です！

### 13. systemd を使用して Docker サービスのカスタム設定を編集する（プロキシ環境下の場合）

Dockerデーモン自体がプロキシ経由でインターネットにアクセスする必要がある場合（イメージのダウンロードなど）は、この設定が必要です。プロキシ環境下でない場合はスキップしてください。

```bash
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf
```

ファイルに以下の内容を記述します。`your_proxy_address` と `your_proxy_port` は、あなたの環境に合わせてください。Cntlmを使っている場合は `localhost:3128` となります。

```
[Service]
Environment="HTTP_PROXY=http://your_proxy_address:your_proxy_port/" "HTTPS_PROXY=http://your_proxy_address:your_proxy_port/" "NO_PROXY=localhost,127.0.0.1,your_domain.com"
```

入力したら、`Ctrl + S` で保存し、`Ctrl + X` でnanoを終了します。

変更を反映させるために、Dockerデーモンをリロードして再起動します。

```bash
sudo systemctl daemon-reload
sudo systemctl restart docker
```

### 14. Docker の動作確認のため "hello-world"

Dockerが正しくインストールされ、動作するかを確認するために、おなじみの `hello-world` イメージを実行してみましょう！

```bash
docker run hello-world
```

もし、たくさんのメッセージが表示され、最後に「Hello from Docker!」のようなメッセージが表示されれば、Dockerのインストールは成功です！おめでとうございます！

### 15. 指定したユーザーを docker グループに追加する

現在の状態だと、`docker` コマンドを実行するたびに `sudo` をつける必要があります。これを毎回やるのは面倒ですよね。そこで、あなたのユーザーを `docker` グループに追加することで、`sudo` なしで `docker` コマンドを実行できるようにします。

`your_username` の部分はあなたのユーザー名に置き換えてください。

```bash
sudo usermod -aG docker your_username
```

この変更を反映させるには、一度ログアウトして再度ログインするか、WSL2を再起動する必要があります。一番簡単なのは、WSL2を再起動することです。PowerShellやコマンドプロンプトで以下のコマンドを実行してください。

```powershell
wsl --shutdown
```

その後、再度Ubuntuを起動してください。

```bash
wsl
```

Ubuntuが起動したら、`sudo` なしで `docker run hello-world` を実行してみてください。問題なく動作すれば成功です！

### 16. docker ディレクトリに config.json を作成する（プロキシ環境下の場合）

Dockerクライアントがプロキシサーバー経由でアクセスするための設定を行います。これもプロキシ環境下でのみ必要な手順です。

```bash
mkdir -p ~/.docker
nano ~/.docker/config.json
```

ファイルに以下の内容を記述します。`your_proxy_address` と `your_proxy_port` は、あなたの環境に合わせてください。Cntlmを使っている場合は `localhost:3128` となります。

```json
{
  "proxies": {
    "default": {
      "httpProxy": "http://your_proxy_address:your_proxy_port/",
      "httpsProxy": "http://your_proxy_address:your_proxy_port/",
      "noProxy": "localhost,127.0.0.1,your_domain.com"
    }
  }
}
```

入力したら、`Ctrl + S` で保存し、`Ctrl + X` でnanoを終了します。

### 17. git をインストールする

最後に、開発に必須のバージョン管理システム `git` をインストールしておきましょう。

```bash
sudo apt install git
```

これで、DockerとWSL2を使った開発環境の構築は完了です！

---

## 🗑️ WSL2のアンインストール（やり直したい場合）

もし、途中で何か問題が起こって最初からやり直したい、あるいはもうWSL2が必要なくなったという場合は、以下の手順でアンインストールできます。

**PowerShell**または**コマンドプロンプト**を**管理者として実行**してください。

### 1. WSLを停止する

```powershell
wsl --shutdown
```

これにより、実行中のWSLディストリビューションがすべて停止します。

### 2. WSLが停止できているか確認する

```powershell
wsl --list --running
```

もし何も表示されなければ、WSLは停止しています。まだ実行中のディストリビューションが表示される場合は、再度 `wsl --shutdown` を実行してみてください。

### 3. 指定したディストリビューションの登録を解除し、WSLから削除する

ここではUbuntuを削除します。

```powershell
wsl --unregister Ubuntu
```

このコマンドは、Ubuntuのデータや設定をすべて削除します。これでWSL2のUbuntuはアンインストールされました。

---

## 🎉 まとめ：快適な開発ライフへようこそ！

お疲れ様でした！長かったですが、これであなたもDockerとWSL2を使いこなす第一歩を踏み出しました。

最初は難しく感じるかもしれませんが、この環境は一度構築してしまえば、あなたの開発効率を劇的に向上させてくれます。

* **Dockerでアプリケーション環境を隔離！**
* **WSL2でWindowsでもLinux開発！**

これで、もう「環境構築で詰んだ…」なんてことはなくなるはずです。

さあ、次はどんなアプリケーションを開発しますか？この最高の環境で、あなたのアイデアを形にしていきましょう！

何か不明な点や、さらに深く知りたいことがあれば、お気軽にコメントしてくださいね！