経緯
フロントを構築するときに面倒くさいSassやCoffeeScriptのコンパイルやらなんやらを自動化できるツールのGrunt。
Gruntのすばらしさはこれだけにとどまらず、もっt様々なことを自動化することができます。
たとえば、地味に面倒くさいCSS変更後のブラウザの更新。デュアルディスプレイにして、片方の画面でブラウザを見ながら、もう一つでコーディングなんていうことをしていると、わざわざ、ブラウザにフォーカスしてCommand+R
という感じ。
Gruntはこの作業も自動化できるので、その方法の紹介。
必要なパッケージのインストール
Gruntはインストールされているものとして進めます。Gruntのインストールや基本的な使い方に関しての詳細はこちらの記事を参考あれ。
grunt-contrib-watch
というタスクを使います。
通常、Gruntでは、grunt
コマンドを叩くことでGruntfile.js
に記述されたタスクを実行するのですが、このgrunt-contrib-watch
を使えば、ファイルの変更を監視して、ファイルが変更されると、自動的にタスクが実行されます。
インストールするためには以下のコマンドをターミナルで叩きます。1
npm install grunt-contrib-watch --save-dev
Gruntfile.jsの記述
たとえば、test.scss
が更新されたときに、test.css
としてコンパイルし、ブラウザを更新する場合は以下のように追記します。2
module.exports = function(grunt){ grunt.initConfig({ sass: { dist: { options: { style: 'compressed' }, files: { 'test.css': 'test.scss' } } }, watch: { sass: { options: { // ファイルが変更されたことをブラウザに知らせる livereload: true }, tasks: 'sass', files: 'css/scss/**/*.scss' } } }); grunt.loadNpmTasks('grunt-contrib-sass'); grunt.loadNpmTasks('grunt-contrib-watch'); grunt.registerTask('default', ['watch']); };
ブラウザにアドオンをインストールする
ファイルが変更されたとき、grunt-contrib-watch
からファイル変更のお知らせが来て、それを受けてブラウザをリロードします。3
そのために、次のアドオンを入れてやりましょう。自分はGoogleChromeがメインブラウザなので、次のアドオンを使っています。FireFoxなどにも同様のアドオンが存在します。
LiveReload – Google Chromeアドオン 4
動かしてみる
ここまで準備できたらOKです。
あとはGruntfile.js
が存在しているディレクトリでgrunt
コマンドを叩きましょう。すると、コマンドが終了せずに監視モードに入っていることがわかります。
Running "watch" task Waiting...
次に、ブラウザでページを開き、アドオンのボタンを押します。
最後にwatch
しているファイルを更新してみましょう。自動的にブラウザが更新されているはずです。もし、うまくいかなかったら、ターミナルに何らかのエラーが出ていると思うので、確認して修正しましょう。
まとめ
以前はgrunt-contrib-livereload
を別途インストールして、livereload.js
のスクリプトタグを埋め込むということをしていたのですが、grunt-contrib-watch
に統合されたことで、より楽に自動更新ができるようになっています。デュアルディスプレイで作業している人にとっては、この設定をすることでおそらく1.5倍くらい実装スピードがあがるのではないでしょうか?
-
--save-dev
を忘れないようにしましょう。これを書くことで、自動的にpackage.json
が更新されます。package.json
は必要なJSなどをリストとして管理しています。これによって、package.jsonさえあれば、npm install
とするだけで、必要なファイルを全てダウンロードできます。 ↩ -
このタスクを実行するためにはあらかじめ、
npm install grunt-contrib-sass --save-dev
を実行しておきましょう。 ↩ - 正確にはlocalhostのポート35729にリクエストを投げています。裏でnodejsが動いていて、そのリクエストを受けて、nodejsのサーバがブラウザに対して、ファイルが変更されたことを知らせます。 ↩
-
アドオンではHTMLに
livereload.js
を埋め込んでいます。これがnodejsと通信するライブラリです。 ↩
コメントを残す