Skip to content

refactor: ツールコンポーネントの重複コードを共通化(高・中優先度6パターン) - #7

Merged
fumtas1k merged 5 commits into
mainfrom
develop
Apr 13, 2026
Merged

refactor: ツールコンポーネントの重複コードを共通化(高・中優先度6パターン)#7
fumtas1k merged 5 commits into
mainfrom
develop

Conversation

@fumtas1k

@fumtas1k fumtas1k commented Apr 13, 2026

Copy link
Copy Markdown
Owner

概要

各ツールコンポーネントに散在していた重複コードを、優先度の高いものから順に共通化しました。

変更内容

高優先度(3パターン)

  • フォーカスリング処理utils/styles.tsonFocusRing / onBlurRing を追加し、全6ツールの重複インラインハンドラ(計11箇所)を削除
  • SVG/PNG ダウンロード処理utils/download.ts を新規作成(5関数)。JanCodeGs1Databar の重複ロジックと svgToPngBlob を削除、QrCode も統一
  • CopyButton の重複実装CopyButtoncompact プロパティを追加し、UlidGeneratorRowCopyButton(28行)を削除

中優先度(3パターン)

  • 数値入力クランプ処理src/hooks/useClampedInput.ts を新規作成。UlidGeneratorDummyText の重複 change/blur ロジックを統合
  • モード切替タブ UIsrc/components/ui/ToggleGroup.tsx を新規作成。JanCodeUrlEncoder の重複タブ UI を統合
  • Astro ページのインラインスタイルglobal.csstool-info-heading / tool-info-body / tool-info-list クラスを追加し、5ページ×複数箇所の重複インラインスタイル文字列を削除

共通 UI コンポーネント追加(今後の開発向け)

  • InputField — label・input/textarea・error/hint・サンプルボタンを統合した汎用フォームフィールド。既存5ツールに適用済み。新規ツールでは生の <input> / <textarea> ではなくこちらを使うこと
  • ErrorMessagerole="alert" 付きエラー表示コンポーネント
  • DownloadButtonGroup — SVG/PNGダウンロードのボタンペア(onDownloadPng は省略可)

型チェック

astro check — エラー 0件

対象外(意図的に放置)

  • バリデーション冒頭ガード節(2ファイル×2行、抽象化コスト > ベネフィット)
  • チェックディジット計算(GS1/JAN でウェイト割り当て・戻り値型が異なり、共通化で複雑化するリスクあり)

🤖 Generated with Claude Code

fumtas1k and others added 2 commits April 13, 2026 10:01
- utils/styles.ts に onFocusRing / onBlurRing を追加し、全ツールの重複インラインハンドラを削除
- utils/download.ts を新規作成(SVG/PNG ダウンロードユーティリティ5関数)
- JanCode・Gs1Databar の重複ダウンロードロジックを共通関数に置き換え、svgToPngBlob を削除
- QrCode のダウンロード処理も downloadSvgElement に統一
- CopyButton に compact プロパティを追加し、UlidGenerator の RowCopyButton(重複実装)を削除

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- src/hooks/useClampedInput.ts を新規作成し、UlidGenerator・DummyText の重複 change/blur ロジックを統合
- src/components/ui/ToggleGroup.tsx を新規作成し、JanCode・UrlEncoder の重複モード切替タブ UI を統合
- global.css に tool-info-heading/body/list クラスを追加し、5ページの重複インラインスタイルを削除

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@fumtas1k fumtas1k self-assigned this Apr 13, 2026
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Apr 13, 2026

Copy link
Copy Markdown

Deploying devtools with  Cloudflare Pages  Cloudflare Pages

Latest commit: 9efe99b
Status: ✅  Deploy successful!
Preview URL: https://0573a914.devtools-d9w.pages.dev
Branch Preview URL: https://develop.devtools-d9w.pages.dev

View logs

fumtas1k and others added 2 commits April 13, 2026 10:37
- InputField: label・textarea/input・error/hint・サンプルボタンを統合した汎用フォームフィールド
- ErrorMessage: role=alert のエラー表示コンポーネント
- DownloadButtonGroup: SVG/PNGダウンロードボタンペア
- JanCode・UrlEncoder・QrCode・JwtDecoder・Gs1Databar の入力部分とダウンロードボタンに適用

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@fumtas1k fumtas1k closed this Apr 13, 2026
@fumtas1k fumtas1k reopened this Apr 13, 2026
@fumtas1k
fumtas1k merged commit 5e001f0 into main Apr 13, 2026
2 of 3 checks passed
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