[Middleman 3] middleman-imageoptim で画像を最適化する

公式で一行触れられているだけの画像圧縮について。
利用しようと思ったら、いろいろ追加が必要でした。

> * [Middleman: ファイルサイズ最適化](http://middlemanapp.com/jp/advanced/file-size-optimization/#stq=&stp=0)
>
> ビルド時に画像も圧縮したい場合, middleman-imageoptim を試してみましょう。

“`prettyprinted
% middleman version
Middleman 3.3.6
“`

## インストール

### Gemfile

> [plasticine/middleman-imageoptim](https://github.com/plasticine/middleman-imageoptim)

Gemfile に追加します。

“`ruby:Gemfile
gem ‘middleman’, ‘~> 3.3.6’
# Images compress plugin
gem ‘middleman-imageoptim’, ‘~> 0.1.4′
“`

Bundle インストールします。

“`prettyprinted
% bundle install –path vendor/bundle
“`

### image_optim

middleman-imageoptim は、image_optim という gem を利用しています。
これをインストールすると shell や ruby からも画像最適化が行えるようになるよう。

> [toy/image_optim](https://github.com/toy/image_optim)

必要なバイナリーを homebrew でインストールします。

“`prettyprinted
% brew install advancecomp gifsicle jhead jpegoptim jpeg optipng pngcrush pngquant
“`

pngout に関しては後述します。

### config.rb

config.rb の build あたりに `activate :imageoptim` を追加します。
但し、その状態では pngout がないと言われ、処理が止まってしまいます。

“`prettyprinted
/Users/****/projects/middleman-h5bp/vendor/bundle/ruby/2.1.0/gems/image_optim-0.9.1/lib/image_optim.rb:187:in `resolve_bin!’: `pngout` not found (ImageOptim::BinNotFoundError)
“`

option で false し、利用しないように設定を加えます。

> [ImageOptim::BinNotFoundError when pngout is not installed. · Issue #1 · plasticine/middleman-imageoptim](https://github.com/plasticine/middleman-imageoptim/issues/1)

“`ruby:config.rb
# Build-specific configuration
configure :build do
activate :imageoptim do |options|
options.pngout_options = false
end
“`

## つかいかた

上記の設定を利用すると、`middleman build` でコンパイル時に画像の最適化が行われます。

“`prettyprinted
% bundle exec middleman build
“`

/source の画像ファイルはオリジナルが残り、/build に最適化された画像が生成されました。

## 補遺

* [image_optimを使ってMiddlemanのBuild時に画像を圧縮しよう – Qiita](http://qiita.com/katapad/items/a68b693381bd2a368bc6)