SVGから型付きReactコンポーネントを作成

生のSVGマークアップを再利用可能なTSXアイコンに変換し、色・サイズ・アクセシビリティの一貫性を保ちます。

SVGをコードにそのまま貼り付けると、propsが不統一になったり値がハードコードされたりしがちです。このガイドでは、クリーンなReact + TypeScriptアイコン運用を紹介します。

1) SVG入力を正規化する

  • 変換前に不要なグループ、メタデータ、インラインスタイルを削除します。
  • viewBoxを保持し、コンポーネントのスケーリングを予測可能に保ちます。
  • 1ページに複数のアイコンを表示する際の衝突を避けるため、IDやマスクをリネームします。

2) 型安全なコンポーネントを生成する

  • SVGのpropsを拡張するTypeScriptのpropsを使い、IntelliSenseを完全にサポートします。
  • 幅・高さにデフォルト値を設定し、親の利用側から上書きできるようにします。
  • アイコンがテキスト色を継承する場合は、固定のfillをcurrentColorに置き換えます。

3) デザインシステムに統合する

  • アイコンを予測可能なフォルダーに格納し、単一のバレルファイルからエクスポートします。
  • CIで不正なSVG属性をブロックするlintルールやテストを適用します。
  • セマンティックなサイズトークンとariaラベルの利用例をドキュメント化します。

SVGからReact TypeScriptへのFAQ

アイコンコンポーネントは固定色とcurrentColorのどちらを使うべき?
デザインシステムのアイコンでは、親のテキストやテーマトークンから色を制御できるため、通常はcurrentColorが最適です。
アイコンのpropsの型はどう定義する?
React.SVGProps<SVGSVGElement>をベースにし、必要な場合のみ任意のカスタムpropsを追加します。
アクセシビリティラベルは柔軟に保てますか?
はい。title/aria-labelのpropsを公開し、装飾用アイコンではデフォルトでaria-hiddenにします。
React変換の前に最適化すべき?
はい。先に最適化するとノイズが減り、不要な属性をTSXファイルに持ち込むのを避けられます。