<?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>Grunt.js &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/grunt-js/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>
		<item>
		<title>コーダーさんの為のGrunt入門（前編）〜導入編</title>
		<link>https://blog.mach3.jp/2013/03/21/gruntjs.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Thu, 21 Mar 2013 01:56:11 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Build]]></category>
		<category><![CDATA[Grunt.js]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[Tools]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=3048</guid>

					<description><![CDATA[以前はmakeを使って納品用のデータをビルドしていたりしたのですが、 去年くらいから代替にGruntを使ってみています。 この度0.3.xから0.4系に切り替えたので、覚書も兼ねてGruntの導入・使い方を記しておきます [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>以前はmakeを使って納品用のデータをビルドしていたりしたのですが、 去年くらいから代替にGruntを使ってみています。 この度0.3.xから0.4系に切り替えたので、覚書も兼ねて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入門（前編）〜導入編"/></figure>



<p></p>



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



<ol class="wp-block-list">
<li>Gruntってなに</li>



<li>Gruntを導入する</li>



<li>使ってみよう</li>



<li>どんなタスクがあるの？</li>



<li>その他Gruntの魅力</li>



<li>まとめ</li>
</ol>



<h2 class="wp-block-heading">Grunt ってなに</h2>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/-cQXlXiOFRt0/UUl5hobAbMI/AAAAAAAACAg/9MA4u_DNuj0/s500/20120320-01.png" alt="GRUNT: The JavaScript Task Runner"/></figure>



<p></p>



<ul class="wp-block-list">
<li><a href="http://gruntjs.com/">GRUNT: The JavaScript Task Runner</a></li>
</ul>



<p>Gruntはnode.jsベースで作られたタスクベースのコマンドラインビルドツールです。</p>



<h3 class="wp-block-heading">ビルドツールってなに</h3>



<p>ビルドは、ソースファイル群を元にして、実行出来る成果物を生成するプロセスの事を指します。</p>



<p>cf) <a href="http://goo.gl/jZUQU">ビルド (ソフトウェア) &#8211; Wikipedia</a></p>



<p>鍋に鶏と野菜とコンソメを入れて煮込んだらポトフが出来るとして、 鍋の役割を担ってくれるのがビルドツールです。（そんな認識であっているかな？） レシピを設定しておくことが出来るので、いつでもすぐに美味しいポトフがお楽しみ頂けます。</p>



<p>具体的には、Web制作では主にJavaScriptファイルを結合・圧縮したり、 Less/Sass/Stylus等のCSSプリコンパイラの結果を生成したり、 画像の最適化などを行い、最終的に動作するWebページにしていきます。</p>



<h2 class="wp-block-heading">Gruntを導入する</h2>



<h3 class="wp-block-heading">インストール</h3>



<p>まずはGruntを導入してみます。node.jsベースなのでまず node.jsをインストールし、</p>


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


<p>等とします。環境によってはsudo等が必要です。</p>



<p>grunt-cli はローカルにインストールされたgruntを呼び出すだけの係の人なので、 別途gruntも入れておく必要があります。プロジェクトルートか、あるいはその親ディレクトリにインストールしておきましょう。</p>


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


<h2 class="wp-block-heading">使ってみよう</h2>



<h3 class="wp-block-heading">Gruntfile.js</h3>



<p>プロジェクトディレクトリに <em>Gruntfile.js</em> ファイルを用意して設定を記述し、 そのディレクトリで <em>grunt</em> コマンドを実行するとビルドが始まります。</p>



<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">// `loadnpmTasks`で使用したいタスクを読み込んでおく</span>
    grunt.loadNpmTasks(<span class="hljs-string">"grunt-contrib-uglify"</span>);

    <span class="hljs-comment">// `initConfig` で基本設定</span>
    grunt.initConfig({
        <span class="hljs-attr">uglify</span> : {
            <span class="hljs-attr">dist</span> : {
                <span class="hljs-attr">src</span> : &#91;<span class="hljs-string">"assets/js/script.js"</span>],
                <span class="hljs-attr">dest</span> : <span class="hljs-string">"assets/js/script.min.js"</span>
            }
        }
    });

    <span class="hljs-comment">// `registerTask` でタスクに名前をつける</span>
    <span class="hljs-comment">// "default" でデフォルトのタスクを設定</span>
    grunt.registerTask(<span class="hljs-string">"default"</span>, &#91;<span class="hljs-string">"uglify"</span>]);

};
</code></span></pre>


<h3 class="wp-block-heading">タスクについて</h3>



<p>Gruntに命令する処理を「タスク」と呼びます。</p>



<p>上の例では&#8221;uglify&#8221;というタスクに、&#8221;dist&#8221;という作業を任せています。 &#8220;uglify&#8221;は<a href="https://github.com/mishoo/UglifyJS">uglify.js</a> を使用してJavaScriptの圧縮を行なってくれるタスクで、 &#8220;src&#8221; にあるファイルリストをひとまとめにして圧縮した結果を &#8220;dest&#8221; のファイルに保存します。</p>



<p>タスクははじめから入ってるわけではないので、 使いたい物を都度インストールしましょう。</p>


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


<h3 class="wp-block-heading">ビルドの実行</h3>



<p>上の例ではデフォルトのタスクにuglifyが設定されているので、引数なしで</p>


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


<p>とすればタスクが実行され、assets/js/script.js を圧縮した結果が assets/js/script.min.js として保存されます。</p>



<p>タスクを指定して実行したい場合は、引数にタスクの名前を渡します。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml">$ grunt uglify # <span class="hljs-symbol">&amp;lt;</span>= uglifyタスクを実行
$ grunt uglify:dist # <span class="hljs-symbol">&amp;lt;</span>= minタスクのdistという名前の作業を実行
</code></span></pre>


<h2 class="wp-block-heading">どんなタスクがあるの？</h2>



<p>以下が代表的だと思しきプラグインです。 （&#8221;contrib&#8221; とついている物は公式のものです。） 使いたい物を npm install でインストールし、 <em>loadNpmTasks</em> で読み込んで使用しましょう。</p>



<ul class="wp-block-list">
<li><a href="https://github.com/gruntjs/grunt-contrib-concat">grunt-contrib-concat</a> &#8211; ファイルを結合します</li>



<li><a href="https://github.com/gruntjs/grunt-contrib-uglify">grunt-contrib-uglify</a> &#8211; JavaScriptファイルを圧縮します</li>



<li><a href="https://github.com/gruntjs/grunt-contrib-cssmin">grunt-contrib-cssmin</a> &#8211; CSSファイルを圧縮します</li>



<li><a href="https://github.com/gruntjs/grunt-contrib-watch">grunt-contrib-watch</a> &#8211; ファイルの更新を監視して任意のタスクを実行します</li>



<li><a href="https://github.com/gruntjs/grunt-contrib-copy">grunt-contrib-copy</a> &#8211; ファイルやディレクトリをコピーします</li>



<li><a href="https://github.com/gruntjs/grunt-contrib-clean">grunt-contrib-clean</a> &#8211; ファイルやディレクトリを削除します</li>
</ul>



<p>具体的な設定例等は、各リポジトリのREADMEをご覧ください。 また、その他にも多くのタスクがあるので使えそうな物があったらピックアップしてみるといいでしょう。</p>



<ul class="wp-block-list">
<li><a href="http://gruntjs.com/plugins">Plugins &#8211; Grunt: The JavaScript Task Runner</a></li>
</ul>



<h2 class="wp-block-heading">その他Gruntの魅力</h2>



<p>なんといっても、JavaScriptベースである為にプラグイン開発が非常に身近にある点だと思います。</p>



<p>cf) <a href="http://gruntjs.com/creating-tasks">Creating tasks &#8211; Grunt: The JavaScript Task Runner</a></p>



<p>JavaScriptに心得のある人ならば、自分が使いやすいようなタスク・プラグインを自前で開発して、 自分好みの開発環境を構築していく事が出来ます。 また、その為に便利なインターフェイスも十分整備されています。 有用なプラグインが書けたら、npmにパブリッシュしておけばいつでも使えますね。</p>



<p>まさにnode様様といったところです。</p>



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



<p>Grunt の概要をざっくり紹介しました。</p>



<p>これだけではそこまで有用と思われないかもしれませんが、 多くのコーダーさんにとって威力を発揮するのは、やはりCSSプリコンパイラのビルドだと思います。 後編ではそのあたりを紹介してみます。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>スタイルガイドを生成する「StyleDocco」の使用感</title>
		<link>https://blog.mach3.jp/2013/01/07/styledocco.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Mon, 07 Jan 2013 01:31:35 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Grunt.js]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[Styledocco]]></category>
		<category><![CDATA[Styleguide]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2944</guid>

					<description><![CDATA[先日スタイルガイドを制作する機会がありまして、 せっかくなので、スタイルガイドの生成に利用したStyleDoccoの使用感などをまとめておきます。 スタイルガイドについて ざっくり言うとスタイルシートのドキュメントです。 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>先日スタイルガイドを制作する機会がありまして、 せっかくなので、スタイルガイドの生成に利用したStyleDoccoの使用感などをまとめておきます。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/-n9KiTBJByMY/UOlgq5P3IrI/AAAAAAAAB5s/Lnug37hl7KA/s400/20120106-00.png" alt="スタイルガイドを生成する「StyleDocco」の使用感"/></figure>



<p></p>



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



<h2 class="wp-block-heading">スタイルガイドについて</h2>



<p>ざっくり言うとスタイルシートのドキュメントです。</p>



<p>自分一人で完結するその場限りのページなら良いのですが、 複数人のチームで組み込んでいたり、メンテナンス担当が他の方だったりする場合、 プロジェクトのCSSをドキュメント化しておく必要が出てきますね。例えば、</p>



<ul class="wp-block-list">
<li>どのような命名規則や方針で書かれていて</li>



<li>どこになにがあり</li>



<li>どのようなモジュールがどこで使えて</li>



<li>そのモジュールはどうするとどのような挙動を起こすのか</li>
</ul>



<p>等をまとめておく文書になると思います。 規模によってはかなり骨な作業になりそうです。</p>



<h2 class="wp-block-heading">StyleDoccoとは</h2>



<ul class="wp-block-list">
<li><a href="http://jacobrask.github.com/styledocco/">StyleDocco</a></li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>StyleDocco generates documentation and style guide documents from your stylesheets.</p>
</blockquote>



<p>スタイルシートを読み込んで、自動的にドキュメンテーションを生成してくれるツールです。</p>



<p>その為の記法に従う必要がありますが、 基本的にはCSSの記述の前に、コメント（ /* */ )で、概要文とプレビュー用のHTMLを書くだけです。 もちろんそのままCSSとしても機能します。</p>



<h2 class="wp-block-heading">インストール</h2>



<p>早速インストールをしてみます。 node.jsで動作するので、先に導入しておきましょう。</p>



<p>node.jsが入ったら、npmコマンドを叩くだけです。<br />
※環境によってはsudoや管理者権限が必要だったりします。</p>


<pre class="wp-block-code"><span><code class="hljs">$ npm install -g styledocco
</code></span></pre>


<h2 class="wp-block-heading">使い方</h2>



<h3 class="wp-block-heading">CSSの書き方</h3>



<p>前述の通り、ドキュメントの生成にはその為の記法に従う必要があります。</p>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-comment">/*
# ボタン

基本的なボタンスタイル。

    &lt;button class="button"&gt;ボタン&lt;/button&gt;

*/</span>

<span class="hljs-selector-class">.button</span> {
    <span class="hljs-attribute">border-radius</span>:<span class="hljs-number">4px</span>;
    <span class="hljs-attribute">border</span>:<span class="hljs-number">1px</span> solid <span class="hljs-number">#ccc</span>;
    <span class="hljs-attribute">background-color</span>:<span class="hljs-number">#f9f9f9</span>;
}
</code></span></pre>


<ul class="wp-block-list">
<li>概要文はMarkdown記法に対応しています。</li>



<li>プレビュー用のHTMLにはインデントが必要です。<br /><br />（タブでもいけましたが、一応公式によれば4スペースとの事です。）</li>
</ul>



<h3 class="wp-block-heading">生成コマンド</h3>



<p>インストールすると <code>styledocco</code> コマンドが使用出来るようになります。 以下は、「css」ディレクトリの中のファイルを元にドキュメントを生成する例。 出力先はデフォルトで「docs」ディレクトリになります。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$ styledocco -n <span class="hljs-string">"My Project"</span> css
</code></span></pre>


<p>使いそうな引数オプションはここらへんでしょうか。</p>



<ul class="wp-block-list">
<li>&#8211;name -n プロジェクト名（ドキュメントタイトルになります）</li>



<li>&#8211;out -o 出力ディレクトリ（デフォルトはdocs）</li>



<li>&#8211;preprocessor 使用するプリプロセッサ（Sassとかlessのコマンドを渡します）</li>
</ul>



<p>例えば以下は「My Project」というタイトルで、「styles」フォルダのソースを元に「mydocs」へ出力をし、 プリプロセッサには「lessc」コマンドを使用する事になります。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">styledocco -n <span class="hljs-string">"My Project"</span> -o mydocs --preprocessor <span class="hljs-string">"lessc"</span> styles
</code></span></pre>


<p>cf) <a href="http://jacobrask.github.com/styledocco/index.html#usage">StyleDocco &#8211; Usage</a></p>



<h3 class="wp-block-heading">gruntで自動化など</h3>



<p>gruntでwatchして自動化したい場合は、<a href="https://github.com/indieisaconcept/grunt-styleguide">grunt-styleguide</a>等を利用します。 （諸事情により私は使いませんでした）</p>



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



<p>あるいは <a href="https://github.com/sindresorhus/grunt-shell">grunt-shell</a> でシェルコマンドを書いたり、 自分でタスクを書くなどして、うまいこと楽をすると良いでしょう。</p>



<h2 class="wp-block-heading">その他、細かい使用感など</h2>



<h3 class="wp-block-heading">ページのはじめに謎の空白のボックスが？</h3>



<p>ちょっとハマった箇所ですが、ページの一番はじめのセクションで謎の空白ボックスが生まれてしまいました。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/-R7TDcIMjxHs/UOlgq8NnCHI/AAAAAAAAB5s/8bVqDgymdjw/s500/20120106-01.png" alt="ページのはじめに謎の空白のボックスが"/></figure>



<p></p>



<p>概要文のコメントの先頭に改行を挟んでしまうとこうなります。</p>


<pre class="wp-block-code"><span><code class="hljs">/*

# これはダメ



/*
# こうしましょう
</code></span></pre>


<h3 class="wp-block-heading">プレビューHTML前の改行</h3>



<p>概要文とHTMLの間は基本的に1行空いていればいいのですが、 概要文がMarkdownのリスト等になっている様な場合は2行以上あけないとプレビューが正常に表示されません。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml">/*
# ボタン

* リスト
* リスト


    <span class="hljs-comment">&lt;!--こういったケースは2行あけましょう。--&gt;</span>
</code></span></pre>


<h3 class="wp-block-heading">プリコンパイラも併せて使うと重たい？</h3>



<p>私の携わったプロジェクトではSass+bootstrapで実装をしていた為、 Sassの重さとbootstrapのボリュームが相まってcss自体のジェネレートに少々時間を要しました。 それに加えて、StyleDoccoのドキュメント生成もある程度時間がかかるため、合わせ技で相当遅くなります。 gruntで自動化をしなかったのはその為です。</p>



<p>ただ、ファイル数やボリュームにも因る所が大きいので一概には言えません。 また、逆に最適化をする機会にも繋がるとも言えますね。</p>



<h3 class="wp-block-heading">ナビゲーションの生成について</h3>



<p>ドキュメントのヘッダナビゲーションには、 スタイルシートのファイル毎にメニューが生成されます。 また、フォルダでファイルを分けている場合は、プルダウンメニューになります。</p>



<p>例えばこのような構造にしてあった場合</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><pre class="wp-block-code"><span><code class="hljs">css/
  ├ common/
  │   ├ foo.css
  │   ├ bar.css
  │   └ baz.css
  ├ components/
  ├ widgets/
  └ README.md
</code></span></pre></blockquote>



<p>このような感じに出力されます。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/--AxdiR0u-y0/UOlgq8-MQ6I/AAAAAAAAB5s/esRZQKbgp-s/s500/20120106-02.png" alt="ナビゲーションの生成"/></figure>



<p></p>



<p>ただし、Macでは問題なかったのですが、当方のWindows環境ではサブフォルダを全て無視されてしまいました。 Issueに投げてみたので、何か反応があったらお伝えします。</p>



<h3 class="wp-block-heading">ドキュメントページのパフォーマンス</h3>



<p>生成されたドキュメントページで動作がもたつくな、と感じたので中身をみてみました。</p>



<p>StyleDoccoのドキュメントページは、ページ毎にひとつのHTMLになっています。 CSSやJavaScriptなどの外部リソースはありません。完全にひとつのファイルです。</p>



<p>プレビューの出力はどうやっているのかというと</p>



<ol class="wp-block-list">
<li>iframeを動的に生成して、そこに自分自身を読み込む</li>



<li>読まれたHTMLでプレビューを生成し、描画する</li>
</ol>



<p>という処理をHTMLファイルに記述されたJavaScriptで行なっているようです。</p>



<p>JSで動的に生成している関係上、物とボリュームによっては描画や目次の生成などの動作がもたつく場合があります。 が、「単一ファイルでいきたい！！」というポリシーがひしひしと伝わってくるので、これはこういう物だと思って割り切りました。</p>



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



<p>自前のテンプレートでスタイルガイドを書く手もありますが、 うまく用途にマッチするのであれば、こういうツールを使って楽をしていきたいですね。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
