WSL2+dockerにNext.js/MUI/Typescriptな開発環境をサクッと作る

# はじめに

開発や検証でNext.jsとMaterial UIを組み合わせた環境を構築することが多いので、
その中で私が行き着いた現時点で最も簡単に環境構築する方法を紹介する。

特にNext.js/MUI/Typescript環境の構築は、[MUI V5のexemples](https://mui.com/getting-started/example-projects/)の中に[MUI V4](https://v4.mui.com/getting-started/example-projects/)にはなかった
[Next.js (TypeScript version)](https://github.com/mui/material-ui/tree/master/examples/create-react-app-with-typescript)を見つけてから劇的に構築が楽になったので、
Official examplesに気づいてない人向けの記事と言っても差し支えないかもしれない。

# 目次

- [WSL2+docker環境にVSCodeのdevcontainerで開発用コンテナを作る](#wsl2docker環境にvscodeのdevcontainerで開発用コンテナを作る)
- [Material UIのOfficial examplesを利用して開発環境を作る](#material-uiのofficial-examplesを利用して開発環境を作る)


# 実行環境

- Windows10
- WSL2:Ubuntu20.04LTS
- VSCode(Remote Development導入済み)

# WSL2+docker環境にVSCodeのdevcontainerで開発用コンテナを作る

1. VSCodeでWSLのUbuntuに接続する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2026870/efc9fed1-2215-f740-9882-fdb864ca7138.png)

1. ターミナルで作業用のフォルダを作成し、作成したフォルダーを開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2026870/02b1621d-cf16-6ebb-20a1-07d88b381582.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2026870/c2c21c3b-102f-563b-e2b6-85d1f208b339.png)
こんな感じになってたら成功
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2026870/899755de-f02a-873d-ab3c-8f0fb4790207.png)

1. ↓の赤枠の部分をクリックして開いたメニューから下記の順に選択
Reopen in Container
Node.js & Typescript
Node.jsのバージョン（例では14を選択）
追加でインストールしたいもの（例では選択無しだが、Git等の必要なものはここで選択しておくと楽）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2026870/a9ef7b6f-f641-e76c-ed8a-9877d41a8d06.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2026870/32cf74cc-dff1-01f7-408c-834c05a40e9b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2026870/96a2fe7d-b3ca-71cf-8785-a25961a222e9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2026870/7ac38b55-a10d-ce04-53b3-a78b3e176c1a.png)

1. しばらく待つと下記の状態になって環境構築完了
・作成されたコンテナに接続されている
・.devcontainerというフォルダが作成されている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2026870/cfab58bf-6603-09de-5101-25e9bfbc6b13.png)

devcontainerについての詳しい説明は割愛するが、
コンテナへの接続解除、再接続は下記のようにすればOK

接続解除（Reopen Folder in WSL）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2026870/4fa4d3f0-f73e-e2f8-3978-22fab82d9b03.png)

再接続（Reopen in COntainer）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2026870/5b0747b0-6aa9-dd28-daf9-c5b3846a7501.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2026870/efeaf8c3-a41f-3538-f0f7-9f5fc5acb767.png)


# Material UIのOfficial examplesを利用して開発環境を作る

構築した環境でターミナルを開き、下記のコマンドを実行する
```
curl https://codeload.github.com/mui/material-ui/tar.gz/master | tar -xz --strip=3  material-ui-master/examples/nextjs-with-typescript
```

インストール＆起動
```
yarn
yarn dev
```
※やっていることはexemplesのReadmeと同じですが
　カレントディレクトリ直下にソース展開するためにstripの値を2→3に変更してます

https://github.com/mui/material-ui/tree/master/examples/nextjs-with-typescript

# 最終形

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2026870/5cad6174-4a53-e1cd-9a7d-6b55f314f157.png)

タイトルから話がそれるので詳細は割愛しますが
.devcontainerリポジトリに含めてしまえばコンテナ環境も共有して開発できますし、
.devcontainer内の`devcontainer.json` `Dockerfile`に手を入れれば環境のアレンジも簡単です。