Next.jsをコンテナ化→Webアプリを最速デプロイ

# はじめに

本記事は以下のような方向けです。

:::note info
- Windowsでdocker環境を用いたWebアプリをつくりたい！
- サクッとwebアプリをデプロイしたい！
:::

是非見ていってください。
お金はかからないのでご安心を！！

# 事前準備
GitHubアカウントの準備が必須となります。
事前に登録をお願いします。

# ホスト環境
- Windows 11
- WSL2
- Ubuntu
- Docker Desktop

WindowsへのDocker環境構築については本記事では省きます。
こちらの記事を参考に構築を進めてください！

https://qiita.com/hoshimado/items/51c99ccaee3d4222d99d

# １．ローカル環境の準備

### 作業用フォルダ作成

まずUbuntuを開きましょう。
プロジェクト用のフォルダを作成し、フォルダ配下に移動します。

```terminal:terminal
$ mkdir フォルダ名
$ cd フォルダ名
```
次に、フォルダ内でDocker関連のファイルを作成していきます。

### Dockerfileの作成

```dockerfile:Dockerfile
FROM node:23-alpine
WORKDIR /usr/app
```

### docker-compose.ymlの作成

```javascript:docker-compose.yml
version: '3'
services:
  app:
    build: ./
    volumes:
      - ./src:/usr/app
    command: sh -c "yarn dev"
    ports:
      - "3000:3000"
```

# ２．アプリのコンテナ化

アプリの作成、コンテナ化を行います。

### アプリの構築

アプリを構築します。
```terminal:terminal
$ docker-compose run --rm app yarn create next-app .
```

TypeScriptを扱いたい場合は--tsオプションをつけます。
```terminal:terminal
$ docker-compose run --rm app yarn create next-app . --ts
```


下記コマンドで起動します。

```terminal:terminal
$ docker-compose up -d --build
```

ここまでできたら、Docker Desktopを覗いてみましょう。

↓コンテナが作成されて起動している
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3917806/544ecd3b-3ff1-1d02-eb6c-4dcc57b84c25.png)

試しに、コンテナ名をクリックし、ポート番号をクリックしてみましょう。
(今回の場合、おそらく3000:3000という表示のはず)


なんと、PC内に環境構築せず短時間でwebアプリを構築できました!!!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3917806/234f5058-d4b6-7090-3177-a8972cfda308.png)


次はGitについてです。

# ３．Gitリポジトリの作成、プッシュ

２．でコンテナ化したNext.jsプロジェクトをGithubに登録します。
１．と同じように作成したフォルダ配下に移動してから後続の作業を実施してください。

### Gitのインストール確認

```terminal:terminal
$ git --version
```

バージョンが表示されます。
```terminal:terminal
$ git version 2.43.0
```

バージョンが表示されない場合はお手数ですが下記コマンドを実行してインストールをお願いしますmm

```terminal:terminal
$ apt-get update && apt-get install -y git
```

### GitHubリポジトリ作成
GitHubにて、リポジトリを作成しておきます。

### Gitリポジトリ初期化
リポジトリを初期化し、リモートリポジトリの作成を行います。
```terminal:terminal
$ git init
$ git remote add origin https://github.com/ユーザー名/リポジトリ名.git
```

ユーザー名/リポジトリ名などと書いてますが、作成したリポジトリのページに行き、CodeのタブにURLが記載されてますのでそこからコピペしちゃいましょう。

### ファイルのコミット
リポジトリをプッシュするため、ファイルのコミットを行います。

```terminal:terminal
$ git add .
$ git commit -m "Initial commit"
```



>git commitを実行した際、「Author identity unknown...なんちゃら...etc」というエラーが出る可能性があります。
その場合はGitにGitHubのユーザー名、メールアドレスを登録してあげる必要があります。
下記を参考に設定してください。

https://qiita.com/ytnkmr0320/items/a1a7d29255962ea48e9f

### リポジトリのプッシュ
GitHubへプロジェクトを登録します。

```terminal:terminal
$ git push -u origin master
```
![スクリーンショット 2025-01-31 164223.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3917806/992e43f6-42ef-0adc-82f7-3d2c7f2b69d4.png)
完了したらGitHubのCodeタブを覗いてみてください。
コンテナ化したプロジェクトが追加されていると思います。

ここまでくればデプロイまであと少し。
最後にVercelでの作業です。

# ４．Vercelを用いたデプロイ

### そもそもVercelって何なの？？？

端的に言うと、Next.jsを開発した人達が作ったWebホスティングサービスです。
そのため、Next.jsをデプロイするのに非常に相性がいいです。

### Vercelへの登録
https://zenn.dev/icck/articles/f7aa3f5304cd1a

上記記事を参考に登録をお願いします。

リポジトリを選択するところでは、３．で作成したリポジトリを選択してください。

### デプロイ作業
Vercelにアクセスします。
Add New > Project　をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3917806/8828c855-932c-b88e-743c-5b0ac5565518.png)

Vercelへの登録で作成したリポジトリを選んでいれば「Import Git Repository」に表示されているはずです。
「Import」をクリックしましょう。

![スクリーンショット 2025-01-31 163556.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3917806/d8004c65-1a6d-d716-3d95-e5eabb89d25d.png)

このような画面に飛びます。
値を設定したら、「Deploy」をクリックしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3917806/940b351c-913f-204f-35cc-a3a3f0f3d8b4.png)

>- Framework Preset：Next.js 
>- Root Directory：src
→Editをクリックするとフォルダ選択画面が出ますので、そこで「src」をクリックしてください。


少し時間がかかります。
完了するとこのような画面になりますので、赤枠部分をクリックしてください。

![スクリーンショット 2025-01-31 165753.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3917806/f6143675-5e00-984b-eaf6-8946271d3473.png)

おめでとうございます。
Webアプリのデプロイ完成です！

![スクリーンショット 2025-01-31 170032.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3917806/0cf0c70a-9492-bcd0-dc06-728cd4099838.png)

こちらが本記事執筆時にデプロイしたWebアプリです。
しっかりhttpsとなっていますので、セキュリティも問題なしです。

https://sample-app-flax.vercel.app/

# 最後に
DockerとNext.jsを用いたWebアプリデプロイ、いかがでしょうか？
個人学習、自己開発にピッタリだと思います。
是非やってみてください。