<?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/"
	xmlns:series="http://organizeseries.com/"
	>

<channel>
	<title>出口 達也 &#8211; HTML5Experts.jp</title>
	<atom:link href="/deg84/feed/" rel="self" type="application/rss+xml" />
	<link>https://html5experts.jp</link>
	<description>日本に、もっとエキスパートを。</description>
	<lastBuildDate>Sat, 07 Jul 2018 03:14:05 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.7.19</generator>
	<item>
		<title>「今どきのGruntを使ったフロントエンド開発（HTML/CSS編）」HTML5 Conference 2013 セッションレポート</title>
		<link>/deg84/3792/</link>
		<pubDate>Thu, 26 Dec 2013 01:00:32 +0000</pubDate>
		<dc:creator><![CDATA[出口 達也]]></dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Grunt]]></category>
		<category><![CDATA[HTML5 Conference 2013]]></category>

		<guid isPermaLink="false">/?p=3792</guid>
		<description><![CDATA[連載： HTML5 Conference 2013レポート (5)2013年11月30日（土）に開催された「HTML5 Conference 2013」の、株式会社サイバーエージェント・石本光司さんによるセッション「今ど...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/html5-conference-2013-2/" class="series-160" title="HTML5 Conference 2013レポート" data-wpel-link="internal">HTML5 Conference 2013レポート</a> (5)</div><p>2013年11月30日（土）に開催された「<a href="http://events.html5j.org/conference/2013/11/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">HTML5 Conference 2013</a>」の、株式会社サイバーエージェント・石本光司さんによるセッション「今どきのGruntを使ったフロントエンド開発（HTML/CSS編）」の内容をご紹介します。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/12/IMG_5000.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/12/IMG_5000-1024x682.jpg" alt="" width="1024" height="682" class="aligncenter size-large wp-image-3847" srcset="/wp-content/uploads/2013/12/IMG_5000-1024x682.jpg 1024w, /wp-content/uploads/2013/12/IMG_5000-300x200.jpg 300w, /wp-content/uploads/2013/12/IMG_5000-207x137.jpg 207w, /wp-content/uploads/2013/12/IMG_5000.jpg 640w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>

<p>なお、セッションのターゲットはGruntを使ったことのないHTML/CSSコーダーやWebデザイナーさんです。</p>

<h2>なぜGruntを使うのか</h2>

<p><a href="http://gruntjs.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Grunt</a>とは、JavaScriptで書いたタスクを実行してくれるアプリケーション（JavaScript Task Runner）です。</p>

<p>Webアプリケーションの開発が複雑になってきて、CoffeeScript、Sassなどのコンパイルが必要な技術を使うことが多くなってきたことや、フロントエンドのパフォーマンスチューニングのためにJavaScriptやCSSファイルの最小化や画像の最適化を行うことが増えてきました。</p>

<p>Gruntを使うとそれらをまとめて自動化することができるようになります。</p>

<p>GUIアプリケーション（CodeKitなど）でも同じようなことができますが、有料であったり、アプリケーションに慣れるまでの時間がかかったり、複数人で作業する場合に共有しづらいなどの理由で黒い画面（コマンドライン）のGruntを使うことをオススメします。</p>

<h2>Gruntの使い方</h2>

<p>Gruntをインストールするために、まずは<a href="http://nodejs.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">node.js</a>をインストールしましょう。
公式サイトからインストーラーがダウンロードできます。</p>

<p>node.jsがインストールできたら以下のコマンドをコマンドラインで実行してgrunt-cliをインストールします。</p>

<p></p><pre class="crayon-plain-tag">$ npm install grunt-cli -g</pre><p></p>

<p>grunt-cliはGruntをコマンドラインから使えるようにするパッケージです。-gを付けることでどのディレクトリからも使うことができるようになります。</p>

<p>Gruntを実行するにはpackage.json、Gruntfile.js（.coffeeでも可）の2つのファイルが必要になります。</p>

<p>以下、<a href="https://npmjs.org/package/grunt-csso" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">grunt-csso</a>を使う場合を参考に説明をします。</p>

<h3>package.jsonを作る</h3>

<p>package.jsonのひな形を作るために以下のコマンドを実行します。</p>

<p></p><pre class="crayon-plain-tag">$ npm init</pre><p></p>

<p>対話形式で色々と聞かれますがEnterで進めていけばOKです。そうすると以下のようなpackage.jsonのひな形が生成されます。</p>

<p></p><pre class="crayon-plain-tag">{
  "name": "demo",
  "version": "0.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" &amp;&amp; exit 1"
  },
  "author": "",
  "license": "BSD-2-Clause"
}</pre><p></p>

<p>次にローカルのプロジェクトにgrunt本体とgrunt-cssoをインストールするために以下のコマンドを実行します。</p>

<p></p><pre class="crayon-plain-tag">$ npm install grunt --save-dev
$ npm install grunt-csso --save-dev</pre><p></p>

<p>grunt本体とgrunt-cssoがインストールされました。</p>

<p></p><pre class="crayon-plain-tag">{
  "name": "demo",
  "version": "0.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" &amp;&amp; exit 1"
  },
  "author": "",
  "license": "BSD-2-Clause",
  "devDependencies": {
    "grunt": "~0.4.2",
    "grunt-csso": "~0.5.2"
  }
}</pre><p></p>

<p>&#8211;save-devはpackage.jsonのdevDependenciesに開発向けの依存モジュールとして追加してくれるオプションです。複数人で作業する場合にインストールするモジュールを揃えることができます。共有された人は以下のコマンドを実行するだけで必要なパッケージを全てインストールすることができます。</p>

<p></p><pre class="crayon-plain-tag">$ npm install</pre><p></p>

<h3>Gruntfileを作る</h3>

<p>Gruntfileのひな形を作るにはgrunt-initをインストールする必要があります。grunt-initは様々なプロジェクトのひな形を作ることができるアプリケーションです。gitがインストールされていない場合は別途インストールが必要です。</p>

<p>以下のコマンドでGruntfileが生成されます。</p>

<p></p><pre class="crayon-plain-tag">$ npm install grunt-init -g
$ git clone https://github.com/gruntjs/grunt-init-gruntfile.git ~/.grunt-init/gruntfile
$ grunt-init gruntfile</pre><p></p>

<p>package.jsonとGruntfileは既存のプロジェクトからコピーしてきてもOKです。</p>

<h4>Gruntfileの内容について</h4>

<p>Gruntfileの中身で大事なのは3箇所です。</p>

<p>まず最初にインストールしたパッケージを読み込む記述です。</p>

<p></p><pre class="crayon-plain-tag">grunt.loadNpmTasks('grunt-csso');</pre><p></p>

<p>これがないとcssoのタスクが使えません。</p>

<p>次にタスク設定の記述です。</p>

<p></p><pre class="crayon-plain-tag">grunt.initConfig({
  csso: {
    dist: {
      files: {
        'output.css': ['input.css']
      }
    }
  }
});</pre><p></p>

<p>initConfigの中に、タスクを記述していきます。cssoはタスク名、distはターゲットを示しています。filesで入出力のファイル名を記述します。</p>

<p>distの下の階層には大抵入出力のファイル名と必要であればプラグインのオプションを指定します。例えば、開発環境と本番環境で異なるファイルを使っている場合などに、distの部分をdevとprodで分けて設定しておくことで環境ごとにタスクを分けることができます。</p>

<p>最後にカスタムタスクの記述です。</p>

<p></p><pre class="crayon-plain-tag">grunt.registerTask('default', ['csso']);</pre><p></p>

<p>defaultで指定するとgruntコマンドだけで実行することができます。複数のタスクをまとめて任意の名前を付けることもできます。</p>

<p>例の場合だと、以下のコマンドどちらでもcssoを実行することができるようになりました。</p>

<p></p><pre class="crayon-plain-tag">$ grunt csso
$ grunt</pre><p></p>

<h2>Gruntfileのカスタマイズ</h2>

<p>Gruntの使い方が大体分かったらGruntfileをカスタマイズしていきます。</p>

<p>Gruntは公式サイトに<a href="http://gruntjs.com/plugins" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">プラグインの一覧</a>を掲載しています。よく使うタスクはプラグインとして登録されている場合が多いのでまずは探してみましょう。同じ処理をするプラグインが複数あった場合は、grunt-contrib-**というgruntチームがメンテナンスしているプラグインを使う方がオススメです。</p>

<p>もし見つからない場合は自分で作ってみましょう。</p>

<p></p><pre class="crayon-plain-tag">$ npm install grunt-init -g #grunt-initがインストール済みなら不要
$ git clone https://github.com/gruntjs/grunt-init-gruntplugin.git ~/.grunt-init/gruntplugin
$ grunt-init gruntplugin</pre><p></p>

<p>実行することでプラグインのひな形が生成されるので作っていきましょう。</p>

<h3>Maple</h3>

<p>最後にCSSフレームワーク<a href="https://github.com/t32k/maple" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Maple</a>のご紹介です。</p>

<p>CSSフレームワークと言いながら全然CSS部分は作っていないですが<a href="https://github.com/t32k/maple/blob/master/Gruntfile.coffee" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Gruntの設定</a>はある程度できているので参考にしてみてください。</p>

<p>CSSの再利用性を担保するためにcsslintを使ってチェックを行ったり、スタイルガイドを生成できるようにkssを使うことができるようになっています。その他に画像の最適化なども可能です。</p>

<h4>かんたんにGruntを使う</h4>

<p><a href="http://yeoman.io/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Yeoman</a>を使います。
YeomanはGruntを含んでいるのでGruntを簡単にインストールすることができます。</p>

<p>例えば、Mapleをインストールするには以下のコマンドを実行します。</p>

<p></p><pre class="crayon-plain-tag">$ npm install yo -g
$ npm install generator-maple -g
$ mkdir maple-demo &amp;&amp; cd $_
$ yo maple</pre><p></p>

<p>かんたんにGruntとMapleをインストールすることができます。</p>

<h2>まとめ</h2>

<p>なぜGruntを使うのかというと自動化するためです。Webアプリケーションの開発が複雑化によって様々なタスクを実行する必要がありますが、人が実行する場合は忘れてしまったりすることがあります。それらはコンピューターに任せることにしましょう。</p>

<p>さらにGruntであればカスタマイズが可能です。開発しているアプリケーションに合わせたカスタマイズができます。もし必要なプラグインがなくても自分で作ることができます。</p>

<p>また、黒い画面を触るきっかけになるのではないかと思います。Gruntプラグインの開発などの分野はエンジニアが中心の世界になっています。そのためかCSSの便利なモジュールなどは少ない状況です。デザイナーやコーダーの方が参加して頂けるともっとより良いモジュールが作られるようになって、それを使えるようになるとみんながハッピーになれると思います。</p>

<p>とりあえず触って動かしてみるのは説明した通りかんたんにできますので黒い画面が苦手な人も是非チャレンジしてみてください。</p>

<p><DIV align=right></p>

<p style="padding-top: 16px; line-height: 1.55; color: #60aa2a;">（撮影：高橋 佳代子）</p>

<p></div></p>

<p>【講演資料・セッション映像】
<script async class="speakerdeck-embed" data-id="57a669003bb9013102323286f532ced0" data-ratio="1.33333333333333" src="//speakerdeck.com/assets/embed.js"></script></p>

<iframe width="560" height="315" src="//www.youtube.com/embed/b4G81PkZUPc" frameborder="0" allowfullscreen></iframe>
]]></content:encoded>
		
		<series:name><![CDATA[HTML5 Conference 2013レポート]]></series:name>
	</item>
	</channel>
</rss>
