<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Stylus &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/stylus/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.mach3.jp</link>
	<description></description>
	<lastBuildDate>Tue, 26 Mar 2013 01:28:16 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>コーダーさんの為のGrunt入門（後編）〜CSSプリコンパイラ編</title>
		<link>https://blog.mach3.jp/2013/03/26/gruntjs-css.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 26 Mar 2013 01:28:16 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Grunt.js]]></category>
		<category><![CDATA[LESS]]></category>
		<category><![CDATA[Sass]]></category>
		<category><![CDATA[Stylus]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=3066</guid>

					<description><![CDATA[前編の導入編 に続いて、 コーダーさんにとって強力な武器である、Less/Sass/Stylus等のCSSプリコンパイラのコンパイルを Gruntにお任せしてみる方法を紹介していきます。 Less/Sass/Stylus [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="/2013/03/gruntjs.html">前編の導入編</a> に続いて、 コーダーさんにとって強力な武器である、Less/Sass/Stylus等のCSSプリコンパイラのコンパイルを Gruntにお任せしてみる方法を紹介していきます。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-InKstkN_iLo/UUl5hpVLk2I/AAAAAAAACAg/zGNCjzkb8f0/s400/20120320-00.png" alt="コーダーさんの為のGrunt入門（後編）〜CSSプリコンパイラ編"/></figure>



<p></p>



<span id="more-3066"></span>



<h2 class="wp-block-heading">Less/Sass/Stylus をGruntでコンパイルする</h2>



<p>ではさっそく、GruntでCSSプリコンパイラを扱うタスクを紹介します。</p>



<ul class="wp-block-list">
<li><a href="https://github.com/gruntjs/grunt-contrib-less">grunt-contrib-less</a> &#8211; LessをCSSにコンパイルします</li>



<li><a href="https://github.com/gruntjs/grunt-contrib-sass">grunt-contrib-sass</a> &#8211; SassをCSSにコンパイルします</li>



<li><a href="https://github.com/gruntjs/grunt-contrib-stylus">grunt-contrib-stylus</a> &#8211; StylusをCSSにコンパイルします</li>
</ul>



<p>指定できるオプションは異なりますが、設定の仕方に差はありません。</p>



<p>違いを挙げるならば、Less/StylusはJavaScriptで書かれているのでnode.js上で動作させられますが、 RubyベースのSassは外部のsassコマンドを呼び出す仕組みになっており、別途インストールが必要です。 結果、Gruntとより相性が良いのはLess/Stylusであると言えますね。</p>



<p>ここでは、私の好きなLessを例にあげてみます。</p>



<h2 class="wp-block-heading">Lessをコンパイルする（grunt-contrib-less）</h2>



<h3 class="wp-block-heading">基本設定</h3>



<p>まず &#8220;grunt-contrib-less&#8221; をインストールしておきます。</p>


<pre class="wp-block-code"><span><code class="hljs">$ npm install grunt-contrib-less
</code></span></pre>


<p>Gruntfile.js の内容は、例えば次のようになります。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-built_in">module</span>.exports = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">grunt</span>)</span>{

    <span class="hljs-comment">// grunt-contrib-less タスクの読み込み</span>
    grunt.loadNpmTasks(<span class="hljs-string">"grunt-contrib-less"</span>);

    grunt.initConfig({
        <span class="hljs-attr">less</span> : {
            <span class="hljs-comment">// 作業のラベルは"dist"にしてみます</span>
            <span class="hljs-attr">dist</span> : {
                <span class="hljs-comment">// オプションの指定</span>
                <span class="hljs-attr">options</span> : {
                    <span class="hljs-attr">compress</span> : <span class="hljs-literal">true</span>
                },
                <span class="hljs-comment">// コンパイルするファイルの指定</span>
                <span class="hljs-attr">files</span> : {
                    <span class="hljs-string">"./assets/css/style.css"</span> : <span class="hljs-string">"./assets/less/style.less"</span>
                }
            }
        }
    });
};
</code></span></pre>


<p>※ 基本的なタスクの書き方については <a href="/2013/03/gruntjs.html">前編</a> にて</p>



<p><em>&#8220;options&#8221;</em>セクションでオプションの設定を行い、 <em>&#8220;files&#8221;</em>セクションで出力するファイルの指定を行います。</p>



<p><em>&#8220;files&#8221;</em>のキー（左辺）には出力先のCSSファイル、値（右辺）には元となるLessファイルへのパスを指定してください。 上の例では、 &#8220;./assets/less/style.less&#8221; がコンパイルされた結果が、&#8221;./assets/css/style.css&#8221; に保存されます。</p>



<h3 class="wp-block-heading">実行</h3>


<pre class="wp-block-code"><span><code class="hljs">$ grunt less:dist
</code></span></pre>


<h3 class="wp-block-heading">オプション</h3>



<p>多く使われるであろうオプションは次の物でしょう。</p>



<ul class="wp-block-list">
<li><em>compress</em> : Boolean (false) &#8211; 空白などを除去して圧縮します</li>



<li><em>yuicompress</em> : Boolean (false) &#8211; cssmin.js（YUICompressorのJS版）で圧縮します</li>
</ul>



<p>その他のオプションについては <a href="https://github.com/gruntjs/grunt-contrib-less">grunt-contrib-lessのREADME</a> を参照してください。</p>



<h2 class="wp-block-heading">ファイルの更新を検知してコンパイルする（grunt-contrib-watch）</h2>



<h3 class="wp-block-heading">基本設定</h3>



<p>多くのコンパイラにも実装されているファイル監視機能ですが、 Gruntでも <a href="http://github.com/gruntjs/grunt-contrib-watch">grunt-contrib-watch</a> というプラグインとして提供されています。</p>


<pre class="wp-block-code"><span><code class="hljs">npm install grunt-contrib-watch
</code></span></pre>


<p>先ほどのLessのタスクを、ファイルを監視して実行してみます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-built_in">module</span>.exports = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">grunt</span>)</span>{
    grunt.loadNpmTasks(<span class="hljs-string">"grunt-contrib-less"</span>);
    grunt.loadNpmTasks(<span class="hljs-string">"grunt-contrib-watch"</span>);

    grunt.initConfig({
        <span class="hljs-attr">less</span> : {
            <span class="hljs-attr">dist</span> : { ... }
        },
        <span class="hljs-attr">watch</span> : {
            <span class="hljs-comment">// ラベルは"less"にしてみます</span>
            <span class="hljs-attr">less</span> : {
                <span class="hljs-comment">// "files"セクションで監視するファイルの条件を指定</span>
                <span class="hljs-attr">files</span> : &#91;
                    <span class="hljs-string">"./assets/less/*.less"</span>
                ],
                <span class="hljs-comment">// "tasks"セクションで実行するタスクを指定</span>
                <span class="hljs-attr">tasks</span> : &#91;
                    <span class="hljs-string">"less:dist"</span>
                ]
            }
        }
    });
};
</code></span></pre>


<p><em>&#8220;files&#8221;</em>セクションで監視するファイルの条件を設定します。 そして<em>&#8220;tasks&#8221;</em>セクションで、<em>&#8220;files&#8221;</em>のファイルが更新された場合に実行するタスクを設定します。</p>



<p><em>&#8220;files&#8221;</em>の値には、直接ファイル名を指定する他にパターンマッチングを使用する事ができ、特定ファイルの除外などの細かい設定が可能です。 詳細は公式ドキュメントにあるのでご参照ください。</p>



<p>cf) <a href="http://gruntjs.com/configuring-tasks#globbing-patterns">Globbing patterns | Configuring tasks &#8211; Grunt: The JavaScript Task Runner</a></p>



<h3 class="wp-block-heading">実行</h3>



<p>監視を開始するとターミナルは待機状態になります。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$ grunt watch:less
Running <span class="hljs-string">"watch:less"</span> task
Waiting...
</code></span></pre>


<p>&#8220;./assets/less/&#8221; にあるLessファイルを更新すると、自動的に &#8220;less:dist&#8221; タスクを実行する様になります。</p>



<h3 class="wp-block-heading">livereload もある？</h3>



<p>私は使ったことがありませんが、livereload（ファイル更新を検知してブラウザをリロードする）を実現するプラグインもあるようです。</p>



<ul class="wp-block-list">
<li><a href="https://github.com/gruntjs/grunt-contrib-livereload">gruntjs/grunt-contrib-livereload · GitHub</a></li>
</ul>



<p>ここでは説明を省きますが、このプラグインは上で挙げた <em>&#8220;grunt-contrib-watch&#8221;</em> ではなく <a href="https://github.com/yeoman/grunt-regarde">&#8220;grunt-regarde&#8221;</a> の使用が推奨されるようです。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Note that grunt-contrib-livereload is designed to use grunt-regarde instead grunt-contrib-watch (mainly due to shortcomings in the watch task which doesn&#8217;t give access to changed files because it spawns tasks in subprocesses.)</p>
</blockquote>



<h2 class="wp-block-heading">GUIコンパイラでいいんじゃないの？</h2>



<p>非常にもっともなご意見です。</p>



<p>本記事で挙げたCSSプリコンパイラの事例に限って言えば、 <a href="http://compass.handlino.com/">Compass</a>、<a href="http://incident57.com/codekit/">CodeKit</a>や<a href="http://incident57.com/less/">Less.app</a>等、優秀なGUIコンパイラが数多くリリースされているので、 「黒い画面」が苦手な方は無理して導入する事もないと思います。</p>



<p>ただ、GUIコンパイラに対するGruntの優位点を挙げるとすれば、 環境を跨いでの設定の共有が極めて容易な点かな、と思っています。 nodeが動く環境ならばOS問わずどこでも同じ設定ファイルで、コマンド一発で同じ事が出来るわけです。</p>



<p><a href="/2013/03/gruntjs.html">前編</a>で触れたGruntの魅力に興味を持たれたならば、 これを機に「黒い画面」とのお付き合いを始めてみても良いのではないでしょうか。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>そんなわけで、最近ではGitとGruntとBowerのセットで制作を進めています。</p>



<p>これらの優秀なソフトウェアの開発者には足をむけて寝られませんが、 オープンソース故に多方面にいらっしゃるわけで、逆立ちして寝るしかなさそうです。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
