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