feat(utils): ファイルアップロード共通バリデーションユーティリティを追加 - #154
Conversation
Deploying devtools with
|
| Latest commit: |
553effa
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://e3718fa1.devtools-d9w.pages.dev |
| Branch Preview URL: | https://feature-file-validation-util.devtools-d9w.pages.dev |
validateFile 関数および vitest テスト(11 ケース)を追加。 EMPTY / TOO_LARGE / WRONG_TYPE の各エラーコードと image / text 両 kind に対応。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
816a94e to
e40e3a7
Compare
レビュー: feat(utils): ファイルアップロード共通バリデーションユーティリティを追加概要
良い点
指摘事項🟡 推奨修正
🟢 改善提案
🟢 任意
結論設計と契約は妥当、マージ前に上記 1–3 を修正すれば取り込み可。4–7 は follow-up でも可。 |
1. 拡張子マッチを大文字小文字区別なしに変更(toLowerCase) 2. TOO_LARGE メッセージの「以上」を「を超える」に修正(境界値仕様と一致) 3. MB 表示を toFixed(1) + 空白統一に変更(EncodingConverter と一致) テストに大文字拡張子(.CSV)ケースを追加 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
レビュー対応(指摘 1–3)🟡 推奨修正(対応済み)1. 拡張子マッチの大文字小文字対応 2. TOO_LARGE メッセージの「以上」→「を超える」 3. MB 表示の精度と空白統一 🟢 改善提案(4–7)について
|
再レビュー(修正対応の確認)修正コミット ✅ 確認済みの修正点
🟢 軽微な残課題(任意)
結論指摘 1–3 の修正は LGTM。マージ可。 上記の任意項目は次の組み込み PR で拾えば十分です。指摘 4(image の |
レビュー指摘 #3 #4 への対応: - shared-agent-rules.md 6.2: 「`origin/develop` 起点を必ず明示」の理由(PR #154/#181 既知問題)と playbook 1.1 章へのポインタを追加 - playbooks/e2e-validation.md 2.1: ステップ 0 のコマンド列が広すぎたので説明文を表外の引用ブロックへ移動 - playbooks/pr-creation.md 4: PR 作成コマンドの一時ファイルパス例に `$TMPDIR/pr_body.md` を併記(`/tmp/claude/` も併記、permissions allow/ask の理由を明示) レビュー指摘 #1 (SSOT 明示) と #2 (参照チェッカ機械化) は別 issue で対応予定。
* docs(rules): playbooks/ と setup/ 配下にタスク手順書・環境セットアップを切り出す shared-agent-rules.md の肥大化対策として、以下 4 ファイルを新設: - docs/playbooks/pr-creation.md: ブランチ作成→検証→PR→マージの完全手順 - docs/playbooks/e2e-validation.md: E2E 実行手順・push 前チェックリスト・失敗判定 - docs/setup/plugins.md: Claude Code プラグイン install ガイド (Web silent fail / context7 403 / API キー) - docs/setup/gemini-policy.md: Gemini security policy symlink セットアップ 「常時必読の規約」と「タスク開始時に読む手順書」を物理的に分離し、 セッション毎に必要な情報量を減らすのが狙い。 * docs(rules): CLAUDE.md / GEMINI.md / shared-agent-rules.md を新ファイル参照型に圧縮 肥大化していた常時ロード対象ファイルを以下の方針でスリム化: - CLAUDE.md: 80→46 行。プラグイン install トラブル詳細を docs/setup/plugins.md へ移動 - GEMINI.md: 53→39 行。security policy symlink 手順を docs/setup/gemini-policy.md へ移動 - shared-agent-rules.md: 365→258 行。以下を移動: - 旧 3 章(E2E 実行手順)→ docs/playbooks/e2e-validation.md - 旧 6.2 / 6.2a(ブランチ作成詳細)と 3.2 親 push チェックリスト → docs/playbooks/pr-creation.md - 旧 8 章(UI 目視確認)→ docs/ui-conventions.md 3.1 章に統合 - 旧 10 章 → 9 章、旧 11 章 → 10 章、旧 12 章 → 11 章 に章番号を繰り上げ - agent-lessons.md の章番号参照を新番号に追従 各章末尾に「詳細手順 → docs/playbooks/X.md」のポインタを残して双方向リンク化。 * docs(rules): PR #240 レビュー指摘の軽微対応(「なぜ」補足 / 表幅 / TMPDIR 例示) レビュー指摘 #3 #4 への対応: - shared-agent-rules.md 6.2: 「`origin/develop` 起点を必ず明示」の理由(PR #154/#181 既知問題)と playbook 1.1 章へのポインタを追加 - playbooks/e2e-validation.md 2.1: ステップ 0 のコマンド列が広すぎたので説明文を表外の引用ブロックへ移動 - playbooks/pr-creation.md 4: PR 作成コマンドの一時ファイルパス例に `$TMPDIR/pr_body.md` を併記(`/tmp/claude/` も併記、permissions allow/ask の理由を明示) レビュー指摘 #1 (SSOT 明示) と #2 (参照チェッカ機械化) は別 issue で対応予定。
概要
src/utils/file-validation.tsを新規作成src/utils/__tests__/file-validation.test.tsを新規作成(vitest、11 ケース)validateFile(file, opts)関数を実装し、画像・テキスト両 kind に対応したファイルバリデーションを提供変更内容
FileKind:'image' | 'text'ValidateOptions:maxBytes・kind・acceptExtensions(省略可)ValidationResult:{ ok: true; file }または{ ok: false; code; message }EMPTY→TOO_LARGE→WRONG_TYPE→ok: truetext/*,application/json,application/xml,application/toml) またはacceptExtensionsの拡張子マッチに対応テスト計画
EMPTYTOO_LARGEok: true(境界値)application/pdf+ image kind →WRONG_TYPEimage/png→ok: trueimage/webp→ok: truetext/plain→ok: trueapplication/json→ok: true.csv+acceptExtensions=['.csv']→ok: trueimage/jpeg+ text kind +acceptExtensions=['.csv']→WRONG_TYPEapplication/octet-stream+file.exe→WRONG_TYPEnpm run test全 267 テスト緑🤖 Generated with Claude Code