nanocのautocompileが遅いのでguard-nanocを使ってみる

このブログで使っている nanoc にはautocompileというコマンドがあるのですが、どうにも遅いので guard-nanoc を使ってみることにしました。

経緯

nanocはYAMLなどのデータとテンプレートを組み合わせてHTMLを生成するツールで、このブログもnanocを使って構築しています。

nanocには

  • ページの生成を行うcompile
  • ローカルでウェブサーバを立ち上げるview
  • ウェブサーバを立ち上げつつ、リクエストされたページを再生成するautocompile

といったコマンドがあります。

autocompileを実行しておけば「HTMLテンプレートを修正してブラウザをリロードすれば表示確認ができる」ので便利なのですが、このサイトではページの依存関係が複雑なせいか、再生成にだいぶ時間がかかるようになってしまいました。かといって「ウェブサーバはviewで起動しておいて、テンプレートを修正するたびにcompileを実行」というのは面倒です。

そこでファイルの更新監視ツールである Guard と、nanoc用拡張の guard-nanoc を使ってみることにしました。

インストール

インストールはREADMEのとおりで済みました。私の環境はOSXなのでrb-fseventも入れています。

$ gem install guard
$ gem install rb-fsevent
$ gem install guard-nanoc

Guardfileの作成

gemをインストールしたらinitサブコマンドでGuardfileという設定を記述します。これはguard-nanocのREADMEにある内容だと警告が出るので、watchの引数を正規表現に修正しました。

$ cd /path/to/nanoc_site
$ guard init nanoc

Guardfileの内容

guard 'nanoc' do
  watch(/^config.yaml/)
  watch(/^Rules/)
  watch(/^layouts\//)
  watch(/^content\//)
end

監視と自動コンパイル

設定は以上なので、startサブコマンドを実行してguardを起動します。監視対象になっているcontent以下のファイルなどを更新すると、compileが実行されてページが再生成されます。autocompileよりも「待たされる感」がないので快適です。

$ guard start

Growlによる通知

Growl によるポップアップ表示にも対応しています。

growl gemgrowlnotify がインストールされていればデフォルトで表示されます。表示したくない場合はguardの起動時に “--notify false” と指定するか、環境変数GUARD_NOTIFYにfalseを設定しておけばよいです。

関連エントリ

blog comments powered by Disqus