SVGOはSVGに不要なホワイトスペースの削除に留まらない最適化を行ってくれるステキなソフトウェア。ちょっと前までなかなか挙動不審だったので、利用を避けていたんだけどv0.3.7では安定している感じなのでまた使い始めた。デフォルトでは入力ファイルを上書きしちゃうのでバックアップを取るように心がけたい。
SVGOは大体において本当に素晴らしい効果を発揮してくれる。Data URIを使ってCSSに埋め込む時のようにファイルサイズがダイレクトに響いてくるケースには積極的に利用すると良い。デフォルトではviewBox
属性消えちゃうとか「アレッ?」と思うところもあるけど、気になるなら残すように設定もできる。ドラッグ・アンド・ドロップでまとめてSVGOに通してくれるSVGO GUIとかもあるのでそんなに使い方は難しくない。
$ svgo -i test.svg -o - --datauri=base64
CLIで使う場合もこれでSTDOUTにBase64なData URIで吐けて便利。URLエンコードでも吐けるので、少しでもサイズを減らしたい人は--datauri=enc
にすると良い。
普通はGruntタスクでもちろん良いんだけど、Vimで以下のようなコマンドと関数を.vimrc
で定義すると、CSSとかに書いたSVGファイルへのパスにカーソルを載せて:SVGO
するとData URIに置き換わる。
command! SVGO :call <SID>OptimizeSVG()
function! s:OptimizeSVG()
let cfile = expand('<cfile>')
let datauri = system('svgo -i ' . cfile . ' -o - --datauri=base64')
let datauri = substitute(datauri, '\n$', '', '')
call setreg('d', substitute(getline('.'), cfile, datauri, ''))
normal! V"dp
endfunction
SVGOのSTDOUTに吐くオプションでは最後に\n
が付くようになってるので消してる。レジスター使っちゃうのは許してくれ。
ちょっと前まで挙動不審だった……というのは時々SVGをぶっ壊してくれたという話。現在の最新版であるv0.3.7では今のところ壊れたりしたことがないし、開発も活発なのでバックアップ取るの忘れないようにしとけばもう大丈夫だと思う。SVGO GUIの配布バイナリではまだ古いバージョンを使っているようで、以下のデモのようにSVGを壊すことがあるので注意が必要。
Demo: Old Version of SVGO Breaks SVG
SVGO GUIで使われてるNode-WebKit楽しそうだなー。