🍑

FigmaでSVGアイコンを軽量化させつつcurrentColorへ変換しながらエクスポートする

2024/12/17に公開

はじめに

FigmaからSVGアイコンをエクスポートするときのTipsです。
デフォルトのエクスポートでは軽量化もされず、currentColorにも変換されません。
数や頻度が多いとヒューマンエラーの温床になりますし、ほとんどプラグインにおまかせすると人生が楽になります。

前提

アイコンデータそのものの最適化が必要です。
最適化されている基準としては下記のような項目が挙げられます。

  • アウトライン化されている
  • 単色のアイコンなどで可変となる色(後のcurrentColor)が #000000 の塗りつぶしのみで構成されている
  • ひとつのオブジェクト(レイヤー)に統合されている

最適化については以下の記事が参考になるかもしれません。
https://note.com/n_m_y_y/n/n0d8ef5fce942

使用するFigmaプラグイン

SVG Exportを使います。

フロー

1. 書き出したいアイコンを用意する

例として下記から拝借しています。
Material Symbols & Icons - Google Fonts

このアイコンを書き出します。
''

2. レイヤー名を適した形式に変更する

デフォルトではface2というレイヤー名になっています。
Figmaのデフォルトと同様、今回使うプラグインではレイヤー名がそのままファイル名になります。
アイコンぽい名前にしておきたいので、icon-face2に変更します。

''

3. レイヤーを選択し、SVG Exportを起動する

SVG Exportのウインドウ内で選択したレイヤーが表示されます。

''

4. Edit presetsのボタンを選択する

''

5. 三点リーダ(・・・)のアイコンボタンを選択する

''

6. Import presetsを選択する

''

7. プリセットファイルを選択する

設定用JSONファイルを選択します。
下記は私がいつも使っているプリセットファイルです。
各々で設定することもできます。

presets-icon.json
{
  "preset-icon": {
    "name": "Icon",
    "settings": {
      "pretty": true,
      "multipass": true,
      "floatPrecision": 3,
      "layerNamesAsClasses": false,
      "useCurrentColorFill": false,
      "useCurrentColorStroke": false,
      "removeSvgElementFill": true,
      "removeFill": false,
      "removeFillOpacity": true,
      "removeOpacity": true,
      "removeStroke": false,
      "removeFillRule": false,
      "removeClipRule": true,
      "moveDefsToTop": true,
      "nonScalingStroke": false,
      "blackToCurrentColor": true,
      "removeXlink": true,
      "plugins": {
        "removeXMLNS": false,
        "cleanupAttrs": true,
        "cleanupIDs": true,
        "inlineStyles": true,
        "minifyStyles": true,
        "convertStyleToAttrs": true,
        "removeRasterImages": true,
        "removeUselessDefs": true,
        "cleanupNumericValues": true,
        "cleanupListOfValues": true,
        "convertColors": true,
        "removeUselessStrokeAndFill": true,
        "removeViewBox": true,
        "removeHiddenElems": true,
        "removeEmptyText": true,
        "convertShapeToPath": true,
        "moveElemsAttrsToGroup": false,
        "moveGroupAttrsToElems": true,
        "collapseGroups": true,
        "convertPathData": true,
        "convertEllipseToCircle": true,
        "removeEmptyContainers": true,
        "mergePaths": true,
        "reusePaths": false,
        "sortAttrs": true,
        "sortDefsChildren": true,
        "removeDimensions": true,
        "prefixIds": false
      }
    }
  }
}

8. 出力の設定を7のプリセット(Icon)に変更する

さきほどの一覧にもどり、Defaultとなっている箇所をIconに変更します。

''

黒かった線が白く表示されます。

''

行を選択すると、SVGの中身を確認できます。
#000000だった箇所がcurrentColorに変換されています。

''

9. アイコンをエクスポートする

Export SVGボタンからSVGのデータとして出力したり、コピーのアイコンボタンからはコードでコピーします。
基本的な操作は以上です。

複数のアイコンをまとめて設定、エクスポートする

たいていの場合アイコンはたくさんあるので、まとめて操作したいです。
同様にMaterial Symbols & Iconsから複数拝借しました。

''

1. 該当するオブジェクト(レイヤーを)選択する

フレーム内のパスを選択しても面倒なので、レイヤーでまとめて選択します。
Shiftを押しながら選択します。
SVG Exportで一覧になります。

''

2. Apply preset to allからIconを選択する

''

すべてのアイコンに設定が反映されます。

''

3. アイコンをエクスポートする

個々でファイルをエクスポートするなりコピーするなりします。
たくさんある場合はExport allでZIPにまとめてもよいかもしれないです。

まとめ

プリセットファイルはFigmaファイルごとにインポートする必要がありますが、クオリティを保ちながら楽ができるのでおすすめです。
今回のサンプルでは30%程度の軽量化ができました。やったぜ。

株式会社ソニックムーブ

Discussion