Skip to content

🐛 mainのCIエラーを修正 (react-hooks/set-state-in-effect + pnpm 11) - #246

Merged
Shion1305 merged 1 commit into
mainfrom
fix/ci-lint-and-lockfile
May 8, 2026
Merged

🐛 mainのCIエラーを修正 (react-hooks/set-state-in-effect + pnpm 11)#246
Shion1305 merged 1 commit into
mainfrom
fix/ci-lint-and-lockfile

Conversation

@Shion1305

@Shion1305 Shion1305 commented May 8, 2026

Copy link
Copy Markdown
Member

概要

Next.js 16 / React 19 アップグレード (#245) 後に main の CI が失敗しており、セキュリティ更新を含む後続のデプロイが止まっていたため、根本対応します。

修正内容

1. react-hooks/set-state-in-effect エラー (6ファイル)

React 19 で導入された新ルールに対し、eslint-disable を使わず根本的に修正:

  • hooks/use-mobile.tsx / components/ui/use-mobile.tsx: useEffect + setStateuseSyncExternalStore に書き換え(matchMedia は外部ストアの典型例)
  • app/page.tsx / components/ui/carousel.tsx: onSelect() 直接呼び出しを emblaApi.emit("select") に変更し、イベントハンドラ経由で setState させる
  • components/mini-lt/SubmitForm.tsx: editingTalk を props で受け取って useEffect 内で setState する派生 state パターンを廃止。useState の初期値で初期化し、親側 (ManageTalks.tsx) で key={editingTalk?.id ?? "new"} を渡して編集対象切り替え時に再マウントさせる
  • components/onboarding-form.tsx: OAuth コールバックの楽観的 setState を fetchProfile().then() 内に移動。URL パラメータ由来のエラー表示は queueMicrotask で effect 本体から外に出す

2. Docker ビルドの ERR_PNPM_IGNORED_BUILDS

corepack 経由で最新の pnpm 11.0.8 が降ってきていたのが原因。pnpm 11 では以下の破壊的変更があり、CI で fatal になっていた:

  • package.json#pnpm フィールドを読まなくなった
  • strictDepBuilds がデフォルト true になり、未承認ビルドスクリプトでエラー終了する

ローカル環境 (pnpm 10.33.0) と揃えるため、package.json"packageManager": "pnpm@10.33.0" を追加して固定。pnpm 10 では未承認スクリプトは警告止まりで動作するため、追加の許可リスト設定は不要。

3. Lint workflow の二重指定エラー

上記 (2) で packageManager を入れた結果、pnpm/action-setup@v4version: 10 (Action 引数) と pnpm@10.33.0 (packageManager) の二重指定でコケるようになった。version: 10 のほうを削除し、packageManager を信頼させる。

動作確認

@Shion1305
Shion1305 force-pushed the fix/ci-lint-and-lockfile branch from 10b63c0 to 346d4ad Compare May 8, 2026 09:39
@github-actions

github-actions Bot commented May 8, 2026

Copy link
Copy Markdown

Deployed on https://dev-pr-246-birbz3fm6q-an.a.run.app

## 内容

main の CI が以下 2 つの理由で失敗していたのを根本修正する。

### 1. react-hooks/set-state-in-effect (lint失敗)

React 19 / Next.js 16 で新しく入った ESLint ルール。
useEffect 内で setState を直接呼んでいた箇所を、React 19 のイディオムに沿って書き換え。

- hooks/use-mobile.tsx, components/ui/use-mobile.tsx
  - useEffect + useState を useSyncExternalStore に置き換え
- app/page.tsx, components/ui/carousel.tsx
  - emblaApi 初期化時の onSelect() 直接呼び出しを emblaApi.emit("select") に変更
- components/mini-lt/SubmitForm.tsx
  - editingTalk から派生する state を useEffect で同期するのをやめ、useState の初期値で表現
- components/mini-lt/ManageTalks.tsx
  - 編集対象切り替え時の再マウント用に SubmitForm へ key を付与
- components/onboarding-form.tsx
  - 楽観的更新の setState を fetchProfile().then() のコールバックに移動
  - URL エラーパスは queueMicrotask でラップして effect 同期 setState を回避

### 2. pnpm 11 へのバージョン固定

corepack 経由で最新 pnpm 11.0.8 が降ってくると以下が起きていた。
- package.json#pnpm フィールドを読まなくなる破壊的変更
- strictDepBuilds がデフォルト true になり ERR_PNPM_IGNORED_BUILDS で fatal

ローカル環境の pnpm 10.33.0 と揃えるため packageManager フィールドで固定。
@Shion1305
Shion1305 force-pushed the fix/ci-lint-and-lockfile branch from 346d4ad to 73634af Compare May 8, 2026 09:41
@github-actions

github-actions Bot commented May 8, 2026

Copy link
Copy Markdown

Deployed on https://dev-pr-246-birbz3fm6q-an.a.run.app

1 similar comment
@github-actions

github-actions Bot commented May 8, 2026

Copy link
Copy Markdown

Deployed on https://dev-pr-246-birbz3fm6q-an.a.run.app

@Shion1305
Shion1305 merged commit 2781b88 into main May 8, 2026
3 checks passed
@Shion1305
Shion1305 deleted the fix/ci-lint-and-lockfile branch May 8, 2026 09:43
Shion1305 added a commit that referenced this pull request May 24, 2026
* ⬆️ pnpm 11.3.0 へアップグレード

#246 で pnpm 10.33.0 に固定していた制約を解除し、pnpm 11 系へ移行。
pnpm 11 の破壊的変更 (`strictDepBuilds` のデフォルト true 化) に対応するため、
`pnpm-workspace.yaml` で許可するビルドスクリプトを明示的に列挙。

あわせて軽微な依存パッケージのバージョンを更新。

* 🐛 pnpm-workspace.yaml の CI 失敗を修正

- prettier の指摘に従いシングルクォート → ダブルクォートへ整形
- Docker ビルドで pnpm-workspace.yaml が COPY されず
  `strictDepBuilds` が ERR_PNPM_IGNORED_BUILDS で落ちていたため、
  cloudrun/Dockerfile の deps ステージに pnpm-workspace.yaml* を追加
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant