Skip to content
Development

WebアプリのためのSVGアイコン作成ガイド:設計から本番まで

モダンWebアプリケーション向けのスケーラブルなSVGアイコンシステムの完全ガイド。設計・最適化からReact、Vue、本番環境への実装まで解説します。

Robin Monteiro2025年11月24日2026年10月10日6 min
Use this article with an AI assistant:
.md
WebアプリのためのSVGアイコン作成ガイド:設計から本番まで
R
Robin Monteiro

Founder of VectoSolve

Self-taught developer, founder and sole developer of VectoSolve since 2024. He builds the conversion engine and the cutting, embroidery and 3D printing exports.

How this article was made: drafted with AI assistance, then edited and fact-checked before publication. About the author

Image vectorizationCutting machine filesEmbroidery filesSVG
Free previewNo signupFull-quality output

Key Takeaways

  • SVGアイコンは解像度に依存しないため、1x/2x/3xのラスター画像が不要
  • SVGでcurrentColorを使えば、CSSのcolorプロパティでアイコンの色を制御可能 — 1ファイルで無限の色に対応
  • インラインSVGは最大の制御性、SVGスプライトは大規模アイコンセットのキャッシュに最適
  • デコレーティブアイコンにはaria-hidden="true"、意味のあるアイコンにはrole="img"と<title>を追加
  • Heroicons、Lucide、Tabler Iconsなど、数千のプロダクション対応SVGアイコンが利用可能
WebアプリケーションのためのSVGアイコン
モダンWebアプリ向けスケーラブルSVGアイコンシステムの構築

なぜWebアプリにSVGアイコンなのか?

モダンWebアプリケーションに必要なアイコンの条件:

  • スケーラブル:あらゆるデバイス・画面密度で完璧に表示
  • 高パフォーマンス:高速読み込み、最小限の帯域幅
  • 柔軟:スタイリングやアニメーションが容易
  • アクセシブル:スクリーンリーダーに対応

SVGアイコンはこれらすべてを満たします。


アイコンフォントとラスター画像の問題点

アイコンフォントの問題

- 読み込み遅延(FOIT — テキストが見えなくなる現象)
- アンチエイリアシングの問題
- マルチカラー対応の制限
- アクセシビリティの課題
- HTTPリクエストのオーバーヘッド
- CSS依存

ラスター画像(PNG)の問題

- 異なる密度用に複数バージョン(1x, 2x, 3x)
- ファイルサイズが大きい
- スタイルカスタマイズ不可
- 色の固定
- 複数のHTTPリクエスト

SVGアイコンの利点

- 全サイズに1ファイル
- HTMLにインライン(HTTPリクエストなし)
- CSSスタイリング
- JavaScriptアニメーション
- あらゆる画面で完璧
- 極小ファイルサイズ
- マルチカラー対応
- 完全なアクセシビリティ

Pro Tip: Font Awesomeなどのアイコンフォントから移行する場合、一度に全部変換しないでください。まずファーストビューのアイコンをインラインSVGに置き換えましょう — LCPの即座の改善とFOITの解消を実感できます。


プロジェクトでのSVGアイコン設定

方法1:インラインSVG(推奨)

メリット:完全な制御、HTTPリクエストなし、スタイル・アニメーション可能

html
<svg class="icon icon-check" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
  <path d="M20 6L9 17L4 12" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
css
.icon {
  width: 24px;
  height: 24px;
  color: #1cb721;
}

方法2:SVGスプライト

メリット:再利用可能、キャッシュ可能、整理しやすい

sprite.svgを作成:

xml
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
  <symbol id="icon-check" viewBox="0 0 24 24">
    <path d="M20 6L9 17L4 12" stroke="currentColor" stroke-width="2"/>
  </symbol>
  <symbol id="icon-close" viewBox="0 0 24 24">
    <path d="M18 6L6 18M6 6l12 12" stroke="currentColor" stroke-width="2"/>
  </symbol>
</svg>

HTMLで使用:

html
<svg class="icon">
  <use href="/sprite.svg#icon-check"/>
</svg>

方法3:IMGタグ

メリット:シンプル、キャッシュ可能

デメリット:スタイリング不可、色の変更不可

html
<img src="/icons/check.svg" alt="チェックアイコン" width="24" height="24">

方法4:CSS背景

メリット:HTMLがすっきり、キャッシュ可能

デメリット:柔軟性に制限

css
.icon-check {
  width: 24px;
  height: 24px;
  background: url('/icons/check.svg') no-repeat center;
  background-size: contain;
}

A Full Year of Conversions for $49

Starter Annual: 25 conversions every month, $49 for the whole year. That is about $4.08 a month · Cancel anytime

Get the Annual Deal

SVGアイコンをゼロから作成

デザイン原則

1. ピクセルグリッドへの整列

  • 24x24グリッドで設計(最も一般的)
  • 整数ピクセルに整列
  • サブピクセルポジションを避ける

2. 統一されたスタイル

  • 均一なストローク幅(通常2px)
  • 統一された角丸半径
  • 同じ視覚的ウェイト

3. Viewbox規則

  • 標準:viewBox="0 0 24 24"

デザインツール

無料:Figma(ブラウザベース)、Inkscape(デスクトップ)、SVG Edit(ブラウザ)

有料:Adobe Illustrator($20.99/月)、Sketch($99/年)、Affinity Designer(2025年9月から無料、以前は$69.99の買い切り)

SVGアイコンデザインとUI統合ハンドブック
SVGアイコンデザインのベストプラクティス — ピクセルグリッド整列、統一ストローク幅、currentColor

既存アイコンのSVG変換

PNG/JPEGから

VectoSolveで高品質な変換:

javascript
const icons = ['check', 'close', 'menu', 'search'];

async function convertIcons() {
  for (const icon of icons) {
    const pngPath = `./icons/png/${icon}.png`;
    const svgPath = `./icons/svg/${icon}.svg`;
    // VectoSolve APIにアップロード
    // 最適化されたSVGをダウンロード
  }
}

SVGアイコンの最適化

1. 不要なコードの削除

SVGOで自動最適化:

bash
npm install -g svgo
svgo input.svg -o output.svg

2. currentColorの使用

CSSで制御可能に:

css
.icon {
  color: #1cb721;
}

Free SVG Tools for Crafters

Design Checker · Color Separator · Mat Preview · Offset Generator · Text to SVG

Check Your SVG Free

CSSでSVGアイコンをスタイリング

css
.icon {
  width: 24px;
  height: 24px;
  stroke: currentColor;
  fill: none;
  stroke-width: 2;
  stroke-linecap: round;
  stroke-linejoin: round;
}

/* サイズバリエーション */
.icon-sm { width: 16px; height: 16px; }
.icon-md { width: 24px; height: 24px; }
.icon-lg { width: 32px; height: 32px; }

/* カラーバリエーション */
.icon-primary { color: #1cb721; }
.icon-danger { color: #dc3545; }
.icon-warning { color: #ffc107; }

ホバーエフェクト

css
.icon-button {
  color: #666;
  transition: color 0.2s, transform 0.2s;
}

.icon-button:hover {
  color: #1cb721;
  transform: scale(1.1);
}

Reactコンポーネントパターン

tsx
interface IconProps {
  name: string;
  size?: number;
  className?: string;
  color?: string;
}

export function Icon({ name, size = 24, className, color }: IconProps) {
  return (
    <svg
      className={`icon icon-${name} ${className || ''}`}
      width={size}
      height={size}
      viewBox="0 0 24 24"
      fill="none"
      style={{ color }}
    >
      <use href={`/sprite.svg#icon-${name}`} />
    </svg>
  );
}

Vueコンポーネントパターン

vue
<template>
  <svg :class="['icon', `icon-${name}`]" :width="size" :height="size" viewBox="0 0 24 24" fill="none">
    <use :href="`/sprite.svg#icon-${name}`" />
  </svg>
</template>

コンポーネントライブラリを構築する際は、スプライトアプローチと併せてツリーシェイキング可能な個別アイコンインポートもエクスポートしましょう。


A Full Year of Conversions for $49

Starter Annual: 25 conversions every month, $49 for the whole year. That is about $4.08 a month · Cancel anytime

Get the Annual Deal

パフォーマンス最適化

1. クリティカルなアイコンをインライン化

ファーストビューのSVGスプライトをHTMLに直接インライン化。

2. 非クリティカルなアイコンを遅延読み込み

javascript
async function loadIconSprite() {
  const response = await fetch('/sprite.svg');
  const svg = await response.text();
  document.body.insertAdjacentHTML('afterbegin', svg);
}

3. バンドルサイズ最適化

@svgr/webpackやvite-plugin-svgrでSVGをコンポーネントとして自動インポート。

4. 圧縮

サーバーでimage/svg+xmlに対してGzip/Brotliを有効化。


アクセシビリティ

html
<!-- デコレーティブアイコン -->
<svg aria-hidden="true" focusable="false">
  <use href="#icon-check"/>
</svg>

<!-- インタラクティブアイコン -->
<button>
  <svg role="img" aria-labelledby="check-title">
    <title id="check-title">完了にする</title>
    <use href="#icon-check"/>
  </svg>
</button>

アイコンライブラリ

オープンソース

  1. Heroicons (heroicons.com) — Tailwind CSS公式アイコン、2スタイル、MIT
  2. Lucide (lucide.dev) — Feather Iconsのフォーク、24x24グリッド、MIT
  3. Tabler Icons (tabler-icons.io) — 4,000以上、カスタマイズ可能、MIT
  4. Bootstrap Icons (icons.getbootstrap.com) — 1,800以上、MIT

VectoSolveでの変換

カスタムアイコンやブランド固有デザインに:

  1. 高解像度PNGで作成
  2. VectoSolveにアップロード
  3. SVGに変換
  4. SVGOで最適化
  5. プロジェクトに統合

Free SVG Tools for Crafters

Design Checker · Color Separator · Mat Preview · Offset Generator · Text to SVG

Check Your SVG Free

本番チェックリスト

  • 全アイコンをSVGOで最適化
  • ViewBoxを統一
  • 動的スタイリングにcurrentColorを使用
  • インタラクティブアイコンに適切なARIAラベル
  • デコレーティブアイコンにaria-hidden="true"
  • キーボードナビゲーション用フォーカスインジケーター
  • 異なる画面サイズでテスト済み
  • ライト/ダークモードでテスト済み
  • ファイルサイズ最小化済み
  • 共通アイコン用スプライト作成済み

まとめ

SVGアイコンは、比類のない柔軟性、パフォーマンス、スケーラビリティを提供するWebアプリケーションのモダンスタンダードです。このガイドに従って、プロフェッショナルなアイコンシステムを構築しましょう。

VectoSolveで既存アイコンをSVGに変換して、真のベクターグラフィックスの違いを体感してください。


SVGアイコン方式HTTPリクエストCSSスタイリングキャッシュ最適な用途
インラインSVG0完全(fill, stroke, アニメーション)なし(HTML内)インタラクティブ、アニメーション
SVGスプライト(<use>)1(スプライトファイル)制限あり(currentColor)あり(外部ファイル)大規模セット、静的サイト
React SVGコンポーネント0(バンドル内)完全(props + CSS)バンドルキャッシュReact/Next.jsアプリ
アイコンフォント(レガシー)1(フォントファイル)色のみありレガシープロジェクトのみ
外部<img> SVGアイコンごとに1なしありシンプルな静的表示

参考資料

Tags:
SVGアイコン
Webアプリ
Reactコンポーネント
SVG最適化
アクセシビリティ
SVGO
アイコンシステム
Share:

Try VectoSolve Now

Convert your images to high-quality SVG vectors with AI

AI-Powered Vectorization

Ready to vectorize your images?

Convert your PNG, JPG, and other images to high-quality, scalable SVG vectors in seconds.