gulpを使用してレスポンシブ Eメール デザイン作成の効率をあげる
UI開発者 郡司私がレスポンシブ Eメール デザインを作り始めた頃、制作ワークフローの中に2つの重い作業が発生していました。
- CSSファイルからHTML要素に直接スタイルを指定するインライン化
- 変換後のHTMLファイルの送信
この作業を手作業で行うのは大きく時間を割きます。当時はまずツールでスタイルのインライン化を行い、今度はそのHTMLファイルを用いてメールを作成・送信をしていました。つまり、この作業はコピー&ペーストの繰り返しです。
HTMLメールは、たとえWebブラウザーで正常に表示されたとしても、いざ送信してみると必ずと言ってよいほど、レイアウトの崩れている閲覧環境(Webブラウザー/メーラー)があります。そのため、何度もコピー&ペーストしてはメールを送信していました。
そこで、タスクランナーを使用して上記の問題を解決する方法を探りました。探す基準としては、メディアクエリーの記述はstyle要素として記述されること、他のツールに依存せずにメールを送信できることです※。その基準のもと今回使用するnpmは以下になります。
※ 今回使用するタスクはデバック用になります。本番での使用は推奨していません。
ディレクトリ構成は以下になります。
sample/
├ css/style.css
├ src/*.html //インライン化する前のHTMLファイル格納先
├ dest/*.html //インライン化後に格納されるHTMLファイル
├ package.json
└ gulpfile.js
以下をインストールします。
npm install --save-dev gulp gulp-juice gulp-mail
gulpfile.js内の記述は以下になります。
'use strict';
var gulp = require('gulp');
var juice = require('gulp-juice');
var mail = require('gulp-mail');
// メール情報 ※ 適宜変更
var mailinfo = {
to: [
'test@gmail.com',
'test@yahoo.co.jp',
'test@outlook.jp'
],
from: '自身のメールアドレス',
smtp: {
auth: {
user: 'ユーザーID',
pass: 'パスワード'
},
host: 'メールホスト',
secureConnection: false,
port: ポート番号
}
};
// インライン化するタスク
gulp.task('inline', function () {
return gulp.src('./src/**/*.html')
.pipe(juice({
preserveMediaQueries: true,
webResources: {
relativeTo: './src',
images: false
}
}))
.pipe(gulp.dest('./dest'));
});
// メールを送るタスク
gulp.task('mail', function () {
return gulp.src('./dest/**/*.html')
.pipe(mail({
subject: '[TEST]' + new Date(),
to: mailinfo.to,
from: mailinfo.from,
smtp: mailinfo.smtp
}))
});
gulp inline、gulp mailと入力するだけで今まで手動だった作業が自動化され、すべての作業をエディタ内に完結することができました。
その他にも自動化を行うことで、作業が面倒だったためにインライン化されたHTMLファイルのみを修正し始め、元のHTMLファイル、CSSファイルと同期がとれなくなるようなことがなくなり、他の人への引継ぎが簡単になるメリットもあります。
この経験を経て私の中でレスポンシブ Eメール デザイン作成では、タスクランナーの使用は必須となりました。他にもレスポンシブ Eメール デザインのワークフローのなかでは自動化できる箇所がたくさんあると思います。しかし、今回紹介した作業が自動化されるだけでも作成のハードルは下がると考えます。