LoginSignup
2
0

Docker + Next.js13ちゃっちゃと動かしたい人へ

Last updated at Posted at 2023-05-27

はじめに

Docker前提の記事なのと、使い捨ての環境を作れるようになると便利なのでDocker入れてない人はこの機会に是非入れてみてください!!(Docker Init熱いから入れ得やで!!!)

他の方の記事を使用していますが、もし問題があるならコメントいただけると幸いです。
後エラーとかの問題起きたらコメントいただけると嬉しいです(調べて追加していきたいので!)。

Docker Install参考

筆者はWindowsなので以下の記事を参考に入れました。(多分)

注意

使用する際の注意点ですが、Ubuntuのhome配下にプロジェクトフォルダを配置して使用しないと全体的に遅くなるので注意してください。(筆者は過去にnode_module入れるのに10分以上かかってキレました。)

本編

下部に使用するファイル最終結果があるので参考にしてください。

  • docker-composeはv2。
  • 筆者はWSL2を使用しUbuntuにDockerを入れて使ってるので何かあったら適宜対処してください。
    • docker-compose v1の場合は docker compose を docker-compose に変えてください。
v2: docker compose build --no-cache
    to
v1: docker-compose build --no-cache

コンテナの作成と起動後コンテナ内へ

docker compose build --no-cache && docker compose up -d && docker compose exec next ash

コンテナ内

  • 以下コマンド実行、名前をnext-appにして感謝のエンター連打(コンテナ)
pnpx create-next-app@latest
※ 以下を1行ずつ順に使用してください
exit
docker compose down && docker compose build --no-cache && docker compose up -d && docker compose exec next ash
  • 最後に開発環境で動かすやで!(コンテナ)
 pnpm i && pnpm dev

PS.もうちょい勉強するなら英語やけどこの動画が良さそう。

使用するファイル

Dockerfile

FROM node:18.16-alpine3.18

ENV APP_ROOT /node/next-app

RUN apk update && \
    npm install -g pnpm && \  # デフォルトで入ってるyarnを使用する場合この行いらないです
    mkdir -p $APP_ROOT

WORKDIR $APP_ROOT

COPY . .

EXPOSE 3000

docker-compose.yml

version: "3.8"

services:
  next:
    build:
      context: ./
    volumes:
      - ./:/node
    ports:
      - 3000:3000
    tty: true
    command: ash -c '/bin/ash'

.dockerignore

.pnpm-store
next-app/node_modules
next-app/.next
next-app/next-env.d.ts

# Gihubに上げる場合以下追加
.gitignore
.git
next-app/.gitignore

おまけ

Prettier 追加

コンテナ内で以下コマンドを実行

pnpm add -D prettier eslint-config-prettier prettier-plugin-tailwindcss

pnpm format でPrettier使用できるようにpackage.jsonと.eslintrc.jsonを変更

package.json

  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint",
+   "format": "prettier --write --ignore-path .gitignore './**/*.{js,jsx,ts,tsx,json}'"  //追加
  }

.eslintrc.json

{
  "extends": ["next/core-web-vitals", "plugin:import/warnings", "prettier"]
}

ここでは分けてますけど、筆者は普段は楽したいがために以下のようにまとめて使用しています。

"lint": "next lint && prettier --write --ignore-path .gitignore './**/*.{js,jsx,ts,tsx,json}'"

Parsing error

vscode使用時、postcss.config.jsでParsing error: Cannot find module 'next/babel'がでるので、
Dockerfileのあるrootに.vscode/settings.json作って以下記述

.vscode/settings.json

{
  "eslint.workingDirectories": ["./next-app"]
}

エラーで検索したら.eslintrc.jsonに以下のように変更みたいなのがでますが、波線消えるだけでpnpm lint実行時に失敗します。

{
  "extends": ["next/core-web-vitals","next/babel"]
}

css(unknownAtRules)

globals.css

@tailwind base;
@tailwind components;
@tailwind utilities;

@tailwindでUnknown at rule @tailwindcss(unknownAtRules)が出る方は
拡張機能でPostCSS Language Supportを入れてください。

最終結果

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0