1) cd apps/web
- 役割:作業ディレクトリを Next.js(フロント)配下に移動。
-
なぜ必要:
package.json
・node_modules
の基準は“今いるディレクトリ”。モノレポでは場所を間違えると別パッケージを操作してしまう。 - 落とし穴:ワークツリー直下で実行して「script not found」になるのは大体これ。
2) npm ci
-
役割:
package-lock.json
を厳密に再現してクリーンインストール。 -
挙動:
- 既存の
node_modules
を削除 → lock に完全一致で入れる。 -
package-lock.json
がない・ズレてるとエラーで止まる。
- 既存の
-
使いどころ:CI/CD、本番デプロイ。再現性・速度(並列・キャッシュ)に強い。
-
比較:
npm install
は依存解決をやり直すことがあり、環境差が出やすい。
3) npm run lint
(ある場合)
-
役割:ESLint(+
next lint
)で静的検査。スタイルやバグっぽい書き方をチェック。 -
何が起きる:
package.json
の"scripts": { "lint": "next lint" }
などが動く。 -
CI的ポイント:
- ルール違反があると非ゼロ終了コードでCIを落とす。
- 自動修正は通常ローカルで
npm run lint -- --fix
。CIでは“検出のみ”が一般的。
-
落とし穴:
eslint.config.js
/.eslintrc.*
の未整備、tsconfig.eslint.json
のパスズレ、next
のapp/
対応設定漏れ。
4) npm run build
-
役割:本番ビルド。Next.jsなら
next build
で.next/
を生成。 -
検証内容:型エラー/ESLintエラーをビルド時に弾く設定にしていることが多い(Nextは型は別途
tsc
が正確)。 -
必要なもの:
NODE_ENV=production
、必要な 環境変数(API URL など)。 -
落とし穴:
- 環境変数未設定でビルド失敗 or ランタイムクラッシュ。
-
next.config.js
の experimental 設定や画像最適化の外部ドメイン許可漏れ。 - 依存の optional/peer が足りずにビルド時にコケる。
5) npx tsc --noEmit
-
役割:TypeScriptの型チェックのみ(出力=ビルド成果物を出さない)。
-
狙い:Nextのビルドと切り離して純粋な型検証をCIに入れると、型の破綻を早期検知できる。
-
参照:
tsconfig.json
(やtsconfig.build.json
)。"skipLibCheck": false
だと外部型まで厳しめ。 -
落とし穴:
-
devDependencies
にtypescript
が無いと動かない。 - モノレポで
paths
/references
の解決がズレて型参照エラー(baseUrl
,paths
,composite
を整理)。 -
--noEmit
でもtsc
はビルド用に型解決を全部走らせる=最も厳しいチェックとして機能。
-
まとめ(CIの意図)
-
npm ci
:依存をクリーンに固定再現 -
npm run lint
:コード規約・軽微なバグ検出 -
npx tsc --noEmit
:型の整合性を静的保証 -
npm run build
:本番ビルドが実際に通るか検証
この順で落ちると原因が切り分けやすい(依存→スタイル→型→ビルド)。