Pitaliumで画面遷移してからスクリーンショットを撮影する
PitaliumはSeleniumをベースにしていますので、クリックイベントを使って画面遷移をしたり、フォームにデータをポストすることができます。
通常の画面遷移であれば次のように処理を書きます。
クリックされるDOM(#news a.btn)を取得し、そのクリックイベントを実行します。
フォームへのポストの場合、次のように記述します。
これはAjaxでも同じように行うことができます。
Seleniumの知識があれば、テストは自由に何度も繰り返しできるようになります。ぜひやり方を覚えてPitaliumと合わせて使ってみてください。
画面のテスト(リグレッションテスト)を行う上で、画面上の特定の部分についてテストを行いたかったり、逆にテストから省きたいと思うことがあるでしょう。そんな時のためのテクニックを紹介します。
特定のDOMだけターゲットにする
特定のDOMをターゲットとする場合はCompareTargetを使います。下記はその一例で、 #about をターゲットとした場合のコードです。
public void testCompareTarget_ID() throws Exception {
// 1. hifiveサイトのトップページを開きます。
driver.get(“https://www.htmlhifive.com/”);// 2. ID: aboutの比較対象をScreenshotArgumentBuilderで作成します。
ScreenshotArgument arg = ScreenshotArgument.builder(“TopPageAbout”)
.addNewTarget(SelectorType.ID, “about”)
.build();
// 3. 検証を実行します。
assertionView.assertView(arg);
}
SelectorType.IDとなっていますが、これはSelenium APIのByと同じ指定ができます。そのためCLASS_NAMEやCSS_SELECTOR、TAG_NAME、XPATHなども利用できます。
このテストを実行すると、下のような画像が生成され、Webページの一部のDOMだけをターゲットとした比較ができます。

特定のDOMを除外してテストする
逆にDOMを除外する場合としては、タイミングによって違う文字を出すものであったり(カウンターなど)、スクロール時に表示されるBack to Topなどが考えられます。
コードは次のようになります。excludesとしてDOMの場所を指定し、それをCompareTargetで指定しています。
画面周りの動きは複雑で、カルーセルのような動きやAjaxによる操作など多数存在します。Pitaliumを使って柔軟なテストケースを作成してください。
業務システムの画面やWebサービスの管理画面にBootstrapを採用するケースが増えていますが、それでもBootstrapならではの書き方を覚えないといけません。バージョンが上がるごとに書き方が変わるので習得が面倒と感じる人も多いでしょう。
そこで使ってみたいのがBootstrap用のUIビルダーです。ドラッグ&ドロップで画面が設計できれば作成も簡単ですよね。
lollytin beta 1.4 – A yummy HTML5 blockouterer!

Bootstrapのデザインをドラッグ&ドロップで作っていくのですが、見た目はデフォルメされています。その分、細かいところにこだわりすぎずにさくさくと作っていくことができます。
Pingendo – web authoring with comfort

PingendoはBootstrap専用のオーサリングソフトウェアです。Mac OSX/Windows/Linux用が用意されています。細かいプロパティ含めてカスタマイズできます。
Jetstrap – The Bootstrap Interface Builder

部品をドラッグ&ドロップしつつ、テキストなども編集できます。プロパティを変更してIDやクラスを追加したり、サイズを変更することもできます。
BootTheme : Web Designer and Theme Generator for Twitter Bootstrap

細かなプロパティは編集できませんが、プレビュー画面でスマートフォン、タブレット、デスクトップのそれぞれの表示状態を確認できます。部品はすべてドラッグ&ドロップで変更できます。
LayoutIt! – Interface Builder for Bootstrap

色などが変えられる訳ではありませんが、メニューバーをウィンドウ上部に張り付かせるような設定も簡単にできます。BootstrapのTipsが手軽に実現できるツールになっています。
Bootstrap Editor and Playground for JavaScript, CSS, HTML5 and jQuery.

機能が多い分、若干画面がごちゃっとした印象を受けそうです。テンプレートがあらかじめ数多く用意されており、そこから選択した後はHTMLやCSSを直に修正しながらリアルタイムに反映された内容を確認します。
Bootstrap Builder – Brix.io – Premium Interface Builder.

右側に表示されているコンポーネントをドラッグ&ドロップで配置して画面を作っていきます。画像の差し替えもできるので、より本格的な画面を作成できます。
Pinegrow Web Editor | Website Builder for Professionals

Mac OSX/Windows/Linux用のソフトウェアで、Bootstrapをサポートしたオーサリングツールと言った感があります。他にもFoundation、AngularJS、WordPressに対応しています。
基本的にUIはドラッグ&ドロップでできますが、細かなプロパティを編集できるかどうかや、そのままサイトとして使えるレベルまで仕上がるかはサービスによって異なるようです。また、ローカルアプリケーションならば一度ダウンロードしてしまえば今後のサービス運営に不安はないでしょう(この手のサービスは突然閉鎖してしまうことも多いようです)。
Bootstrapを活用していくためにもこの手のサービスはぜひ知っておきたいですね。
Pitaliumを使えば複数のブラウザで一気にスクリーンショットを使ったテストが実行できます。
例えばMac OSXのChrome/Safari/Firefoxでテストを行いたい場合、次のように src/main/resources/capabilities.json に定義します。
[
{
"platform": "MAC",
"os": "OS X",
"browserName": "safari"
},
{
"platform": "MAC",
"os": "OS X",
"browserName": "firefox"
},
{
"platform": "MAC",
"os": "OS X",
"browserName": "chrome"
}
]
なお、Chromeの操作を行う場合はchromedriver、Safariの場合はSafari用のWebDriverが必要になります。Firefoxは必要ありません。
このように定義すれば、後はテストを実行するだけで3つのブラウザでそれぞれテストを実行してくれます。なお、後からブラウザを追加する場合、RUN_TESTでは正とする画像がないために処理が失敗することがあります。その場合は一旦テストを SET_EXPECTED にて実行し、正とする画像を取得してください。

PitaliumではSelenium Gridを使っていますので、Hubになるサーバにクライアントが接続しています。そのためIEやAndroid、iOSなども接続してテストが可能です。
フロントエンドのタスクランナーが脚光を浴びています。 おもなツールの特徴と、簡単に使い方をまとめてみました。
| ファイル監視 | ファイル監視 | プロジェクト テンプレート |
local server | |
|---|---|---|---|---|
| Grunt | ○ | ○ | × | ○ |
| Gulp | ○ | ○ | × | ○ |
| Mimosa | ○ | ○ | ○ | ○ |
| Brunch | ○ | ○ | ○ | ○ |
| Angus | ○ | ○ | ○ | ○ |
| Lineman.js | ○ | ○ | ○ | ○ |
| Middleman | ○ | ○ | ○ | ○ |
JavaScriptタスクランナーを広めた Grunt

GruntはRuby製のGuardに影響を受けて、後のタスクランナーに影響を与えました。
grantの設定ファイルは、初期化部分と実行タスクに別れ、それが故にコードが大きくなると可読性&メンテナンス性が悪くなると言う弊害があります。しかし、タスクの責任範囲が明確になっているので、大きなプロジェクトでは各担当の管理部分がわかりやすいというメリットがあります。
1. グローバルにgruntのCLIパッケージをインストールします。
$ npm install -g grunt-cli
2. プロジェクトのディレクトリに移動し、npmコマンドでpackage.jsonを生成します。
$ npm init
2. gruntのパッケージをインストールします。
$ npm install grunt-contrib -save-dev
3. gruntの設定ファイルを「Gruntfile.js」として作成します。
module.exports = function(grunt) {
//Gruntの設定
grunt.initConfig({
pkg: grunt.file.readJSON('package.json')
});
// A very basic default task.
grunt.registerTask('default', 'Log some stuff.', function() {
grunt.log.write('Logging some stuff...').ok();
});
};
4. gruntを実行します。
$ grunt
もはやデファクト Gulp.js

gulp.jsは、並列タスク処理が可能(もちろん、順次タスク処理も可能)でパワフルなタスクランナーです。 学習コストも低いとありますが、多くのプロジェクトでは、並列タスクと順次タスクを組み合わせることが殆どだと思いますので、その際のタスクファイルを作成するには多少の学習コストがかかると思います。とはいえ、プラグインや設定ファイルのテンプレート開発も活発であり、その組み合わせは多彩でポテンシャルの高さを感じさせる素晴らしいタスクランナーです。
1. グローバルにgulpをインストールします。
$ npm install --global gulp
2. プロジェクトディレクトリに移動して、gulpをインストールします。
$ npm install --save-dev gulp
3. gulpのスクリプトを「gulpfile.js」として作成します。
var gulp = require('gulp');
gulp.task('default', function() {
// デフォルトタスクを配置
});
4. gulpを実行します
$ gulp
設定より規約主義の Mimosa

Mimosaはディレクトリ名などを明示的な規約として、基本的な設定ファイルを記述することなく、タスクを実行する事に主眼を置いたタスクランナーです。 これにより、複雑になりがちな設定ファイルを作成すること無く、開発に集中することが出来るメリットがあります。 また、MimosaはCLIのプロンプトによる選択操作で、簡単にスタートアップビルドを生成することが可能です。
まずは、その生成コードを確認することで、概ねの構造も確認出来ると思います。ほとんど学習コストが必要がありませんが、拡張機能なども用意されており、ドキュメントもしっかり構成されていますので大変期待の持てるタスクランナーではないかと思います。
mimosa インストール&セットアップ
1. グローバルにmimosaをインストールします。
$ npm install -g mimosa
2. 新規アプリケーションを作成します。
$ mimosa new nameOfApplicationHere
ここでは、割愛しますが、このあと、JavaScript、CSSなどの確認を行うコマンドプロンプトの選択が始まります。
3. buildします
$ mimosa build
4. サーバを開始します。
$ mimosa watch --server
同時に、コード監視もスタートします。
Brunch

BrunchはGruntとほぼ同時期に開発がスタートした、パイプライン型のタスクランナーです。 差分による再構築のため、速度的に優れているのが最大の特徴でしょう。 また、規約型のタスクランナーでもあるので、初期導入コストは非常に低いと思います。
もう一点、特徴的なのは、スタートアップ時のSkeltonが用意されている事でしょう。 こちらのSkeltonサイトを見ると、主要な技術はカバーしているようです。
1.グローバルにbrunchをインストールします。
$ npm install -g brunch
2.Skeltonから、新規アプリケーションを作成します。
ここでは、Skeltonから、brunch-with-brunchを選択しました。
$ brunch new gh:monokrome/brunch-with-brunch brunch-test
3.サーバを開始します。
$ cd brunch-test
$ brunch watch --server
これで、サーバが立ち上がります。以下がデフォルトのアクセスURLです。
http://localhost:3333
Brunchもライブリロード機能が存在しますので、編集が行われるとサイトに即時反映されます。
Angus

Angusは規約に沿って設定ファイルを作成することで、開発の負担を減らすのと同時に設定ファイルの複雑さを押さえることで、メンテナンス性が良くなっています。 解説のスライドもあります。
1.グローバルにangusをインストールします。
$ npm install -g angus
2.新規アプリケーションを作成します。
$ angus create my-app
3.サーバを開始します。
$ angus dev
これで、サーバが立ち上がります。以下がデフォルトのアクセスURLです。
http://localhost:9000
ライブリロード機能もありますので、編集が掛かるとサイトが即時反映されます。また、angus prodのコマンドで、Minifyやファイル関連の本番化が行えます。
Gruntなどタスクランナーをラップした Lineman.js

LinemanはGrunt、ExpressやTestemなどを薄くラップしたツールとなっています。 デフォルトでプロジェクトのひな形を構築してから、サーバ起動やテストまでを行えます。 タスクランナーとしてGruntを軸に規約ベースで連携しますので、Gruntを利用していた方は非常に使い勝手がよいのではないでしょうか。
1. グローバルにlinemanをインストールします。
$ npm install -g lineman
2. 新規アプリケーションを作成します。
$ lineman new your-project
これで、各ディレクトリや最低限必要なファイルが作成されます。
3. buildします
$ lineman build
4. サーバを開始します。
$ lineman run
これで、サーバが立ち上がります。以下がアクセスURLです。
http://localhost:8000
静的サイトジェネレータ Middleman

Ruby製のタスクランナーです。利用には、ruby gemが必要になります。
こちらも初期開発からテスト、デプロイまでをカバーしています。
Rubyによる拡張も可能で、Rubyプロジェクトには相性が良さそうです。
1. middlemanをインストールします。
$ gem install middleman
2. 新規アプリケーションを作成します。
$ middleman init my_new_project
Web開発向けのスケルトンが作成されます。
3. buildします
$ lineman build
4. サーバを開始します。
$ bundle exec middleman server
これで、サーバが立ち上がります。以下がアクセスURLです。
http://localhost:4567/
5. ライブリロード機能
config.rb を開いて次の行を追加すると、ライブリロード機能が利用出来ます。
activate :livereload
これにより、サーバが自動的にリロードされます。
まとめ
如何でしたでしょうか?今後も、WEBフロントエンド開発においては、さらに効率を求めたタスクランナーが出現するかもしれません。
ただ、一過性の流行廃りで選択するのではなく、開発現場において最適なツールを見極めてください。そんなツール選定で参考にしてみてください。
画面のデザインが修正されたり、文言が変更されるとPitaliumのテストが失敗します。

この後のフローですが、まずPitalium Explorerを使って差分をチェックします。

この差分をチェックして、問題があればシステムを修正します。問題がなければ、新しい画面を正しい表示として確定する作業が必要です。
src/main/resources/environmentConfig.json を開いて、execModeをSET_EXPECTEDに変更します。

そしてエラーが発生したテストだけを再実行します。

これでテスト時における期待値のデータが更新され、次回以降テストが成功するようになります。
デザインは度々修正されるのでシステム上の問題はなくともPitaliumのテストが失敗するのは多々あるかと思います。そんな時にはこの手順を踏んでスクリーンショットを更新してください。
Pitaliumはスクリーンショットを画像として保存しています。それをエクスプローラーやFinder上で確認するのですが、実際テストでどこが引っかかったなどはよく見ないと分かりづらいケースもあったでしょう。
そこで今回作成したPitalium Explorerを紹介します。Pitalium Explorerを使えばWebブラウザ上でテスト結果の確認、比較が簡単にできるようになります。
09.Pitalium Explorerを使用してテスト結果を確認する – hifive
Pitalium ExplorerはPitaliumに同梱されており、pitalium-explorer.warというファイルになります。これをTomcatのwebappsフォルダの中に入れます。そして、解凍されたら WEB-INF/classes/persisterConfig.json を編集します。
$ cat /usr/local/Cellar/tomcat/8.0.26/libexec/webapps/pitalium-explorer/WEB-INF/classes/persisterConfig.json
{
"file": {
"resultDirectory": "/path_to_/pitalium-sample/results"
}
}
この resultDirectory の値をPitaliumのテスト結果が入っているresultsフォルダのパスに設定します。Tomcatは一度再起動します。
これで準備は完了です。
Pitalium Explorerにアクセスする
ローカルに立てた場合、 http:localhost:8080/pitalium-explorer/list.html にアクセスします。

そしてテスト結果を選んでクリックします。そうするとテストクラスとテストメソッドが一覧表示されます。

詳細を確認します。左側のツリーでテストを切り替えられます。

別なテストを選んで差分の確認もできます。

ずれている場合、こんな感じで差分が確認できます。他にも比較のモードが幾つか用意されています。

異なるDOMが赤枠で表示されています。

Pitalium Explorerの詳しい使い方はこちらをご覧ください。差分がビジュアル的に確認できるようになったことで、テストがより進めやすくなったかと思います。ぜひお使いください!
IoT機器とHTML5を融合させればWebブラウザの画面上からIoTデバイスを操作したり、IoTからあがってくる数値をリアルタイムにレンダリングしたりすることができます。HTML5の新しい可能性が見えてくる気がしないでしょうか。
IoT機器が使うプロトコルとして注目されているのがMQTTです。最小ヘッダサイズが2byteという小ささでネットワーク帯域を浪費しないこと、相互通信が可能な仕組みがあることからIoT分野において知っておきたいプロトコルです。
そんなMQTTなのですが、PubSub型であることやTCP上に流れるとあって、WebSocketに似たような仕組みとなっています。そこで作られているのがMQTT over WebSocketで、MQTTとWebSocketを相互通信できる仕組みになります。
今回はMQTT over WebSocketに対応したMowsを使って手軽にMQTTとWebSocketを体験してみたいと思います。
Mowsのインストール
まず前提条件としてnode.jsを使うこととします。適当なフォルダを作成して、そこをプロジェクトフォルダとします。
$ mkdir mows-test
$ cd mows-test
$ npm init
初期化が終わったらMowsをインストールします。
$ npm install mows --save
サーバの立ち上げ
インストールしたら、mowsのフォルダにいきます。
$ cd node_modules/mosca/examples/ws/
そしてWebサーバを立ち上げます。
$ ./start.sh
$ ./start.sh
+++.+++: ,+++ +++; '+++ +++.
++.+++.++ ++.++ ++,'+ `+',++ ++,++
+` +, +: .+ .+ +; +; '+ '+ +` +`
+` +. +: ,+ `+ ++ +; '+ ;+ + +.
+` +. +: ,+ `+ +' '+ + +.
+` +. +: ,+ `+ :+. '+ +++++.
+` +. +: ,+ `+ ++ '+ +++++.
+` +. +: ,+ `+ ++ '+ + +.
+` +. +: ,+ `+ +: +: '+ ;+ + +.
+` +. +: .+ .+ +; +; '+ '+ + +.
+` +. +: ++;++ ++'++ ++'+' + +.
+` +. +: +++ +++. ,++' + +.
[2015-09-25T08:32:51.703Z] INFO: mosca/17687 on MacBook-Pro.local: server started (mqtt=1883, http=3000)
これで準備は完了です。ログを見て分かる通り、HTTPサーバが3000番、MQTTサーバが1883番で立ち上がっています。
Webブラウザで開いてみる
まず一つ目のブラウザで http://localhost:3000/ を開いてみます。この時点でWebSocketを通してMQTTサーバに接続しています。表示するとアラートが出るはずです。

コード(index.html)を見てみると次のようになっています。
var client = mqtt.connect();
client.subscribe("mqtt/demo");
client.on("message", function(topic, payload) {
alert([topic, payload].join(": "));
});
client.publish("mqtt/demo", "hello world!");
var client = mqtt.connect(); はMQTTサーバへの接続処理になります。次の client.subscribe("mqtt/demo"); で購読するトピック"mqtt/demo"を指定してます。これ以外のトピックでメッセージがきても処理は行われません。
そして指定したトピックでメッセージが来た時の処理が次の行になります。
client.on("message", function(topic, payload) {
alert([topic, payload].join(": "));
});
逆にメッセージの送信は client.publish("mqtt/demo", "hello world!"); にて行います。
複数のタブでブラウザを開くと、すべてのタブ宛にメッセージが届くはずです。
コンソールからメッセージを送ってみる
ここまでではWebSocketと同じですので、次はCLIからメッセージを送ってみます。その際にはmqttをインストールします。
$ npm install mqtt -g
そしてmqttコマンドを使ってメッセージを送信します。
$ mqtt pub -t 'mqtt/demo' -h 'localhost' -m 'from MQTT.js'
これもブラウザに受信されます。

逆に購読側になった場合、ブラウザからメッセージを送ればコンソールにメッセージが流れます。
$ mqtt sub -t 'mqtt/demo' -h 'localhost'
hello world!
まとめ
MQTT over WebSocketを使うことでWebブラウザでもMQTTを使って双方向性のあるデータのやりとりが可能になります。後はMQTTが使えるプログラミング言語を使って開発を行えば二つのシステムを連携するのも簡単です。
HTML5でIoTをぜひ試してみてください。
Webサイトの表示に時間がかかる場合は幾つかの原因が考えられます。最も大きなところとしては
- ネットワーク
- HTMLレンダリング
でしょう。各ブラウザでは次のようにチェックします。
Google Chromeの場合
NetworkとTimelineタブを使ってチェックできます。各リソースごとにネットワークにかかった時間が確認できます。TimelineではJavaScriptの処理時間などが計測可能です。

Firefox Developer Editionの場合
ネットワークおよびパフォーマンスタブを使って測定できます。ネットワークタブではリソースごとの待ち時間、転送時間が分かります。

パフォーマンスタブではDOMイベント、CSSの計算、レンダリングなどを細かく計測できます。

Safariの場合
ネットワークタブとタイムラインタブを使ってチェックできます。JavaScriptの実行されている箇所や、レイアウト/レンダリングのタイミングを確認することでデバッグ可能です。

タイムラインはズームイン/アウトができます。

IEの場合
ネットワーク、UIの応答タブを使って確認できます。ネットワークタブではリソースごとの読み込み、実行時間が確認できます。URLごとに表示されるのでファイル名が長く、若干区別が難しいです。

UIの応答では読み込み時間、レンダリング、イメージのデコードなど細かく判別できます。CPU使用率が基準なので、重たいJavaScript処理の発見も可能でしょう。これだけ細かく測定できればどこに時間がかかっているのが一目で分かります。

各ブラウザとも高速なWebアプリケーション開発に必須の機能が揃っています。Firefox Developer EditionはFPSに重点が置かれていたり、IEはCPUなど各ブラウザの目的が異なるのが興味深いです。
システム開発プロジェクトが進むと、だんだんとコードの方向性などを見失いがちになり、そのままでは潜在的なバグや問題を引き起こしかねません。そのようなエラーと潜在的な問題を事前に検出するためにはLint系ライブラリが役に立ちます。
JavaScriptとCSSのLintライブラリについて、簡単にセットアップと実行方法も合わせて紹介していきます。
まずはJavaScriptのLintから
JSHint
JSHintは、後述のJSLintからフォークされました。JSLintが厳しい設定となっているのに比べ、JSHintはルールが非常に緩くなっています。

JSHintはそのままでは殆どチェックを行いません。よって、利用する時はルールの設定ファイルが必要です。設定ファイルはプロジェクトルートに .jshintrc ファイルを設置して行います。
{
"indent": 4,
"strict":true
}
各ルールオプションはJSHint Options Referenceを参考にして下さい。
コマンドラインからの実行
npmでのインストールで、コマンドラインからの実行が可能です。
$ npm install -g jshint
$ jshint test.js
タスクランナーからの実行
JSHintのタスクランナーはGulp:gulp-jshintとGrunt:gruntjs/grunt-contrib-jshint · GitHubを参考にして下さい。
JSLint
JSLintはダグラス・クロックフォード氏によって作られました。かなり制約が厳しいことで評判になっていますが、そのチェックを乗り越えるという、いわば修行とも取れるこのツールの特徴が今現在まで利用され続け、各Lintアプリケーションへ影響を与えているのではないでしょうか。

Webサイトではソースコードを貼り付けることですぐに利用が可能です。
コマンドラインからの実行
npmでのインストールで、コマンドラインからの実行が可能です。
$ npm install -g jslint
$ eslint test.js test2.js
タスクランナーからの実行
JSLintのタスクランナーはgulp-jslintとgrunt-jslintを参考にして下さい。
ESLint
ESLintはJSHintやJSLintと違い、独自ルールをプラグインで追加できるという特徴を持っています。独自ルールは設定ファイルである .eslintrc をJSONかYAMLを編集して追加します。また、直接コメントに記述することでルールを設定できますので、グローバルに設定ファイルを利用し各コメントにてローカル設定を記述すると柔軟に各プロジェクトに対応できるでしょう。

コマンドラインからの実行
npmでのインストールで、コマンドラインからの実行が可能です。
$ npm install -g eslint
質問形式で設定ファイルの .eslintrc を生成します。
$ eslint --init
プロジェクトルートから対象のディレクトリやファイルを指定して実行します。
$ eslint test.js test2.js
タスクランナーからの実行
ESLintのタスクランナーはgulp-eslintとgrunt-eslintを参考にして下さい。
CSSのLint系ライブラリ
CSS Lint
CSS LintはCSSを書くためのベストプラクティス集の意味合いが強いツールです。CSS自体はある程度無理をしても動いてしまいますが、その結果として人によってコードが左右されてしまうことが多くなってしまいます。その辺りの指針としてCSS Lintを利用することで、プロジェクト全体でコーディングの統一化が図れるでしょう。

Webサイトでは、コードを貼り付けることで利用が可能です。
コマンドラインからの実行
npmでのインストールで、コマンドラインからの実行が可能です。
$ npm install -g eslint
$ csslint target.css
設定ファイル
プロジェクトルートに.csslintc として設定を記述します。以下は.csslintcの記述例です。
{
"bulletproof-font-face": false,
"compatible-vendor-prefixes": false,
}
タスクランナーからの実行
Gulpの場合:lazd/gulp-csslint
インストール
$ npm install --save-dev gulp-csslint
gulpfile.js
var csslint = require('gulp-csslint');
gulp.task('css', function() {
gulp.src('client/css/*.css')
.pipe(csslint())
.pipe(csslint.reporter());
});
Gruntの場合:gruntjs/grunt-contrib-csslint
インストール
$ npm install grunt-contrib-csslint --save-dev
Gruntfile.js
csslint: {
strict: {
options: {
import: 2
},
src: ['path/to/**/*.css']
},
lax: {
options: {
import: false
},
src: ['path/to/**/*.css']
}
}
タスクランナーからのCSSチェックツール
ここからはタスクランナーでの利用においてCSSをチェックするツールを紹介します。CSS Lintでも同様の対応が可能なものもありますが、特定の実用性の高いライブラリを紹介していきます。
CSSプロパティ重複チェック
peterkeating/grunt-csscss · GitHub
CSSのプロパティの重複チェックを行うツールです。このプラグインを起動するには事前にRubyの csscss をセットアップします。
$ gem install csscss
$ npm install grunt-csscss --save-dev
Gruntfile.jsの記述例です。
grunt.initConfig({
csscss: {
dist: {
src: ['css/style.css']
}
}
});
grunt.loadNpmTasks('grunt-csscss');
grunt.registerTask('default', ['csscss']);
CSSで利用中のクラスとIDをチェックする
利用中のCSSに対して、指定したURLやHTMLファイル内で、利用されているクラスやIDだけを抽出して、新たにCSSを作成するプラグインです。複数のHTMLファイルに対応していますので、CSSをまとめるのにも便利そうです。
Gulpの場合:ben-eb/gulp-uncss · GitHub
インストール
$ npm install gulp-uncss --save-dev
gulpfile.jsの利用例です。
var gulp = require('gulp');
var uncss = require('gulp-uncss');
gulp.task('default', function () {
return gulp.src('site.css')
.pipe(uncss({
html: ['index.html', 'posts/**/*.html', 'http://example.com']
}))
.pipe(gulp.dest('./out'));
});
Gruntの場合:addyosmani/grunt-uncss · GitHub
インストール
npm install grunt-uncss --save-dev
Gulpfile.js の利用例です。
module.exports = function(grunt) {
grunt.initConfig({
uncss: {
dist: {
files: {
'dist/css/tidy.css': ['app/index.html', 'app/about.html']
}
}
}
});
grunt.loadNpmTasks('grunt-uncss');
grunt.registerTask('default', ['uncss']);
}
最後に
いかがでしょうか。おそらくCLIから利用するのは限定的だと思います。殆どのライブラリではタスクランナーから利用できますので定期的な実行を行うでしょう。さらにタスクランナーではwatchをすることで都度確認ができますので、コーディング中に迷うことなくプロジェクトを進められるでしょう。また、IDEやSublimeText、AtomなどのエディタではLint系のプラグインとしても設定可能なものがあります。ぜひ紹介したライブラリを活用してみて下さい。