aws-samples / aws-samples/serverless-full-stack-webapp-starter-kit

chore(webapp): 純粋な JS/TS パッケージを dependencies から devDependencies へ移動する

Aperta
#213 3 commenti 0 reazioni 0 assegnatari Vedi su GitHub
enhancement needs-triage
Lingua principale
TypeScript
Stelle
229
Fork
45
Merge medio
1m
PR unite (30g)
4

Descrizione

executor 07(全コードベースのコードレビュー)が発見し、独立したセキュリティレビュー(サブエージェント, opus-4.7)で裏付けた。

## 問題

`AGENTS.md` にはこう書かれている:「Dependencies: esbuild and Next.js bundle everything, so only packages with native binaries needed at Lambda runtime belong in `dependencies`. Everything else goes in `devDependencies`.」(esbuild と Next.js がすべてをバンドルするため、Lambda 実行時にネイティブバイナリを必要とするパッケージのみが `dependencies` に属する。それ以外はすべて `devDependencies` へ。)

`apps/webapp/package.json:18-39` は、純粋な JavaScript/TypeScript パッケージを `dependencies` 配下に宣言している:

- `@aws-amplify/adapter-nextjs`, `@aws-sdk/client-lambda`, `@aws-sdk/client-ssm`
- `@repo/db`, `@repo/event-utils`, `@repo/shared-types`(ワークスペースパッケージ)
- `aws-amplify`
- `class-variance-authority`, `clsx`
- `drizzle-orm`
- `lucide-react`
- `next`, `next-safe-action`, `next-themes`
- `react`, `react-dom`, `react-hook-form`
- `sonner`
- `tailwind-merge`, `tw-animate-css`
- `zod`

比較として、`apps/async-job/package.json` と `apps/db-migrator/package.json` はすべてを `devDependencies` に正しく配置し、ビルド時の esbuild によるバンドルに依存している。

webapp の Docker イメージは Next.js の `output: 'standalone'` を使うため、実行時に Lambda が実行するのは `apps/webapp/.next/standalone/*` のみである。`standalone` がトレースして出力に含めたものが実際に動作する対象であり、`dependencies` リストは実行時のクロージャではない。実行時に不要なパッケージを `dependencies` に残すと、推移的なインストールクロージャが肥大化し、Dependabot の監査対象が不明瞭になり、キットのコピー利用者に誤ったパターンを示してしまう。

## 根拠

- 正規表現: `apps/webapp/package.json` の `dependencies`。
- AGENTS.md の Conventions セクション。
- Docker ビルド: `apps/webapp/Dockerfile:1-29`(ビルダはワークスペース全体をインストールし、ランナーには `.next/standalone` + `.next/static` + `run.sh` のみをコピーする)。

## 対応の方向性

Next.js の standalone トレーシングが実行時の外部依存として必要としない各パッケージを `devDependencies` へ移動する。イメージを再ビルドしてスモークテストで検証する。ネイティブ限定の例外(もし現れれば、例: `sharp`)はコメント付きで `dependencies` に残してよい。

`apps/webapp` はこの点で `apps/async-job` と同じ見た目になるはずである。

## サンプルとしての教育的リスク

コピー利用者は肥大化した本番依存セットを引き継ぎ、サプライチェーンアラートの対象を広げ、ベースイメージサイズに関するコスト/複雑さの議論を悪化させる。

## 関連

- executor 07 の発見まとめ: `.kiro/specs/v3-release-prep/review-full-report.md` (M3)

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Leggi AGENTS.md, apps/webapp/package.json e apps/webapp/Dockerfile, quindi confronta il posizionamento delle dipendenze con apps/async-job/package.json e apps/db-migrator/package.json. Sposta i pacchetti di cui standalone tracing non ha bisogno a runtime, mantieni in dependencies qualsiasi eccezione giustificata per native-binary, ricostruisci l’immagine ed esegui lo smoke test.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
aws, docker, next.js, react, typescript
Ambito
build-system, cloud, devops, web-dev
Tipo di issue
Refactoring
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Tranquilla
Chiarezza
Specificata chiaramente
Idoneità per principianti
68/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.