サイト速度を改善する(その2)
前回、サイト速度を改善する(その1)でgzipに圧縮することによるサイト速度の向上について紹介しました。今回は、そのgzip圧縮の作業を効率よく行う方法を紹介します。
Node.jsとgulpを使って圧縮の自動化を行います。ローカルのMac環境を例に圧縮の自動化を説明します。
Node.jsをインストールする
Node.jsの本家サイトからINSTALLをクリックすると環境に応じたファイルがダウンロードされますので、このファイルをインストールします。
gulpをインストール
ターミナルを立ち上げて次のコマンドを実行します。
$ npm install -g gulp
スーパーユーザーでインストールする場合
$ sudo npm install -g gulp
gulpファイルのjsファイルを設置したい場所を用意し、ターミナル上でその場所へ移動したのち次のコマンドを実行します。
$ npm install --save-dev gulp gulp-util
引き続きターミナルで使うモジュールを追加インストールします。watchはファイルの編集をチェックするのに使うモジュールです。gzipは名前の通り、gzipファイルを作成するのに使います。
$ npm install gulp-watch $ npm install gulp-gzip
gulpfile.jsを作成
gulpの実行環境にgulpfile.jsを作成します。
var gulp = require("gulp");
var gutil = require("gulp-util");
var gzip = require("gulp-gzip");
var target_js = "/Applications/AMPPS/www/h767676764/html/**/*.js";
var target_css = "/Applications/AMPPS/www/h767676764/html/**/*.css";
var output_js = "/Applications/AMPPS/www/h767676764/html/";
var output_css = "/Applications/AMPPS/www/h767676764/html/";
gulp.task("default", function(){
console.log("Run gulp.");
gulp.run("watch");
});
gulp.task("compress", function(){
gulp.src(target_js)
.pipe(gzip())
.pipe(gulp.dest(output_js));
gulp.src(target_css)
.pipe(gzip())
.pipe(gulp.dest(output_css));
});
gulp.task("watch", function() {
gulp.watch(target_js, function(event) {
if( event.type == "add" || event.type == "changed" ){
filegzip(event.path);
}
});
gulp.watch(target_css, function(event) {
if( event.type == "add" || event.type == "changed" ){
filegzip(event.path);
}
});
});
function filegzip(strfile){
var filename = strfile.split("/");
filename = filename[filename.length - 1];
gulp.src(strfile)
.pipe(gzip())
.pipe(gulp.dest(strfile.replace(filename, "")));
console.log("gzip "+strfile);
return true;
}冒頭の、target_js、target_css、output_js、output_cssは環境にあわせて変更してください。この例では「/Applications/AMPPS/www/h767676764/html/」内の全てのJSとCSSファイルを対象にしています。
下記のコマンドを実行しますと、gulp.task("compress", function(){の部分が実行され、「/Applications/AMPPS/www/h767676764/html/」内の全てのJSとCSSファイルがgzip圧縮されます
※必ずバックアップを取り、自己責任で行ってください。
$ gulp compress
ファイル単体の変更により、自動的にgzip圧縮を実行する場合は、ターミナルで次のコマンドを実行します。
待機状態になりますので、中断しターミナルの入力待ち状態へ復帰するにはControl+X、Control+Cです。
$ gulp
$ gulp watch でもいいですが、上記のコードはdefaultの場合にwatchを実行するように設定してありますので、gulpコマンドだけでチェック状態になります。
これで、サイト内のJS、CSSファイルをgzip圧縮し、作業した場合も自動的にgzip圧縮も更新されるようになりました。人によってはFTPアップロードするところまで自動化される方もいるかもしれませんが、今回の紹介はここまでにとどめておきます。