Claude-skill-registry error-handling-and-messages
Next.js(App Router) の Server Actions を前提とした、エラーハンドリングと表示メッセージの統一ルール。
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/error-handling-and-messages" ~/.claude/skills/majiayu000-claude-skill-registry-error-handling-and-messages && rm -rf "$T"
manifest:
skills/data/error-handling-and-messages/SKILL.mdsource content
エラーハンドリング & メッセージ設計(SSoT)
このスキルは、Network Boundary を跨ぐエラーの扱いと、ユーザー向けメッセージの一元管理を徹底するための規約です。 アプリ全体のエラーメッセージは
src/domain/errors/error-messages.ts を単一の正解 (SSoT) とします。
1. 基本方針(必須)
- 例外をそのままクライアントに渡さない
Server Action から
を直接表示しない。Network Boundary を跨いだError.message
は production で秘匿される。Error - Server Action は「表示可能なエラー」を値として返す
例外は
形式(Result
/success
)に畳み込み、failure
は 安全に表示できる文言に限定する。message - 表示メッセージは必ず
を経由ERROR_MESSAGES
直接の日本語文字列を散在させない。 - 内部詳細はログに集約
スタックトレースや技術情報はサーバー側でログ化し、ユーザー表示には出さない。
2. 推奨パターン
2.1 Server Action の戻り値
- 返却は
を基本形とする(ServerActionResult<T>
)。src/lib/async-handler.ts - 成功時は
(削除系などは{ success: true, data?: T }
省略可)。data - 失敗時は
とし、{ success: false, error: string }
はerror
から生成する。ERROR_MESSAGES - 必要に応じて
/needsReauth
などの追加フィールドを許容する。requiresSubscription - 参考:
の型定義ServerActionResult
export interface ServerActionResult<T> { success: boolean; data?: T; error?: string; }
2.2 クライアント側の共通ハンドリング
- 取得/更新の実行は
で統一する(handleAsyncAction
)。src/lib/async-handler.ts
/onSuccess
/setLoading
で UI 状態とメッセージを集中管理する。setMessage- 参考: 実装例(
と同型の最小パターン)src/hooks/useGscSetup.ts
await handleAsyncAction(fetchGscStatus, { onSuccess: data => setStatus(data as GscConnectionStatus), setLoading: setIsSyncingStatus, setMessage: setAlertMessage, defaultErrorMessage: ERROR_MESSAGES.GSC.STATUS_FETCH_FAILED, });
2.3 メッセージ管理
- 表示メッセージは
を唯一の参照元とする。ERROR_MESSAGES - Server Action 側で文言を確定し、クライアントは
を表示するだけに留める。result.error
2.4 例外の扱い(Server Action 側)
- 例外は
で捕捉し、try/catch
に畳み込む。{ success: false, error } - 技術的詳細はログに集約し、ユーザー向けには安全な文言のみ返す。
3. 実装ルール(必須)
- メッセージ追加は
に集約src/domain/errors/error-messages.ts - Server Action は
を throw せずError
を返す{ success: false, error } - クライアントは
を表示するだけに留めるresult.error
を使い UI 状態とメッセージ処理を統一するhandleAsyncAction
4. アンチパターン
- Client Component で
を直接表示するError.message - Server Action で例外をそのまま throw する
- メッセージ文字列を任意のファイルに直接書く
-
を使わずに各所でエラーハンドリングを分散させるhandleAsyncAction
5. セルフレビュー項目
-
に追加した文言が他用途で重複しないかERROR_MESSAGES - Server Action の返却が
の形に沿っているかServerActionResult - Network Boundary 越しに
を使っていないかError.message -
で UI 側の処理が統一されているかhandleAsyncAction