gulp.jsで広告タグの開発環境を整える

     - プログラム言語 , ,  


SEOの観点から、サイト表示速度の高速化のためJavaScriptファイルから不用な空白や改行、
コメントを除去したりやローカル変数名を短縮するminifyが奨励されていますが、
これはタスクランナーのgulp.jsとプラグインを使って自動化する事が可能です。

※gulpの基本的な使い方については下記などを参照下さい。
はじめてのgulp

さて、広告タグやトラッキングタグなど外部サイトに配布するタグの開発をしていると、
開発環境/商用環境で定数を出し分けたい場合が多々あります。
APIのendpointを分けたい…といったような状況です。

minify自体は難読化ツールuglify.jsのgulpプラグインで可能ですが、
単純に圧縮してしまうと環境別のコンパイルが出来ません。
下記の様にコマンドラインで環境を指定して条件付けが出来ると、
Jenkinsと連携して環境別にジョブを登録する場合などに便利かなと思い、やってみました。

[code lang=”bash”]
gulp compress –ENV production
[/code]

のような形式で環境に合わせたコンパイルが出来るようになります。

必要なnpmモジュール

  • gulp //タスクランナー
  • gulp-uglify //難読化ツールuglify.jsのgulpプラグイン
  • gulp-rename(任意) //gulpでファイルをリネームするプラグイン
  • minimist //コマンドライン引数のparser

コード

JSON形式のコンフィグを用意します。

config.json

[code lang=”js”]
{
"development" : {
"host" : "dev.example.com"
},

"production" : {
"host" : "prod.example.com"
}
}
[/code]

source.js

[code lang=”js”]

//圧縮したいファイル。このhostをコンパイル時に環境に応じて書き換えたいとする
var host = __HOST__;

[/code]

gulpfile.js

[code lang=”js”]
‘use strict’
var gulp = require(‘gulp’),
uglify = require(‘gulp-uglify’),
rename = require(‘gulp-rename’),
minimist = require(‘minimist’),
config = require(‘./config.json’);

// minimistでコマンドライン引数をパース
var args = minimist(process.argv.slice(2)),
// 変数envに、CLI引数のENVに応じたconfig.jsonのオブジェクトを格納
env = config[args.ENV];

// uglifyの引数に取るオブジェクト。compress.global_defsのプロパティに
// { 圧縮前ファイルの定数名 : 圧縮後のリテラル } を指定。
var compileCondition = {
compress: {
global_defs: {
//ここでは、__HOST__をconfig.jsonのhostで書き換えます。
__HOST__: env.host
}
}
};

function compress(condition) {
gulp.src(‘./source.js’)
.pipe(uglify(condition))
.pipe(rename(‘source.min.js’))
.pipe(gulp.dest(‘./’));
}

gulp.task(‘compress’, function() {
compress(compileCondition);
});

// とりあえずdefaultも定義
gulp.task(‘default’, [‘compress’]);
[/code]

下記のGulp.jsあるあるレシピを参考にしました。わかりやすかったのでオススメです!
GitHub / gulp Recipes


DACエンジニア採用情報

  関連記事

no image
【未経験からのRuby on Rails – 第1回】楽しく書けるプログラミング言語 “Ruby” とは

こんにちは、はじめまして。新卒1年目のmatsuari(女子)です。 この度、Rubyの勉強を始めることになりまして、 まずはたくさんあるプログラミング言語の中で、なぜ自分がRubyを学ぶのか? しっかりと把握した上で学習に取り組んでいきたいと考え、『Rubyとは何か?』調べました。 超基礎的なこと …

iOS端末情報をTreasureDataに送るアプリをswiftで作ってみた。

はじめまして、2年目のOyamanです。 通常業務とは別のことになりますが、Swiftに触れる機会が少しあったので、スマホ関連の記事を書かせていただきます。 はじめに SwiftとTreasureDataのSDKを使って、 iOSの端末情報をTreasureDataへ送るアプリを作ってみます。 今回 …

Android 非同期処理についてまとめてみた

Androidには、UIに影響を与えないよういくつか非同期処理が用意されています。 今回は非同期処理の代表的な ・Service ・IntentService ・HandlerThread について違いを踏まえながらまとめます! 非同期処理について(http://codezine.jp/articl …

no image
Angular.jsのvalueとfactoryの違いを考える

次のようなHTMLがあったとする。 [code language=”html”] <!doctype html> <html lang="jp" ng-app="App"> <head> <me …

プログラミング初心者がswiftでゲームアプリ的なものを作ってみた。

こんにちは、DAC2年目のkumataです。 普段は素敵な先輩方に囲まれてインフラ周りのお仕事をさせて頂いていますが、 今回は業務とは全く関係ないプログラミングをやってみました。 全く初心者なのですが、swift+Xcodeで簡単にスマホゲーム的なものが作れました。 初心者の目線から作成方法をつらつ …

no image
Polymer on Rails

Web Componentsをご存知だろうか。これが普及すればWebの開発は画期的に変わるだろう。 説明すると長くなるので、LIGさんのにその辺はお任せして。(この記事読んでください。) 簡単に言えば、下記にあるような新たに提案されたブラウザ向けAPIの総称。 Custom Elements, 説明 …

【未経験からのRuby on Rails – 第2回】Rubyのプログラムを書いてみる(Mac)

こんにちは。新卒1年目のmatsuariです。 前回はRubyとは何か、簡単にご紹介をしましたが、 今回は実際にRubyファイルを作成して、プログラムを書いてみるところまでご紹介していけたらと思います。 Mac環境のプログラミング初心者向けです。 はじめに、Rubyのプログラムを書くためのファイルを …

no image
Polymer core-ajax の使い方

Polymerのcore-ajaxの使い方。 まずは、index.html [code language=”html” title=”index.html”] <!doctype html> <html> <head&gt …

読み方がわからない技術用語 2015

英語圏での読み方を基本的には参考にしています。英語圏でも複数の読み方をしているケースもあるようなので、あくまでも参考程度。2015と書きながら、古い言葉も混じってますが。 async – えーしんく Alt – おると ASUS – えいすーす bower &#8 …

【未経験からのRuby on Rails – 第4回】Railsアプリケーション開発をしよう! 〜開発の準備編〜

こんにちは。新卒のmatsuariです。 Rubyについてまだまだ知るべきことはたくさんありますが、とにかく早くアプリを作りたい! ということで、今回はアプリ開発の準備に取り掛かっていきます。 Rubyはアプリを作成しながら、同時に学んでいきたいと思います。 Railsアプリケーション開発の準備《 …